Java Agent基于字节码增强技术研发,支持自动埋点完成数据上报,Java Agent包含(并二次分发)opentelemetry-java-instrumentation CNCF的开源代码,遵循Apache License 2.0协议,在Java Agent包中对opentelemetry License进行了引用。
OpenTelemetry是工具、API 和 SDK 的集合。使用它来检测、生成、收集和导出遥测数据(指标、日志和跟踪),以帮助您分析软件的性能和行为。OpenTelemetry社区活跃,技术更迭迅速,广泛兼容主流编程语言、组件与框架,为云原生微服务以及容器架构的链路追踪能力广受欢迎。通过对Java字节码的增强技术OpenTelemetry-java-instrumentation可以实现自动埋点上报数据,且腾讯云APM基于OpenTelemetry-java-instrumentation进行二次开发,可以让您拿到更完善的调用琏数据及其对应的行号信息, 本文将通过相关操作在腾讯云平台上使用OpenTelemetry-java-instrumentation上报Java应用数据。
在使用OpenTelemetry-java-instrumentation上报Java应用数据之前,您需要准备以下几项工作:
- 登陆应用性能观测,点击最左侧工具栏中的“应用监控”选项,再点击“接入应用”:
![1](https://private-user-images.githubusercontent.com/64143982/280902575-63d59152-d6fd-4936-adbb-02f2f0ac62c1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNzI0OTcsIm5iZiI6MTczOTE3MjE5NywicGF0aCI6Ii82NDE0Mzk4Mi8yODA5MDI1NzUtNjNkNTkxNTItZDZmZC00OTM2LWFkYmItMDJmMmYwYWM2MmMxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDA3MjMxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUxMzE4YTNmMTg5YzllZDA5MmY3YzFkODVjYzA2M2RhZGQzMTc1Nzc5ZGRkNzVhZmI2YWRjYTlmYzU2ZWVhZTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._pS8aOGDdHn15j7xBhVcB5CtfBKjqIjCIZ7CP-AAdw4)
- 在右侧弹出的界面中,依次进行以下操作:
- 选择使用语言“Java”。
![2](https://private-user-images.githubusercontent.com/64143982/280902596-64c40901-f96d-4937-8b2e-e4b278f09e17.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNzI0OTcsIm5iZiI6MTczOTE3MjE5NywicGF0aCI6Ii82NDE0Mzk4Mi8yODA5MDI1OTYtNjRjNDA5MDEtZjk2ZC00OTM3LThiMmUtZTRiMjc4ZjA5ZTE3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDA3MjMxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJiNDUxMGFkN2QwODI3ZDk3YTljYWNmNDU5NzM3OGM0NjViNGM2YTJlMTBmNDYwNmZlNTI4YjkxZTZhODlmYTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.rAQOTr7UITcwyt3um4mUoaE0z92ZxB5RJTiMum46uU4)
- 选择接入方式--OpenTelemetry,以及上报方式。
![3](https://private-user-images.githubusercontent.com/64143982/280902610-96041e6f-ec31-4d7d-ab26-d2db617548f4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNzI0OTcsIm5iZiI6MTczOTE3MjE5NywicGF0aCI6Ii82NDE0Mzk4Mi8yODA5MDI2MTAtOTYwNDFlNmYtZWMzMS00ZDdkLWFiMjYtZDJkYjYxNzU0OGY0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDA3MjMxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJjZDdmMWFjNzdmOGNlNTgyNjZkZTc1MzIzNjY1ZTUyYzkxOWViNTI4YzhlZjYwZjViNmJlMzIxZTY0ODc1MDYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zE-MztCaBmFHbbJJQvJ6Nb1PkF66ECixGFxbKcQ6HdY)
内网上报:使用此上报方式,您的服务需运行在腾讯云VPC。通过VPC直接联通,在避免外网通信的安全风险同时,可以节省上报流量开销。
外网上报:当您的服务部署在本地或非腾讯云VPC内,可以通过此方式上报数据。请注意外网通信存在安全风险,同时也会造成一定上报流量费用。
自研VPC上报:如果您的服务运行在腾讯自研VPC内,推荐使用此上报方式。自研网络内部直接上报,规避安全风险同时获得高数据通信效率
- 获取接入点和Token信息:
![4](https://private-user-images.githubusercontent.com/64143982/280902619-2706b901-3f9c-4f90-bf6b-6779b70569b7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNzI0OTcsIm5iZiI6MTczOTE3MjE5NywicGF0aCI6Ii82NDE0Mzk4Mi8yODA5MDI2MTktMjcwNmI5MDEtM2Y5Yy00ZjkwLWJmNmItNjc3OWI3MDU2OWI3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDA3MjMxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNiNmU4ZDgwNjkxNjRlYTA4ZjIyOWJhZGEyOTdkMjdjNDI4ZmE3NDIwY2FhN2JjOWE0YTU2NzAwOTdjMmQ2ZmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.9rz3_tg9ZNBrPxE9fXUuDkiKLeSs34GorJrHLlP3plY)
OpenTelemetry-java-instrumentation支持数十种框架自动埋点能力。更多信息,请参见OpenTelemetry官方文档。
1.打开链接Java Agent,通过命令下载对应的jar包:git clone https://github.com/TencentCloud/tencentcloud-opentelemetry-java.git 下载opentelemetry-javaagent.jar:
PS:前置要求,如果agent是运行在容器里,需要将宿主机的/usr/opentelemetry/agent/目录挂载至容器内,数据才能上报成功
2.通过修改Java启动的VM参数上报链路数据
-javaagent:/path/to/opentelemetry-javaagent.jar //请将路径修改为您文件下载的实际地址。
-Dotel.resource.attributes=service.name=<appName>,token=<token>
-Dotel.exporter.otlp.endpoint=<endpoint>
如果您选择直接上报数据,请将替换成从前提条件中获取的Token,将替换成对应地域的Endpoint。
例如:
-javaagent:/Users/Downloads/opentelemetry-javaagent.jar
-Dotel.resource.attributes=service.name=ot-java-agent-sample,token=oSmwaUr************ZiNtSv
-Dotel.exporter.otlp.endpoint=http://ap-guangzhou.apm.tencentcs.com:4317
如果您选择使用OpenTelemetry Collector转发,则需删除-Dotel.exporter.otlp.headers=Authentication=并修改为您本地部署的服务地址。
必填项:
otel.resource.attributes=service.name :服务名,如果是spring cloud/dubbo服务,最好与其服务名保持一致
otel.resource.attributes=token :实例token码
otel.exporter.otlp.endpoint:实例上报地址
3.启动应用
登录应用性能观测后,在应用列表页面选择新创建的应用,查看上报数据。
如果碰到平台上没有相关服务的数据上报,可以通过以下几个途径排查一下:
服务是否正常成功启动
容器内/usr/opentelemetry/agent/目录是否挂载成功,目录下是否有文件opentelemetry-javaagent.jar
启动参数加上-Dotel.javaagent.debug=true,开启debug日志,查看agent日志是否有异常
登入应用性能观测,点击左侧“应用监控”
选择部署应用所在地域
单击部署的业务系统ID
最终便可以在业务所在的应用列表里看到上报的服务数据:
![6](https://private-user-images.githubusercontent.com/64143982/280902642-26bee8ad-4666-42a4-8d1f-2f26757441dd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNzI0OTcsIm5iZiI6MTczOTE3MjE5NywicGF0aCI6Ii82NDE0Mzk4Mi8yODA5MDI2NDItMjZiZWU4YWQtNDY2Ni00MmE0LThkMWYtMmYyNjc1NzQ0MWRkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDA3MjMxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkZDY3YTdkYjhkNTg5NGY2ZTkwOTQ3NDU5NDljMDdmYjg3OWM2NjExODVmZjU1NGE4MzJmNzdiYTdkODBmZmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.5HunRJ7QLpZQa2lliMfNWKkH6QQwxcY97K4hpOyhbM4)