skywalking簡介
skywalking是一款開源的應(yīng)用性能監(jiān)控系統(tǒng),包括指標(biāo)監(jiān)控漓骚,分布式追蹤硝清,分布式系統(tǒng)性能診斷
skywalking官方中文翻譯文檔
https://skyapm.github.io/document-cn-translation-of-skywalking/
如何快速搭建skywalking
https://github.com/apache/skywalking-docker
項(xiàng)目如何集成skywalking
1蕾哟、下載skywalking agent
https://archive.apache.org/dist/skywalking/
解壓后的目錄形如下
2覆积、為我們項(xiàng)目配置skywalking探針
形如下
java -javaagent:D:apache-skywalking-apm-es7-8.4.0/apache-skywalking-apm-bin-es7/agentskywalking-agent.jar -Dskywalking.agent.service_name=當(dāng)前項(xiàng)目在skywalking顯示的名稱 -Dskywalking.collector.backend_service=xxxx:11800 -jar spring-demo-0.0.1-SNAPSHOT.jar
官方其實(shí)也提供了文檔,告訴我們?nèi)绾闻渲眯旖簦缦聢D
更詳細(xì)配置信息静檬,可以查看如下鏈接
https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/README.md
通過以上幾步就項(xiàng)目就可以和skywalking整合了。然而有些小伙伴反饋在docker環(huán)境中并级,就不懂要怎么使用skywalking的agent進(jìn)行埋點(diǎn)了拂檩。那下面就介紹一下,基于docker部署的項(xiàng)目如何和skywalking agent進(jìn)行整合
思考點(diǎn):docker中的項(xiàng)目中要如何才能使用到skywalking agent嘲碧?
道理可能大家都懂稻励,就是把skywalking agent與項(xiàng)目都塞到到同個(gè)docker容器中,基于這個(gè)理論愈涩,就衍生出一下2種方案
方案一:把skywalking agent的整個(gè)agent文件夾都集成進(jìn)行要埋點(diǎn)的項(xiàng)目中
形如下圖:
然后修改一下項(xiàng)目的dockerfile文件望抽,修改后的內(nèi)容如下
FROM adoptopenjdk/openjdk8
VOLUME /tmp
COPY localtime /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
COPY target/spring-demo-*.jar app.jar
COPY agent /usr/local/agent
ENTRYPOINT [ "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/agent
ENTRYPOINT [ "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" ]
把項(xiàng)目中的agent文件夾拷貝進(jìn)行容器中的/usr/local/agent文件夾中,然后就后面操作就跟在普通環(huán)境使用skwalking agent的操作一樣了
整合后如下圖
方案二:在我們構(gòu)建基礎(chǔ)鏡像時(shí)履婉,把skywalking agent也加進(jìn)去
比如我們構(gòu)建java運(yùn)行的jdk基礎(chǔ)鏡像時(shí)煤篙,加入skywalking agent
其dockerfile內(nèi)容形如下
FROM adoptopenjdk/openjdk8
VOLUME /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/localtime
COPY agent /usr/local/agent
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT [ "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 把基礎(chǔ)鏡像構(gòu)建出來
本例構(gòu)建出來的基礎(chǔ)鏡像為openjdk8-trace-agent。
這邊有幾個(gè)參數(shù)說明下:SKYWALKING_AGENT_SERVICE_NAME和SKYWALKING_COLLECTOR_BACKEND_SERVICE是作為環(huán)境變量毁腿,可以在docker-compose.yml文件或者k8s文件中指定具體環(huán)境變量值辑奈。以在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構(gòu)建時(shí),把業(yè)務(wù)的jar統(tǒng)一命名成app.jar已烤,因此第一個(gè)app.jar 是我們業(yè)務(wù)項(xiàng)目的jar鸠窗,第二個(gè)jar是運(yùn)行在docker容器的jar。這樣我們在業(yè)務(wù)的dockerfile中胯究,只需這么寫就行
FROM 192.168.1.3:5002/dev/openjdk8-trace-agent
整合后示例如下圖
總結(jié)
分布式鏈路追蹤在微服務(wù)基本上是屬于一個(gè)必選項(xiàng)了塌鸯,目前市面上開源的鏈路追蹤除了skywalking,還有pinpoint唐片、jaeger丙猬、zipkin、cat等费韭,大家如果感興趣可以去了解下茧球。另外本文提供在docker容器中使用skywalking agent可能并不是最優(yōu)方案,大家就當(dāng)個(gè)參考