基于 docker 部署 skywalking 并实现 SpringBoot 全链路监控
[toc]
一、安装环境部署
下载镜像:
1$ docker pull docker pull elasticsearch:7.10.1
2$ docker pull apache/skywalking-oap-server:8.3.0-es7
3$ docker pull apache/skywalking-ui:8.3.0
1.1 Docker 中安装 Elasticsearch7.6.2(方式一)
安装 Elasticsearch
注意:使用版本为 7.6.2,你可以选择其他版本
拉取镜像
1docker pull elasticsearch:7.6.2
启动容器
1docker run --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \
2-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
3--name='elasticsearch' --cpuset-cpus="1" -m 2G -d elasticsearch:7.6.2xxxxxxxxxx docker run --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \--name='elasticsearch' --cpuset-cpus="1" -m 2G -d elasticsearch:7.6.2123
说明:
- -v /opt/hanlp:/opt/hanlp 如果使用了 hanlp 的分词,所以需要挂载词库
- ES_JAVA_OPTS 可以设置参数
- 单节点启动
访问地址:http://172.18.63.211:9200
1.2 安装部署 elasticsearch:7.10.1(方式二)
修改配置文件
(可选)修改主机配置参数:
1$ vi /etc/sysctl.conf
2vm.max_map_count=262144
3$ sysctl -p
4
5$ vi/etc/systemd/system.conf
6DefaultLimitNOFILE=65536
7DefaultLimitNPROC=32000
8DefaultLimitMEMLOCK=infinity
9$ systemctl daemon-reload
10
11$ vi /etc/security/limits.conf
12* soft nofile 65536
13* hard nofile 65536
14* soft nproc 4096
15* hard nproc 4096
16* hard memlock unlimited
17* soft memlock unlimited
启动 elasticsearch
创建持久化目录,并启动 elasticsearch
1$ mkdir -p /data/elasticsearch/data
2$ mkdir -p /data/elasticsearch/logs
3$ chmod -R 777 /data/elasticsearch/data
4$ chmod -R 777 /data/elasticsearch/logs
5$ docker run -d --name=es7 \
6 --restart=always \
7 -p 9200:9200 -p 9300:9300 \
8 -e "discovery.type=single-node" \
9 -v /data/elasticsearch/data:/usr/share/elasticsearch/data \
10 -v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
11elasticsearch:7.10.1
1.3 安装 oap
注意:等待 elasticsearch 完全启动之后,再启动 oap
1$ docker run --name oap --restart always -d \
2--restart=always \
3-e TZ=Asia/Shanghai \
4-p 12800:12800 \
5-p 11800:11800 \
6--link es7:es7 \
7-e SW_STORAGE=elasticsearch7 \
8-e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 \
9apache/skywalking-oap-server:8.3.0-es7
说明:这里指定 elasticsearch 来存储数据
- –link: es7 和你启动的 es 容器的 name 保持一致
- -e SW_STORAGE_ES_CLUSTER_NODES:es7 也可改为你 es 服务器部署的 Ip 地址,即 ip:9200
如果有如下报错:
1[Entrypoint] Apache SkyWalking Docker Image
2Current image doesn't Elasticsearch 6
把 SW_STORAGE 改成 elasticsearch7 即可
1.4 安装 ui
1$ docker run -d --name skywalking-ui \
2--restart=always \
3-e TZ=Asia/Shanghai \
4-p 8080:8080 \
5--link oap:oap \
6-e SW_OAP_ADDRESS=oap:12800 \
7apache/skywalking-ui:8.3.0
说明:
- – link:注意容器的名称
- -e SW_OAP_ADDRESS:oap 容器名称,也可改为 ip:12800,即其他服务的 IP 和端口
1.5 下载源码包,会用到其中的 agent
http://skywalking.apache.org/downloads/
[外链图片转存失败, 源站可能有防盗链机制, 建议将图片保存下来直接上传 (img-K4yXkgBY-1615948939842)(https://lovebetterworld.com/skywalking.png)]
二、SpringBoot 集成 Skywalking
2.1 配置
文件准备
将 apache-skywalking-apm-bin-es7/agent 文件夹拷贝到发布容器中,位置可以根据情况调整。
1cp -r ./agent/* /opt/skywalkingAgent
文件说明
- config/agent.config:为客户端代理配置文件,可以根据系统情况进行响应调整,这里就不详细说明。
- logs:SW agent 相关运行情况日志。
- skywalking-agent.jar:agent 代理 jar 包。
使用方式
优先级:探针 > JVM 配置 > 系统环境变量 > agent.config
一般都使用探针方式,其他方式就不介绍了,配置方式如下:s
- 格式 1(推荐):-javaagent:/path/to/skywalking-agent.jar={config1}={value1},{config2}={value2}
1-javaagent:../skywalking-agent.jar=agent.service_name=fw-gateway,collector.backend_service=127.0.0.1:11800
- 格式 2:-Dskywalking.[option1]=[value2]
1-javaagent:../skywalking-agent.jar -Dskywalking.agent.service_name=fw-gateway -Dskywalking.collector.backend_service=127.0.0.1:11800
一般配置下面两项即可:
1agent.service_name:客户端服务名,在apm系统中显示的服务名称。
2collector.backend_service:SW上传的服务地址。
访问相关服务地址后可以在 SW 控制台中查看相关信息
详细配置
1# 探针代理命名空间,跨进场传输时的header标记
2# agent.namespace=${SW_AGENT_NAMESPACE:default-namespace}
3
4# 代理服务名称,在ui显示的的服务名称
5agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
6
7# 采样率,每3秒trace几条
8# 小于等于0使用默认值,每条都采样
9# agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
10
11# server端的认证配置
12# agent.authentication = ${SW_AGENT_AUTHENTICATION:xxxx}
13
14# 单个trace的span跨度,会有内存开销
15# agent.span_limit_per_segment=${SW_AGENT_SPAN_LIMIT:150}
16
17# 忽略span,多个逗号分隔
18# agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}
19
20# 开启debug模式,用于发现sw的bug
21# agent.is_open_debugging_class = ${SW_AGENT_OPEN_DEBUG:true}
22
23# 是否缓存sw的增强包
24# agent.is_cache_enhanced_class = ${SW_AGENT_CACHE_CLASS:false}
25
26# sw指令类的缓存模式: MEMORY or FILE
27# MEMORY: 缓存在内存中,占用内容
28# FILE: 缓存到/class-cache目录下, 退出自动删除
29# agent.class_cache_mode = ${SW_AGENT_CLASS_CACHE_MODE:MEMORY}
30
31# 操作名称的最大长度,最大不要超过190
32# agent.operation_name_threshold=${SW_AGENT_OPERATION_NAME_THRESHOLD:150}
33
34# 代理默认使用gRPC纯文本。
35# 如果为true,则即使未检测到CA文件,SkyWalking代理也会使用TLS。
36# agent.force_tls=${SW_AGENT_FORCE_TLS:false}
37
38# 是否使用新的配置文件
39# profile.active=${SW_AGENT_PROFILE_ACTIVE:true}
40
41# 并行监听的分段数量
42# profile.max_parallel=${SW_AGENT_PROFILE_MAX_PARALLEL:5}
43
44# 监听分段的最大时间,超出则停止
45# profile.duration=${SW_AGENT_PROFILE_DURATION:10}
46
47# 线程最大跨线程数
48# profile.dump_max_stack_depth=${SW_AGENT_PROFILE_DUMP_MAX_STACK_DEPTH:500}
49
50# 数据快照缓冲区大小
51# profile.snapshot_transport_buffer_size=${SW_AGENT_PROFILE_SNAPSHOT_TRANSPORT_BUFFER_SIZE:50}
52
53# server服务地址
54collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
55
56# sw日志文件
57logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log}
58
59# sw日志级别
60logging.level=${SW_LOGGING_LEVEL:INFO}
61
62# 日志文件地址
63# logging.dir=${SW_LOGGING_DIR:""}
64
65# 单个日志文件大小, default: 300 * 1024 * 1024 = 314572800
66# logging.max_file_size=${SW_LOGGING_MAX_FILE_SIZE:314572800}
67
68# 最大日志文件数量,滚动删除,小于等于0时不删除
69# logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:-1}
70
71# 忽略异常
72# statuscheck.ignored_exceptions=${SW_STATUSCHECK_IGNORED_EXCEPTIONS:}
73
74# 异常trace的跟踪深度,建议小于10,对性能有影响
75# statuscheck.max_recursive_depth=${SW_STATUSCHECK_MAX_RECURSIVE_DEPTH:1}
76
77# 扩展插件
78plugin.mount=${SW_MOUNT_FOLDERS:plugins,activations}
79
80# 不加载插件
81# plugin.exclude_plugins=${SW_EXCLUDE_PLUGINS:}
82
83# mysql插件
84# plugin.mysql.trace_sql_parameters=${SW_MYSQL_TRACE_SQL_PARAMETERS:false}
85
86# Kafka地址
87# plugin.kafka.bootstrap_servers=${SW_KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
88
89# Match spring bean with regex expression for classname
90# plugin.springannotation.classname_match_regex=${SW_SPRINGANNOTATION_CLASSNAME_MATCH_REGEX:}
三、使用systemctl
1# 创建后台启动模版
2vim /etc/systemd/system/skywaking.service
3# 内容如下:
4[Unit]
5Description=skywaking
6After=network.target
7
8[Service]
9# /usr/local/src/frp_0.34.2_linux_amd64 frp所在位置
10ExecStart=/opt/software/skywalking/apache-skywalking-apm-bin/bin/startup.sh
11
12[Install]
13WantedBy=multi-user.target
14
15
16# 启动测试
17systemctl start skywaking.service
18# 查看启动状态
19systemctl status skywaking.service
20# 开机自启
21systemctl enable skywaking.service
22# 重新启动
23systemctl restart skywaking.service
SkyWalking 文档中文版(社区提供)
https://github.com/SkyAPM/document-cn-translation-of-skywalking