一、基于docker-compose部署skywalking
[root@es-1 ~]# mkdir -pv /data/elasticsearch/ #创建elasticsearch数据目录(mysql性能不足以满足大量读写,一般使用es)
mkdir: created directory ‘/data/elasticsearch/’
[root@es-1 ~]# ls -ld /data/elasticsearch
drwxr-xr-x 2 root root 4096 Dec 17 21:13 /data/elasticsearch
[root@es-1 ~]# chown 1000.1000 -R /data/elasticsearch #更改 /data/elasticsearch 目录属性
[root@es-1 ~]# ls -ld /data/elasticsearch #elasticsearch里启动es进程使用的用户,UID、GID是1000
drwxr-xr-x 2 1000 1000 4096 Dec 17 21:13 /data/elasticsearch
[root@es-1 ~]# mkdir /data/skywalking-9.3-docker-composefile -pv
mkdir: created directory ‘/data/skywalking-9.3-docker-composefile’
[root@es-1 ~]# cd /data/skywalking-9.3-docker-composefile/
[root@es-1 skywalking-9.3-docker-composefile]# vim docker-compose.yml #编写docker-compose文件
version: "3"
services:
elasticsearch:
image: elasticsearch:8.4.2
container_name: elasticsearch
ports:
- "9200:9200"
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] #心跳检测,成功之后不再执⾏后⾯的退出
interval: 60s #心跳检测间隔周期
timeout: 10s
retries: 3
start_period: 60s #首次检测延迟时间
environment:
discovery.type: single-node #单节点模式
ingest.geoip.downloader.enabled: "false"
bootstrap.memory_lock: "false" #内存锁定,内存足够大时可以开启
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
TZ: "Asia/Shanghai"
xpack.security.enabled: "false" #单机模式
ulimits:
memlock:
soft: -1
hard: -1
skywalking-oap:
image: apache/skywalking-oap-server:9.3.0
container_name: skywalking-oap
depends_on:
elasticsearch:
condition: service_healthy
links:
- elasticsearch
environment:
SW_HEALTH_CHECKER: default
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
JAVA_OPTS: "-Xms2048m -Xmx2048m"
TZ: Asia/Shanghai
SW_TELEMETRY: prometheus
healthcheck:
test: ["CMD-SHELL", "/skywalking/bin/swctl ch"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
restart: on-failure
ports:
- "11800:11800"
- "12800:12800"
skywalking-ui:
image: apache/skywalking-ui:9.3.0
depends_on:
skywalking-oap:
condition: service_healthy
links:
- skywalking-oap
ports:
- "8080:8080"
environment:
SW_OAP_ADDRESS: http://skywalking-oap:12800
SW_HEALTH_CHECKER: default
TZ: Asia/Shanghai
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"] #心跳检测,成功之后不再执行后面的退出
interval: 60s #心跳检测间隔周期
timeout: 10s
retries: 3
start_period: 60s #首次检测延迟时间
[root@es-1 skywalking-9.3-docker-composefile]# docker-compose up -d
验证skywalking web界⾯:
http://124.70.72.16:8080/
验证elasticsearch数据:
http://124.70.72.16:9200/
二、实现单体服务halo博客和jenkins的请求链路跟踪
1、halo博客:
准备skywalking java agent : #追踪jave程序,需要部署java语言客户端(追踪不通种客户端需要不同语言的客户端)
[root@es-1 day08]# tar -xvf apache-skywalking-java-agent-8.13.0.tgz -C /data/ #解压java agent
[root@es-1 day08]# cd /data/skywalking-agent/
[root@es-1 skywalking-agent]# ls
activations bootstrap-plugins config LICENSE licenses logs NOTICE optional-plugins optional-reporter-plugins plugins skywalking-agent.jar
[root@es-1 skywalking-agent]# vim config/agent.config #修改java agent 配置文件
20 agent.service_name=${SW_AGENT_NAME:HY-halo-SWtest01} #给自己需要追踪的应用起个名字,方便在skywalking中区分和查找
23 agent.namespace=${SW_AGENT_NAMESPACE:HY-01} #在skywalking中用ns进行应用隔离,可写可不写
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.0.2:11800} #skywalking地址
安装java11:
[root@es-1 skywalking-agent]# yum -y install java-11
[root@es-1 skywalking-agent]# java -version
openjdk version "11.0.17" 2022-10-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.17.0.8-2.el7_9) (build 11.0.17+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.17.0.8-2.el7_9) (build 11.0.17+8-LTS, mixed mode, sharing)
[root@es-1 skywalking-agent]#
下载halo博客单体jar包:
[root@es-1 apps]# wget https://dl.halo.run/release/halo-1.6.1.jar #下载kalo博客软件包
[root@es-1 skywalking-agent]# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/halo-1.6.1.jar
#绝对路径启动命令(相对路径启动命令:java -javaagent:./skywalking-agent.jar -jar /apps/halo-1.6.1.jar)
安装过程中:
看到这些字样就装好了
页面访问halo博客:124.70.72.16:8090
编写测试博客,发布:
到skywalking中查看数据:
Service Names:配置文件中编写的app名称|分区ns名
总览数据:
trace:追踪信息。可以看到各个节点用时及异常节点,方便排错
2、tomcat运行Jenkins实现链路跟踪
[root@es-1 day08]# tar -xvf apache-tomcat-8.5.84.tar.gz
[root@es-1 webapps]# rm -rf /root/jeek/day08/apache-tomcat-8.5.84/webapps/* #删除原先的内容
[root@es-1 webapps]# cp /root/jeek/day08/jenkins.war .
#将jenkins的war包放到/root/jeek/day08/apache-tomcat-8.5.84/webapps/目录下
[root@es-1 webapps]# ls
jenkins.war
[root@es-1 apache-tomcat-8.5.84]# vim /data/skywalking-agent/config/agent.config
20 agent.service_name=${SW_AGENT_NAME:HY-tomcat-jenkins-SWtest02} #给自己需要追踪的应用起个名字,方便在skywalking中区分和查找
23 agent.namespace=${SW_AGENT_NAMESPACE:HY-02} #在skywalking中用ns进行应用隔离,可写可不写
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.0.2:11800} #skywalking地址
[root@es-1 skywalking-agent]# vim /apps/apache-tomcat-8.5.84/bin/catalina.sh #修改tomcat配置文件,配置tomcat加载skywalking
添加一行:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
tomcat要使用8080端口,将skywalking端口改成8081
启动tomcat:
[root@es-1 apache-tomcat-8.5.84]# ./bin/catalina.sh run #运行
访问tomcat页面(现在是jenkins页面):http://124.70.72.16:8080/
登陆skywalking页面http://124.70.72.16:8081
三、实现dubbo微服务实现链路跟踪案例
部署注册中心:
[root@es-1 day08]# tar -xvf apache-zookeeper-3.7.1-bin.tar.gz
[root@es-1 day08]# cd apache-zookeeper-3.7.1-bin/conf/
[root@es-1 conf]# ls
configuration.xsl log4j.properties zoo_sample.cfg
[root@es-1 conf]# cp zoo_sample.cfg zoo.cfg #将配置文件模板拷贝成正式的配置文件,zk会读取zoo.cfg而不读取zoo_sample.cfg;可以不用修改
[root@es-1 apache-zookeeper-3.7.1-bin]# ./bin/zkServer.sh start #启动zk
部署provider生产者(server端)(本案例中使用java-11也可以成功启动)
[root@es-1 day08]# cd /data/skywalking-agent/
[root@es-1 skywalking-agent]# vim config/agent.config
20 agent.service_name=${SW_AGENT_NAME:HY-dubbo-server03} #给自己需要追踪的应用起个名字,方便在skywalking中区分和查找
23 agent.namespace=${SW_AGENT_NAMESPACE:HY-03} #在skywalking中用ns进行应用隔离,可写可不写
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.0.2:11800} #skywalking地址
[root@es-1 skywalking-agent]# vim /etc/profile #添加主机名解析,dubbo里面的zk地址写在了源码中,变量为ZK_SERVER1
新加一行:
export ZK_SERVER1=192.168.0.2
[root@es-1 skywalking-agent]# source /etc/profile #重新加载
[root@es-1 skywalking-agent]# mkdir -pv /apps/dubbo/provider
mkdir: created directory ‘/apps/dubbo’
mkdir: created directory ‘/apps/dubbo/provider’
[root@es-1 skywalking-agent]#
[root@es-1 skywalking-agent]# cp /root/jeek/day08/dubbo-server.jar /apps/dubbo/provider/ #拷包到相应目录
[root@es-1 skywalking-agent]# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/provider/dubbo-server.jar #启动provider生产者(server端)
部署consumer(消费者,client端):
安装java环境和shywalking java agent,方法同上
[root@es-1 day08]# vim /data/skywalking-agent/config/agent.config
20 agent.service_name=${SW_AGENT_NAME:HY-dubbo-client04} #给自己需要追踪的应用起个名字,方便在skywalking中区分和查找
23 agent.namespace=${SW_AGENT_NAMESPACE:HY-04} #在skywalking中用ns进行应用隔离,可写可不写
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.0.2:11800} #skywalking地址
[root@es-1 day08]# vim /etc/profile
export ZK_SERVER1=192.168.0.2
export SW_SERVER="192.168.0.2"
[root@es-1 day08]# source /etc/profile
[root@es-1 day08]# mkdir -pv /apps/dubbo/consumer
mkdir: created directory ‘/apps/dubbo/consumer’
[root@es-1 day08]# cp dubbo-client.jar /apps/dubbo/consumer/
[root@es-1 day08]# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/consumer/dubbo-client.jar ##启动consumer消费者(client端)
四、实现skywalking的钉钉告警
建一个钉钉群----群设置-----智能群助手-----添加机器人—自定义(通过webhook接入自定义服务)----自定义关键字(SkyWalking)—提取出生成的webhook
[root@es-1 data]# vim alarm-settings.yml
rules: #定义rule规则
service_cpm_rule: #唯一的规则名称,必须以_rule结尾
# Metrics value need to be long, double or int
metrics-name: service_cpm #指标名称
op: ">" #操作符,>, >=, <, <=, ==
threshold: 1 #指标阈值
# The length of time to evaluate the metrics
period: 1 #评估指标的间隔周期
# How many times after the metrics match the condition, will trigger alarm
count: 1 #匹配成功多少次就会触发告警
# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period. #silence-period: 3
silence-period: 0 #触发告警后的静默时间
message: "服务被访问次数大于1了" #告警信息
dingtalkHooks:
textTemplate: |-
{
"msgtype": "text",
"text": {
"content": "Apache SkyWalking Alarm: \n %s."
}
}
webhooks:
- url: https://oapi.dingtalk.com/robot/send?access_token=7e636de8e4f4ec42cea12a2b9c56f223443f0d373e490a7f2cbbf5c71d2ebd93 #注意钉钉关键字
[root@es-1 data]# docker cp alarm-settings.yml 3cb70c9fe714:/skywalking/config/ #将写好的配置文件拷贝到skywalking-oap容器中
[root@es-1 data]# docker restart 3cb70c9fe714 #重启skywalking-oap容器
页面访问几次服务。
钉钉群查看告警: