作者回复: 未听说cat和spring里头事务有冲突说法,你用cat的try catch埋点后,具体异常仍可向外抛出,让spring事务rollback机制生效
作者回复: cat本身设计是侵入式的,侵入有利有弊,性能会更好,要改代码是弊。实践中尽量在框架层埋点,让集中框架团队埋好,对业务团队尽量透明,一般业务研发基本不用埋点。另外可以对cat客户端做AOP封装(如spring),SPI封装(可参考apollo做法),也可减少侵入性。
作者回复: 回复你的问题,用[bobo]标注:
1、/data/{appdatas,applogs}/cat是否client跟server端都需要创建?
[bobo]:server要,client只需appdatas(不放心,client建个applogs也没关系)
2、/data/appdatas/cat目录下client.xml仅client端创建即可?
[bobo]:server/client都要,因为server里头也内嵌了一个client,会自检发送server内部的trace数据。
3、/data/appdatas/cat目录下datasources.xml仅server端创建即可?
[bobo]:对,只有server要。
4、/data/applogs/cat目录仅server端才会写入日志?
[bobo]:对,只有server写入(不放心可实际确认)
5、http://10.1.1.1:8080/cat/s/config?op=routerConfigUpdate 客户端路由配置的作用是什么,是否要跟client.xml里面的ip必须保持一致?
[bobo]:为了对client进行一些动态配置(不需要一个一个去改client),比如重新调整CAT server的地址(比如CAT扩容,维护腾挪等)。刚开始建议一致,后面可能动态调整后不一致。
6、配置的问题
client.xml
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="10.1.1.1" port="2280" http-port="8080"/>
<server ip="10.1.1.2" port="2280" http-port="8080"/>
<server ip="10.1.1.3" port="2280" http-port="8080"/>
</servers>
</config>
客户端路由配置:
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="10.1.1.1" backup-server-port="2280">
<default-server id="10.1.1.1" weight="1.0" port="2280" enable="false"/>
<default-server id="10.1.1.2" weight="1.0" port="2280" enable="true"/>
<default-server id="10.1.1.3" weight="1.0" port="2280" enable="true"/>
<network-policy id="default" title="default" block="false" server-group="default_group">
</network-policy>
<server-group id="default_group" title="default-group">
<group-server id="10.1.1.2"/>
<group-server id="10.1.1.3"/>
</server-group>
<domain id="cat">
<group id="default">
<server id="10.1.1.2" port="2280" weight="1.0"/>
<server id="10.1.1.3" port="2280" weight="1.0"/>
</group>
</domain>
</router-config>
enable=false表示机器不可用,10.1.1.1机器不做为消费机集群,若客户端使用10.1.1.1:2280上报数据时是否会出现问题?
[bobo]这个动态配置生效后,client压根就不会向10.1.1.1发送trace数据。
作者回复: 这个每家公司不同,看你的资源富裕情况和审计要求,短的放两周或一个月,长的可放三个月甚至半年以上的。
作者回复: CAT客户端trace缓存在内存中,以一定周期(秒级)向服务器发送,如系统重启,可能很少量丢数据,但完全不丢数据不是CAT(包括其它监控系统)首要设计目标,少量数据的偶尔丢失,并不影响统计趋势性监控。
作者回复: 可以,属于异步调用,相当于跨进程调用,需要在线程间传递调用链上下文context。这种调用链呈现比较复杂,线程之间没有明确时序关系,一般不建议。调用链监控主要适用于同步调用场景。