一. 基于docker-compose或二进制部署skywalking
skywalking-ui: 前端服务,端口号8080。
skywalking-oap(Observability Analysis Platform):可观
测性分析平台,11800为gRPC数据端口,12800为http数据端口。
es:9200为elasticsearch的数据读写端口,目前skywalking
支持的存储有elasticsearch、h2、mysql、tidb、influxdb、
postgresql等。
agent: app服务器部署skywalking agent,用于收集app中
的访问请求。
先部署es服务,
一,调参数
root@skywalking-server:~# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
vm.max_map_count=262144
二,安装es
root@skywalking-server:/usr/local/src# dpkg -i elasticsearch-8.5.1-amd64.deb
root@skywalking-server:~# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es1
node.name: node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.159.149
http.port: 9200
discovery.seed_hosts: ["192.168.159.149",]
cluster.initial_master_nodes: ["192.168.159.149",]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12
xpack.security.transport.ssl:
enabled: false
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
http.host: 0.0.0.0
root@skywalking-server:~#systemctl start elasticsearch.service
root@skywalking-server:~#systemctl enable elasticsearch.service
部署skywalking:
root@skywalking-server:~#apt install openjdk-11-jdk -y
root@skywalking-server:~#tar xvf apache-skywalking-apm-9.3.0.tar.gz
root@skywalking-server:~#ln -sv /apps/apache-skywalking-apm-bin /apps/skywalking
root@skywalking-server:~#vim /apps/skywalking/config/application.yml
storage:
selector: ${SW_STORAGE:elasticsearch}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.159.149:9200}
root@skywalking-server:~# cat /etc/systemd/system/skywalking.service
[Unit]
Description=Apache Skywalking
After=network.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/apps/skywalking/bin/
ExecStart=/bin/bash /apps/skywalking/bin/startup.sh
RemainAfterExit=yes
RestartSec=5
[Install]
WantedBy=multi-user.target
root@skywalking-server:~#systemctl daemon-reload && systemctl restart skywalking && systemctl enable skywalking
二. 实现单体服务halo博客和jenkins的请求链路跟踪
准备skywalking java agent:
root@skywalking-agent1:~# mkdir /data && cd /data
root@skywalking-agent1:/data# tar xvf apache-skywalking-java-agent-8.13.0.tgz
root@skywalking-agent1:/data# vim /data/skywalking-agent/config/agent.config
agent.service_name={SW_AGENT_NAMESPACE:magedu} collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.159.149:11800}
root@skywalking-agent1:/data#apt install openjdk-11-jdk
下载halo博客单体jar包:
root@skywalking-agent1:/data# mkdir /apps && cd /apps/
root@skywalking-agent1:/apps# wget https://dl.halo.run/release/halo-1.6.1.jar
绝对路径启动命令:
root@skywalking-agent1:/data# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/halo-1.6.1.jar
skywalking仪表盘简介:
service names:服务名称 Load (calls / min):每分钟访问次数 Success Rate (%):成功率 Latency (ms):验延迟时间 Apdex :应用性能指数
Apdex全称是(Application Performance Index,应用性能指数),是由Apdex联盟开放的用于评估应用性能的标准,Apdex 联盟起源于2004年,Apdex标准从用户的角度出发,提供了一个统一的测量和报告用户体验的方法,将其量化为范围为0-1的满意度评价,把最终用户的体验和应用性能作为一个完整的指标进行统一度量
在网络中运行的任何一个应用(Web服务),它的响应时间决定了用户的满意程度,用户等待所有交互完成时间的长短直接影响了用户对应用的满意程度,
这才是对用户有真正意义的“响应时间”,Apdex把完成这样一个任务所用的时间长短称为应用的“响应性”。
Apdex 定义了应用响应时间的最优门槛为T,另外根据应用响应时间结合T定义了三种不同的性能表现:
Satisfied(满意)-应用响应时间小于或等于Apdex阈值,比如Apdex阈值为1s,则一个耗时0.6s或者1s的响应结果则可以认为是满意的。
Tolerating(可容忍)-应用响应时间大于Apdex阈值,但同时小于或等于4倍的Apdex阈值,假设应用设定的Apdex阈值为1s,则4*1=4s为应用响应时
间的容忍上限。
Frustrated(烦躁期)-应用响应时间大于4倍的Apdex阈值。
skywalking仪表盘简介:
普通服务–>服务–> halo|magedu|–>Overview(服务概览)
Service Apdex(数字):当前服务的评分
Successful Rate(数字):请求成功率
Service Load (calls / min) 数字: 分钟请求数
Service Avg Response Times(ms):平均响应延时,单位ms
Service Apdex(折线图):一段时间内Apdex评分
Service Response Time Percentile (ms)折线图:服务响应时间百分比
Service Load (calls / min) 折线图: 分钟请求数
Success Rate (%)折线图:分钟请求成功百分比
Message Queue Consuming Count(折线图):消息队列消耗计数
Message Queue Avg Consuming Latency (ms)折线图:消息队列平均消耗 延迟(毫秒)
Service Instances Load (calls / min):节点请求次数
Slow Service Instance (ms):每个服务实例(物理机、云主机、pod)的最大延时
Service Instance Success Rate (%):每个服务实例的请求成功率
Endpoint Load in Current Service (calls / min):每个端点(URL)的请求次数
Slow Endpoints in Current Service (ms):当前端点(URL)的最慢响应时间
Success Rate in Current Service (%):当前服务成功率(%):
普通服务–>服务–> halo|magedu|–>Instance–>选择实例–>Overview(实例概览信息):
Service Instance Load (calls / min):当前实例的每分钟请求数。
Service Instance Success Rate (%):当前实例的请求成功率。
Service Instance Latency (ms):当前实例的响应延时。
Database Connection Pool:数据库连接池信息
Thread Pool:线程池信息
普通服务–>服务–> halo|magedu|–>Endpoint(端点信息):
Endpoints: URL
Load (calls / min):平均请求次数(默认时间范围半小时),比如半小时内总请求次数6次,6%30=0.20
Success Rate (%):平均成功率(默认时间范围半小时)
Latency (ms):平均延迟时间(默认时间范围半小时)
普通服务–>服务–> halo|magedu|–>Instance–>示例–>JVM(实例JVM信息):
JVM CPU (%):jvm占用CPU的百分比。
JVM Memory (MB):JVM内存占用大小,单位m,包括堆内存,与堆外内存(直接内存)。
JVM GC Time (ms):JVM垃圾回收时间,包含YGC和OGC。
JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
JVM Thread Count:JVM线程计数统计
JVM Thread State Count:JVM线程状态计
JVM Class Count:JVM类计数
三. 实现dubbo微服务实现链路跟踪案例
部署注册中心(192.168.159.151):
root@skywalking-zookeeper:~# apt install openjdk-8-jdk
root@skywalking-zookeeper:~# mkdir /apps && cd /apps
root@skywalking-zookeeper:/apps# tar xvf apache-zookeeper-3.7.1-bin.tar.gz
root@skywalking-zookeeper:/apps# cp /apps/apache-zookeeper-3.7.1-bin/conf/zoo_sample.cfg /apps/apache-zookeeper-3.7.1-
bin/conf/zoo.cfg
root@skywalking-zookeeper:/apps# /apps/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start
root@skywalking-zookeeper:/apps# lsof -i:2181
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 4419 root 70u IPv6 50491 0t0 TCP *:2181 (LISTEN)
部署provider(192.168.159.150):
root@skywalking-agent1:~# apt install openjdk-8-jdk -y
root@skywalking-agent1:~# mkdir /data && cd /data
root@skywalking-agent1:/data# tar xvf apache-skywalking-java-agent-8.13.0.tgz
root@skywalking-agent1:/data# vim /data/skywalking-agent/config/agent.config
agent.service_name={SW_AGENT_NAMESPACE:myserver} collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.159.149:11800}
添加主机名解析,dubbo里面的zookeeper地址写在了源代码中,域名变量为ZK_SERVER1:
root@skywalking-agent1:~# vim /etc/profile
export ZK_SERVER1=192.168.159.151
root@skywalking-agent1:~# source /etc/profile
root@skywalking-agent1:/data# mkdir -pv /apps/dubbo/provider
root@skywalking-node1:/data# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/provider/dubbo-server.jar
部署consumer(192.168.159.145):
root@es-container:~# apt install openjdk-8-jdk -y
root@es-container:~# mkdir /data && cd /data
root@es-container:/data# tar xvf apache-skywalking-java-agent-8.13.0.tgz
root@es-container:/data# vim /data/skywalking-agent/config/agent.config
20 agent.service_name={SW_AGENT_NAMESPACE:myserver}
collector.backend_service=KaTeX parse error: Expected '}', got 'EOF' at end of input: …CKEND_SERVICES:{SW_SERVER}:11800}
添加主机名解析,dubbo里面的zookeeper地址写在了源代码中,域名变量为ZK_SERVER1,SW也可以为agent设置环境变量:
root@es-container:~# vim /etc/profile
export SW_SERVER=“192.168.159.149”
export ZK_SERVER1=“192.168.159.151”
root@es-container:/data# source /etc/profile
root@es-container:/data# mkdir -pv /apps/dubbo/consumer
root@es-container:/data# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/consumer/dubbo-
client.jar
访问consumer:
验证skywalking数据:
四. 实现skywalking的钉钉告警
skywalking 告警-指标:
root@skywalking-server:~# cat /apps/skywalking/config/oal/core.oal
service_resp_time #服务的响应时间
service_sla #服务的http请求成功率SLA,比如99%等。
service_cpm #表示每分钟的吞吐量.
service_apdex : 应用性能指数是0.8是0.x
service_percentile: 指定最近多少数据范围内的响应时间百分比,即p99, p95, p90, p75, p50在内的数据统计结果
endpoint_relation_cpm #端点的每分钟的吞吐量
endpoint_relation_resp_time #端点的响应时间
endpoint_relation_sla #端点的http请求成功率SLA,比如99%等。
endpoint_relation_percentile ##端点的最近多少数据范围内的响应时间百分比,即p99、p95、p90、p75、p50在内的数据统计结果
skywalking 告警-钉钉:
root@skywalking-server:~# vim /apps/skywalking/config/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: 2 #评估指标的间隔周期
#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: 2 #触发告警后的静默时间
message: dubbo-provider service_cpm 大于1了 #告警信息
dingtalkHooks:
textTemplate: |-
{
"msgtype": "text",
"text": {
"content": "Apache SkyWalking Alarm: \n %s."
}
}
webhooks:
- url: https://oapi.dingtalk.com/robot/send?access_token=3f773a20ef885659112b0d49086ca60d575562a2b1f113fbe215703366bb66f9 # 注 意 钉 钉 关 键 字
root@skywalking-server:~# systemctl restart skywalking.service