skywalking简介
skywalking是一款开源的利用性能监控零碎,包含指标监控,分布式追踪,分布式系统性能诊断
skywalking官网中文翻译文档
https://skyapm.github.io/document-cn-translation-of-skywalking/
如何疾速搭建skywalking
https://github.com/apache/skywalking-docker
我的项目如何集成skywalking
1、下载skywalking agent
https://archive.apache.org/dist/skywalking/
解压后的目录形如下
2、为咱们我的项目配置skywalking探针
形如下
java -javaagent:D:apache-skywalking-apm-es7-8.4.0/apache-skywalking-apm-bin-es7/agentskywalking-agent.jar -Dskywalking.agent.service_name=以后我的项目在skywalking显示的名称 -Dskywalking.collector.backend_service=xxxx:11800 -jar spring-demo-0.0.1-SNAPSHOT.jar
官网其实也提供了文档,通知咱们如何配置,如下图
更具体配置信息,能够查看如下链接
https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/README.md
通过以上几步就我的项目就能够和skywalking整合了。然而有些小伙伴反馈在docker环境中,就不懂要怎么应用skywalking的agent进行埋点了。那上面就介绍一下,基于docker部署的我的项目如何和skywalking agent进行整合
思考点:docker中的我的项目中要如何能力应用到skywalking agent?
情理可能大家都懂,就是把skywalking agent与我的项目都塞到到同个docker容器中,基于这个实践,就衍生出一下2种计划
计划一:把skywalking agent的整个agent文件夹都集成进行要埋点的我的项目中
形如下图:
而后批改一下我的项目的dockerfile文件,批改后的内容如下
FROM adoptopenjdk/openjdk8VOLUME /tmpCOPY localtime /etc/localtimeRUN echo "Asia/Shanghai" > /etc/timezoneCOPY target/spring-demo-*.jar app.jarCOPY agent /usr/local/agentENTRYPOINT [ "sh", "-c", "java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=spring-demo -Dskywalking.collector.backend_service=192.168.1.2:11800 -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
外围的次要以下这两句
COPY agent /usr/local/agentENTRYPOINT [ "sh", "-c", "java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=spring-demo -Dskywalking.collector.backend_service=192.168.1.2:11800 -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
把我的项目中的agent文件夹拷贝进行容器中的/usr/local/agent文件夹中,而后就前面操作就跟在一般环境应用skwalking agent的操作一样了
整合后如下图
计划二:在咱们构建根底镜像时,把skywalking agent也加进去
比方咱们构建java运行的jdk根底镜像时,退出skywalking agent
其dockerfile内容形如下
FROM adoptopenjdk/openjdk8VOLUME /tmp#ENV JAVA_OPTS="-Dcom.sun.management.jmxremote.port=39083 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"ENV JAVA_OPTS=""ENV SKYWALKING_AGENT_SERVICE_NAME=""ENV SKYWALKING_COLLECTOR_BACKEND_SERVICE=""COPY localtime /etc/localtimeCOPY agent /usr/local/agentRUN echo "Asia/Shanghai" > /etc/timezoneENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$SKYWALKING_AGENT_SERVICE_NAME -Dskywalking.collector.backend_service=$SKYWALKING_COLLECTOR_BACKEND_SERVICE -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
而后通过docker build -t 镜像名 . 或者通过docker-compose build 把根底镜像构建进去
本例构建进去的根底镜像为openjdk8-trace-agent。
这边有几个参数阐明下:SKYWALKING_AGENT_SERVICE_NAME和SKYWALKING_COLLECTOR_BACKEND_SERVICE是作为环境变量,能够在docker-compose.yml文件或者k8s文件中指定具体环境变量值。以在docker-compose.yml为例
配置形如下
version: '3.1'services: spring-demo: restart: always image: 192.168.1.3:5002/demo/spring-demo:dev container_name: spring-demo network_mode: bridge ports: - "8085:8080" environment: - SKYWALKING_AGENT_SERVICE_NAME=spring-demo-test - SKYWALKING_COLLECTOR_BACKEND_SERVICE=192.168.1.2:11800
其次
ONBUILD COPY app.jar app.jar
咱们在maven构建时,把业务的jar对立命名成app.jar,因而第一个app.jar 是咱们业务我的项目的jar,第二个jar是运行在docker容器的jar。这样咱们在业务的dockerfile中,只需这么写就行
FROM 192.168.1.3:5002/dev/openjdk8-trace-agent
整合后示例如下图
总结
分布式链路追踪在微服务基本上是属于一个必选项了,目前市面上开源的链路追踪除了skywalking,还有pinpoint、jaeger、zipkin、cat等,大家如果感兴趣能够去理解下。另外本文提供在docker容器中应用skywalking agent可能并不是最优计划,大家就当个参考