客户端配置
CAT Agent
CAT Agent 通过 java agent 技术与被监控应用程序一起运行,无需额外的安装步骤。它用于收集应用程序的指标(metrics)、链路(tracing)和日志(logging)等数据,直接通过 TCP 协议将监控数据异步发送到 CAT 服务端进行处理。
环境要求:JDK 8 及以上
配置项目:
配置项 | 描述 | 示例 |
---|---|---|
cat.token | 租户标识 | 'unidal': CAT 所在的租户代号 |
cat.namespace | 当前服务所对应的 domain | 'cat': CAT 所在的项目名称 |
cat.endpoints | CAT 消费机地址 | '10.0.0.1':CAT 服务端地址,建议使用内网域名| |
- 配置示例:
# 请使用实际的路径替换 /path/to/cat-agent.jar,将 <cat.token>, <cat.namespace> 以及 <cat.endpoints> 替换为实际的值
export JAVA_TOOL_OPTIONS="-javaagent:/path/to/cat-agent.jar -Dcat.token=<cat.token> -Dcat.namespace=<cat.namespace> -Dcat.endpoints=<cat.endpoints>
java -jar your-application.jar
进一步的配置详见 CAT 配置。
CAT Client
CAT Client 用于在应用程序中埋点,记录应用程序的指标(metrics)、链路(tracing)和日志(logging)等数据。
环境要求:JDK 8 及以上
修改 Maven pom.xml 文件:
- 添加依赖仓库
<project> <!-- ... --> <repositories> <repository> <id>center</id> <url>https://repo.maven.apache.org/maven2/</url> </repository> <repository> <id>cat-next</id> <url>https://repo.cat-next.com/repository/artifact/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
- 添加依赖项目:使用 https://repo.cat-next.com/repository 中的实际版本号替换 ${cat.version}
<dependency> <groupId>org.unidal.cat2</groupId> <artifactId>cat-client</artifactId> <version>${cat.version}</version> </dependency>
自定义埋点示例:
package org.unidal.cat.test;
import org.junit.jupiter.api.Test;
import org.unidal.cat.Cat;
import org.unidal.cat.Counter;
import org.unidal.cat.Transaction;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
class CatTest {
private void doSomething() throws InterruptedException {
TimeUnit.MILLISECONDS.sleep(5);
}
@Test
void logError() {
Cat.logError(new Exception("MyException"));
}
@Test
void logEvent() {
Cat.logEvent("MyType", "MyName");
}
@Test
void newCounter() {
Counter counter = Cat.newCounter("MyCounter", builder -> builder.desc("My Counter").unit("1").attr("tag1", "value1"));
counter.add(1);
counter.add(5, Collections.singletonMap("tag2", "value2"));
counter.add(8, Collections.singletonMap("tag2", "value3"));
}
@Test
void newTransaction() {
Transaction t = Cat.newTransaction("MyType", "MyName");
try {
t.addAttribute("tag1", "value1");
t.addAttribute("tag2", "value2");
doSomething();
t.addData("key1", "value1");
t.addData("THIS IS DATA");
} catch (Exception e) {
Cat.logError(e);
} finally {
t.complete();
}
}
}
- 日志埋点:使用默认的 logback 或者 log4j2 日志框架,无需额外配置