微服务的链路追踪和流量可视化-钉钉告警
Posted 覃昌波(覃晓海)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务的链路追踪和流量可视化-钉钉告警相关的知识,希望对你有一定的参考价值。
skywalking简介
文章目录
前言
目前skywalking主要是做链路追踪和微服务流量可视化。skywalking不作为实例是否在线的参考。判断服务实例是否在线,请参考微服务服务注册中心信息。skywalking主要由三部分构成:客户端的探针(agent),服务端backend,以及服务端UI。其中,客户端的探针收集数据,默认使用grpc协议发送给服务端,然后服务端根据收到的数据绘制UI展示给用户。
工作方式:被监控的应用启动时指定agent参数,参数中带上skywalking agent的jar包。该jar包会动态植入监控代码。这些监控代码会发送数据到服务端backend,backend在服务启动时打开,默认监听11800端口接收客户端上报的数据。同时,服务端启动时,也会同步打开8080端口,此端口给用户提供UI。
一、安装 二进制安装
1、先安装 数据库
es数据库安装、
docker run --name es --restart \\
always -d -p 9200:9200 -p 9300:9300 \\
-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \\
-v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins \\
-e "discovery.type=single-node" elasticsearch:7.17.0
2、安装 skywalking
mkdir /opt/sk && cd /opt/sk
wget https://dlcdn.apache.org/skywalking/9.2.0/apache-skywalking-apm-9.2.0.tar.gz
tar xf apache-skywalking-apm-9.2.0.tar.gz
apt install openjdk-11-jdk -y
java --version
指定elasticsearch为数据库及elasticsearch的集群地址
vim config/application.yml
storage:
selector: $SW_STORAGE:elasticsearch
# 启动
/opt/sk/apache-skywalking-apm-bin/bin/startup.sh
# 如果 es 在其他节点:
storage:
selector: $SW_STORAGE:elasticsearch
elasticsearch:
namespace: $SW_NAMESPACE:""
## 单机ES
## clusterNodes: $SW_STORAGE_ES_CLUSTER_NODES:192.168.31.41:9200
## ES集群多个ip用逗号,分割
clusterNodes: $SW_STORAGE_ES_CLUSTER_NODES:192.168.31.41:9200,192.168.31.42:9200,192.168.31.43:9200
其他几个重要参数
#存储最多7天的内容,过期数据将会清理。因此请根据实际需求进行调整
recordDataTTL: $SW_STORAGE_ES_RECORD_DATA_TTL:7
# 每10秒刷新数据到收集器中
flushInterval: $SW_STORAGE_ES_FLUSH_INTERVAL:10
# 提供2个并发请求,如果系统业务量大,日志产生的非常快,请根据实况调整
concurrentRequests: $SW_STORAGE_ES_CONCURRENT_REQUESTS:2
访问localhost:8080,如果8080端口被占用了怎么办?**进入webapp文件夹下的webaap.yml,修改port即可。启动之后,如图所示
验证
http://192.168.10.148:8080/general
docker 部署方法
docker pull elasticsearch:7.9.0
docker pull apache/skywalking-oap-server:8.9.1
docker pull apache/skywalking-ui:8.9.1
mkdir -p /Users/admin/Documents/data/elasticsearch/data
mkdir -p /Users/admin/Documents/data/elasticsearch/logs
docker run -d --name=es7 \\
--restart=always \\
-p 9200:9200 -p 9300:9300 \\
-e "discovery.type=single-node" \\
-v /Users/admin/Documents/data/elasticsearch/data:/usr/share/elasticsearch/data \\
-v /Users/admin/Documents/data/elasticsearch/logs:/usr/share/elasticsearch/logs \\
elasticsearch:7.9.0
启动 skywalking-oap
docker run --name oap --restart=always -d \\
-e TZ=Asia/Shanghai \\
-p 12800:12800 \\
-p 11800:11800 \\
--link es7:es7 \\
-e SW_STORAGE=elasticsearch7 \\
-e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 \\
apache/skywalking-oap-server:8.9.0
-e TZ=Asia/Shanghai:指定时区。
--link es7:es7:关联es7容器,通过容器名字来解决ip会发生变更的问题。
-e SW_STORAGE=elasticsearch:设置环境变量,指定存储方式。
-e SW_STORAGE_ES_CLUSTER_NODES=es7:9200:设置环境变量,指定ES的地址
安装skywalking-ui
docker run -d --name skywalking-ui \\
--restart=always \\
-e TZ=Asia/Shanghai \\
-p 8088:8080 \\
--link oap:oap \\
-e SW_OAP_ADDRESS=oap:12800 \\
apache/skywalking-ui:8.9.0
客户端agent接入
cd /opt/sk
wget https://dlcdn.apache.org/skywalking/java-agent/8.12.0/apache-skywalking-java-agent-8.12.0.tgz
tar xf apache-skywalking-java-agent-8.12.0.tgz
# java启动命令添加参数
-javaagent:/data/apm/skywalking-agent/skywalking-agent.jar \\
-Dskywalking.agent.service_name=服务名称 \\
-Dskywalking.collector.backend_service=192.168.1.1:11800 #服务器端ip
java -javaagent:/usr/local/agent/skywalking-agent.jar \\
-Dskywalking.agent.service_name=test \\
-Dskywalking.collector.backend_service=192.168.10.238:11800 \\
-jar test.jar
Skywalking:告警功能
演示的skywalking告警示例,
1、http 协议的web接口访问量进行监控,并且访问量达到一定的数量时进行钉钉发群消息告警。
所有的告警规则,都在alarm-settings.yml中。
vim config/alarm-settings.yml
默认情况下告警默认值。它包括以下规则:
rules:
# Rule unique name, must be ended with `_rule`.
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 2000
period: 1
count: 1
silence-period: 5
message: 实例:name 过去 1分钟内服务平均响应时间超过 2 秒
service_instance_resp_time_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 2000
period: 1
count: 1
silence-period: 2
message: 最近1分钟内端点关系name平均响应时间超过 2 秒
unhealthy_event_rule:
metrics-name: Unhealthy
threshold: 5000
op: ">"
period: 1
count: 1
message: 实例:name已不正常运行5秒
dingtalkHooks:
textTemplate: |-
"msgtype": "text",
"text":
"content": "Apache SkyWalking 告警: \\n %s."
webhooks:
- url: https://oapi.dingtalk.com/robot/send?access_token=5c9935e376c711f0526528e2b5c8514f7fbc255ae
secret: SEC12f877554b2fca465a7961e22863
重启服务
链路追踪--选型/对比/工具/方案/分布式
简介
说明
链路追踪工具一般要有如下功能:
- 心跳检测(确定应用是否还在运行)
- 记录请求的执行流程、执行时间
- 资源监控(CPU、内存、带宽、磁盘)
- 告警功能(监控执行时间、成功率等通过邮件、钉钉、短信、微信等进行通知)
- 可视化页面
本文主要对比全链路追踪中常使用的Zipkin、Pinpoint、SkyWalking和CAT。
对比(总览)
框架 | Jaeger | zipkin | CAT | Elastic APM | ||
Github Star (2021-09-11) | 14.2k+ | 14.7K+ | 17.7k+ | 15.9k+ | 11.7k+ | 926+ |
Github contributors | 191 | 146 | 313 | 77 | 99 | 53 |
作者 | CNCF、Uber | Apache、Twitter | Apache | 美团 | NAVER | Elastic |
代码侵入性 | 中 | 高 | 低 | 高 | 低 | 很低 |
UI | 很差 | 很差 | 很好 | 较差 | 很好 | 很差 |
traceId查询 | 不支持 | 支持 | 不支持 | 不支持 | ||
性能损失 | 中 | 中 | 低 | 高 | ||
监控报警 | 无,需结合其它工具实现 | 无,需结合其它工具实现 | 支持 | 支持 | 支持 | 支持 |
存储类型 | Memory, Cassandra, Elasticsearch, Kafka | Memory, Cassandra, ElasticSearch and MysQL | Memory(H2)、 ElasticSearch, MySQL、 TiDB、 infulxdb | HDFS | HBase | Elasticsearch |
OpenTracing兼容 | 是 | 是 | 是 | 否 | 否 | 不完善 |
颗粒度 | 接口级 | 方法级。 (更详细),方法中所有远程调用都展示:如数据库、redis | 代码级 | 方法级。 (更详细) | ||
实现方式 | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | java探针,字节码增强 | 代码埋点(拦截器,注解,过滤器等) | Java探针,字节码增强 | ||
接入方式 | 基于linkerd或者sleuth方式,引入配置即可 | javaagent字节码 | 代码侵入 | javaagent字节码 | ||
agent到collector的协议 | http,MQ | gRPC | http/tcp | thrift |
性能对比
Pinpoint采集信息太过详细,所以,它对性能的损耗最大。而skywalking默认策略比较保守,对性能损耗很小。
以上是关于微服务的链路追踪和流量可视化-钉钉告警的主要内容,如果未能解决你的问题,请参考以下文章
SkyWalking java单体和dubbo微服务请求链路跟踪,SkyWalking钉钉告警
专为云原生微服务架构而设计的链路追踪工具 SkyWalking介绍及搭建
Istio微服务治理网格的全方面可视化监控(微服务架构展示资源监控流量监控链路监控)