cat
cat copied to clipboard
为什么docker部署后LogView总显示Sorry, the message is not there. It could be missing or archived.
使用最新的master分支进行docker部署,并没有开启HDFS,希望日志使用本地存储,服务端xml配置如下
这里的ip为容器ip
<?xml version="1.0" encoding="utf-8"?>
<server-config>
<server id="default">
<properties>
<property name="local-mode" value="true"/>
<property name="job-machine" value="false"/>
<property name="send-machine" value="false"/>
<property name="alarm-machine" value="false"/>
<property name="hdfs-enabled" value="false"/>
<property name="remote-servers" value="172.20.0.3:8080"/>
</properties>
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="2" local-logivew-storage-time="15" har-mode="true" upload-thread="5">
<hdfs id="dump" max-size="128M" server-uri="hdfs://127.0.0.1/" base-dir="/user/cat/dump"/>
<harfs id="dump" max-size="128M" server-uri="har://127.0.0.1/" base-dir="/user/cat/dump"/>
<properties>
<property name="hadoop.security.authentication" value="false"/>
<property name="dfs.namenode.kerberos.principal" value="hadoop/[email protected]"/>
<property name="dfs.cat.kerberos.principal" value="[email protected]"/>
<property name="dfs.cat.keytab.file" value="/data/appdatas/cat/cat.keytab"/>
<property name="java.security.krb5.realm" value="value1"/>
<property name="java.security.krb5.kdc" value="value2"/>
</properties>
</storage>
<consumer>
<long-config default-url-threshold="1000" default-sql-threshold="100" default-service-threshold="50">
<domain name="cat" url-threshold="500" sql-threshold="500"/>
<domain name="OpenPlatformWeb" url-threshold="100" sql-threshold="500"/>
</long-config>
</consumer>
</server>
<server id="172.20.0.3">
<properties>
<property name="job-machine" value="true"/>
<property name="send-machine" value="true"/>
<property name="alarm-machine" value="true"/>
</properties>
</server>
</server-config>
在项目中,使用SpringBoot进行Transaction打点
public boolean foo(String param1, String param2) {
Transaction transaction = Cat.newTransaction("DataServiceImpl", "foo");
try {
// 业务逻辑
logger.info("param1:{}, param2:{}", param1, param2);
Cat.logEvent("URL.Server", "serverIp", Event.SUCCESS, "ip=${serverIp}");
transaction.setStatus(Transaction.SUCCESS);
return collection != null ? true: false;
} catch (Exception e) {
Cat.logError(e);
return false;
} finally {
transaction.complete();
}
}
运行时控制台输出
[2022-08-07 10:55:06.063] [INFO] CAT home: /Users/xxx/.cat
[2022-08-07 10:55:06.064] [INFO] User dir: /Users/xxxxxxx
[2022-08-07 10:55:06.080] [INFO] Thread group(Cat) created.
[2022-08-07 10:55:06.082] [INFO] CAT client configuration:
domain: com.test.xxxx
host: 192.168.1.2(mgsky1)
servers: 192.168.1.2:2280/8080
[2022-08-07 10:55:06.082] [INFO] Starting thread(Cat-ConfigureRefresher) ...
[2022-08-07 10:55:06.137] [INFO] Starting thread(Cat-ChannelManager) ...
[2022-08-07 10:55:06.137] [INFO] Starting thread(Cat-MessageTransporter) ...
[2022-08-07 10:55:06.138] [INFO] Starting thread(Cat-StatusUpdateTask) ...
[2022-08-07 10:55:06.191] [INFO] Connected to CAT server /192.168.1.2:2280, [id: 0xfa064a25, L:/192.168.1.2:61582 - R:/192.168.1.2:2280]
这里的ip是宿主机ip,我用了一些手段使得它可以与容器联通
在我的CAT home下有如下文件
mgsky1@mgsky1dembp .cat % pwd
/Users/mgsky1/.cat
mgsky1@mgsky1dembp .cat % ls
client.xml mark
docker部署这边讲的也不是特别多,还希望能够帮助一下~
感觉是日志根本没有生成,既然这里用了CAT home,还需要建立/data/appdatas和/data/applogs吗?
一样问题,不知道为啥
查看了/data/appdatas/cat/bucket/report 发现容器里面是有的
这个确实是有,但是我改了storage标签的base-dir,似乎没有起作用...
查看了/data/appdatas/cat/bucket/report 发现容器里面是有的
你尝试没 实机部署,我也没找到log日志
你尝试没 实机部署,我也没找到log日志
似乎搞不定...
你尝试没 实机部署,我也没找到log日志
稍微梳理了一下: 我本地部署的话,是有日志dump出来的
mgsky1@mgsky1deMacbookPro bucket % pwd
/Users/mgsky1/.cat/bucket
mgsky1@mgsky1deMacbookPro bucket % ls
dump report
mgsky1@mgsky1deMacbookPro bucket % cd dump
mgsky1@mgsky1deMacbookPro dump % ls
20220811
mgsky1@mgsky1deMacbookPro dump % ls 20220811/19
cat-172.25.130.18.dat cat-172.25.130.18.idx
tomcat会有对应的日志打印
[08-11 19:20:51.689] [INFO] [DefaultBlockDumperManager] Create block dumper 2022-08-11 19:00:00
[08-11 19:20:51.692] [INFO] [DefaultMessageDumperManager] create message dumper 2022-08-11 19:00:00
[08-11 19:20:51.730] [INFO] [Period] Starting 12 tasks in period [2022-08-11 19:00:00, 2022-08-11 19:59:59]
至于LogView为什么不会展示,是因为默认它会去请求一个远程连接,像这样
http://127.0.0.1:8080/cat/r/model/logview/cat/CURRENT?op=xml&messageId=cat-ac198212-461171-406&waterfall=false×tamp=1660215600000
这个链接你访问的话,是空的
关注一下RemoteLogViewService.java的invoke方法
InputStream in = Urls.forIO().connectTimeout(1000).readTimeout(5000).openStream(url.toExternalForm());
GZIPInputStream gzip = new GZIPInputStream(in);
String xml = Files.forIO().readFrom(gzip, "utf-8");
可以发现,这个链接返回的应该是一个xml,然后这个代码块被一个try...catch包裹,很显然,在这种情况下,肯定会有异常,源代码把异常吞掉了,所以我们是无感的。
@Override
public ModelResponse<String> invoke(ModelRequest request) {
ModelResponse<String> response = new ModelResponse<String>();
Transaction t = newTransaction("ModelService", getClass().getSimpleName());
try {
URL url = buildUrl(request);
t.addData(url.toString());
InputStream in = Urls.forIO().connectTimeout(1000).readTimeout(5000).openStream(url.toExternalForm());
GZIPInputStream gzip = new GZIPInputStream(in);
String xml = Files.forIO().readFrom(gzip, "utf-8");
int len = xml == null ? 0 : xml.length();
t.addData("length", len);
if (len > 0) {
String report = buildModel(xml);
response.setModel(report);
t.addData("hit", "true");
}
t.setStatus(Message.SUCCESS);
} catch (Exception e) {
t.setStatus(Message.SUCCESS);
} finally {
t.complete();
}
return response;
}
解决办法嘛,正在想...CAT用的是unidal,应该是老点评的框架了,官方给的Maven仓库也失效了(所以你会发现博客上很多人都是直接下war包,因为那个仓库404了啊!)...在想怎么解决
看看docker容器里的/data/applogs/cat/cat_2022XXX.log是否有报错 我的报错如下: [/tmp/snappy-1.1.4-libsnappyjava.so Error loading shared library ld-linux-x86-64.so.2: No such file or directory]
如果和我一样的话,在容器里执行: ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2 我是这样logview就有数据了。
看看docker容器里的/data/applogs/cat/cat_2022XXX.log是否有报错 我的报错如下: [/tmp/snappy-1.1.4-libsnappyjava.so Error loading shared library ld-linux-x86-64.so.2: No such file or directory]
如果和我一样的话,在容器里执行: ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2 我是这样logview就有数据了。
是用最新的版本吗?难道是我的环境是mac,出现了不兼容情况?
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
这个确实,我也可以了!!感谢!
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
这个确实,我也可以了!!感谢!
我代码版本4.0.1-RC 使用Dockerfile构建后,出现logview问题,同时时区也有问题。 请问你这个解决方案的代码版本是?
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
这个确实,我也可以了!!感谢!
我代码版本4.0.1-RC 使用Dockerfile构建后,出现logview问题,同时时区也有问题。 请问你这个解决方案的代码版本是?
没有用4.0,用得是3.x的版本
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
刚切换成3.x版本了,dump日志也生成了 bash-4.4# ls cat-springboot-demo-172.17.11.47.dat cat-springboot-demo-172.17.11.47.idx
我是配了集群版本,1个master节点和2个slave节点,刷新的时候debug了RemoteLogViewService的invoke,每次都是抛出EOFException
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
刚切换成3.x版本了,dump日志也生成了 bash-4.4# ls cat-springboot-demo-172.17.11.47.dat cat-springboot-demo-172.17.11.47.idx
我是配了集群版本,1个master节点和2个slave节点,刷新的时候debug了RemoteLogViewService的invoke,每次都是抛出EOFException
集群的我没有配置过...[尴尬]
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
刚切换成3.x版本了,dump日志也生成了 bash-4.4# ls cat-springboot-demo-172.17.11.47.dat cat-springboot-demo-172.17.11.47.idx 我是配了集群版本,1个master节点和2个slave节点,刷新的时候debug了RemoteLogViewService的invoke,每次都是抛出EOFException
集群的我没有配置过...[尴尬]
dump出来的dat文件格式是cat-springboot-demo-172.17.11.47.dat cat-springboot-demo-172.17.11.47.idx
其中172.17.11.47为k8s集群内部的容器随机ip,但是RemoteLogViewService的invoke是按照我配置的host.ip去进行访问,我怀疑是不是这个ip不一致引起的读不到dat文件