微服务的链路追踪和流量可视化-钉钉告警

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

重启服务



链路追踪--选型/对比/工具/方案/分布式


简介

说明

链路追踪工具一般要有如下功能:

  1. 心跳检测(确定应用是否还在运行)
  2. 记录请求的执行流程、执行时间
  3. 资源监控(CPU、内存、带宽、磁盘)
  4. 告警功能(监控执行时间、成功率等通过邮件、钉钉、短信、微信等进行通知)
  5. 可视化页面

本文主要对比全链路追踪中常使用的Zipkin、Pinpoint、SkyWalking和CAT。

对比(总览)


框架



​Jaeger​



​zipkin​



​Apache skyWalking​



​CAT​



​Pinpoint​



​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

SkyWalking java单体和dubbo微服务请求链路跟踪,SkyWalking钉钉告警

专为云原生微服务架构而设计的链路追踪工具 SkyWalking介绍及搭建

Istio微服务治理网格的全方面可视化监控(微服务架构展示资源监控流量监控链路监控)

Spring Cloud Alibaba全家桶——微服务链路追踪SkyWalking

SpringCloud系列微服务的链路追踪