1. 概况

(2019年11月15日 08:31:55)

Skywalking是全链路跟踪工具,支持ElasticSearch存储。为了方便demo演示,官方默认使用h2内存数据库,重启就没有数据了。

Skywalking分为服务器端和客户Agent端两大部分。后者由于使用了java agent的技术,因此可以制作成docker镜像,对任何java应用做到零入侵接入。

关于集群水平扩展:skywalking后面的存储是es,所以存储的扩展性由es保证。oap-server本身是无状态的,所以可以水平扩展,只要连的是同一个es。

2. 容器环境下

容器环境下使用ElasticSearch作为存储,假设ES服务器地址为:http://10.100.99.41:39200/

官方镜像: https://github.com/apache/skywalking-docker/

2.1 服务器端

特别注意,由于docker默认时区是0,skywalking的服务器和客户端都要保持时区一样才行。否则ui显示有问题。

启动skywalking服务器:

docker run --name oap --restart unless-stopped -d \
    -e SW_STORAGE=elasticsearch \
    -e TZ='Asia/Shanghai' \
    -e SW_STORAGE_ES_CLUSTER_NODES=10.100.99.41:39200 \
    -p 31800:11800 -p 32800:12800 \
    apache/skywalking-oap-server:6.5.0

启动UI服务器:

docker run --name oap-ui --restart unless-stopped -d \
    -e SW_OAP_ADDRESS=10.100.99.41:32800 \
    -e TZ='Asia/Shanghai' \
    -p 33800:8080 \
    apache/skywalking-ui:6.5.0

然后就可以访问33800端口了。

2.2 客户端

客户端的使用方式可以和非容器环境下一样,不过由于skywalking是java agent的形式,基于容器环境,可以做得更优雅。

思路是,基于java镜像,将skywalking的内容复制进去,然后把原java可执行文件改名为java2,然后新建一个名为java的shell脚本,它根据环境变量有没有配置skywalking来选择开启还是关闭skywalking。

具体Dockerfile相关文件:https://code.pugwoo.com/pugwoo/docker/src/branch/master/skywalking-agent

3. 非容器环境下

https://skywalking.apache.org/ 官网下载一个名如apache-skywalking-apm-6.6.0.zip的压缩包。(注意,新版的skywalking可能要区分windows/linux平台、es不同版本而提供不同的zip包)

这里为了以自带的默认h2存储演示。

3.1 服务器端

将下载的zip压缩包解压到随意一个目录。然后命令行进去执行bin/startup.shbin/startup.bat

正常会输出以下信息:

SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!

一共起了2个java进程。一个是Skywalking服务器,监听在11800(rpc)和12800(http)端口,一个是UI进程,监听在8080端口。

启动后可以浏览器打开:http://127.0.0.1:8080/

3.2 客户端

假设有一个java应用,它和skywalking没有任何关系。例如它是个Spring Boot项目,里面有MySQL、Redis、Dubbo等外部调用。假设它原来的启动方式是:

java -jar hello.jar # 最好不要监听在8080,因为skywalking ui默认监听在8080

现在要用上skywalking,不需要改源代码,直接换命令即可:

java -javaagent:/path/to/apache-skywalking-apm-bin/agent/skywalking-agent.jar \
  -DSW_AGENT_NAME=demo
  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 \
  -jar hello.jar

上面这些参数要加在java后面,不要加在-jar hello.jar后面。

上面参数中SW_AGENT_NAME是应用名称,必须;SW_AGENT_COLLECTOR_BACKEND_SERVICES是服务器地址,必须,多个则用逗号隔开。

启动之后,随便访问一下应用的url,然后就可以在skywalking ui中看到信息了。

4. 其它问题

4.1 关于skywalking没有抓取jdk自带HttpUrlConnection

默认是没有开启的,服务器端不用修改,只需要修改客户端的agent,把agent下面的bootstrap-plugins中的apm-jdk-http-plugin-6.6.0.jar文件移动到plugins下即可。

这是官方所有支持的采集对象:https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/Supported-list.md

文档更新时间: 2020-06-01 13:19   作者:nick