SkyWalking

skywalking 简介:

特点

(1)实现从请求跟踪、指标收集和日志记录的完整信息记录。
 
(2)多语言自动探针,支持Java、GO、Python、PHP、NodeJS、LUA、Rust等客户端。
 
(3)内置服务网格可观察性,支持从Istio+Envoy Service Mesh收集和分析数据。
 
(4)模块化架构,存储、集群管理、使用插件集合都可以进行自由选择。
 
(5)支持告警。
 
(6)优秀的可视化效果
 

skywalking 组件:

组件介绍: 

(1)OAP平台(Observability Analysis Platform,可观测性分析平台)或OAP Server,它是一个高度组件化的轻量级分析程序,由兼容各种探针Receiver、流式分析内核和查询内核三部分构成。
 
(2)探针:基于无侵入式的收集,并通过HTTP或者gRPC方式发送数据到OAP Server。
 
(3)存储实现(Storage Implementors),SkyWalking OAP Server支持多种存储实现并且提供了标准接口,可支持不同的存储后端。
 
(4)UI模块(SkyWalking),通过标准的GraphQL(Facebook在2012年开源)协议进行统计数据查询和展示 。

 

设计模式:  

(1)面向协议设计:面向协议设计是SkyWalking从5.x开始严格遵守的首要设计原则,组件之间使用标准的协议进行数据交互。
 
(2)协议有探针协议和查询协议

 

探针协议

(1)探针上报协议:协议包括语言探针的注册、Metrics数据上报、Tracing数据据上报等标准,Java、Go等探针都需要严格遵守此协议的标准。
 
(2)探针交互协议:因为分布式追踪环境,探针间需要借助HTTP Header、MQ Header在应用之间进行通信和交互,探针交互协议就定义了交互的数据格式。
 
(3)Service Mesh协议:是SkyWalking对Service Mesh抽象的专有协议,任何Mesh类的服务都可以通过此协议直接上传指标数据,用于计算服务的指标数据和绘制拓扑图。
 
(4)第三方协议: 对大型的第三方开源项目 尤其是Service Mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy Service Mesh进行无缝对接。

 

数据查询协议:

(1)元数据查询:查询在SkyWalking注册的服务、服务实例、Endpoint等元数据信息。
 
(2)拓扑关系查询:查询全局、或者单个服务、Endpoint的拓扑图及依赖关系。
 
(3)Metrics指标查询: 查询指标数据。
 
(4)聚合指标查询:区间范围均值查询及Top N排名数据查询等。
 
(5)Trace查询:追踪数据的明细查询。
 
(6)告警查询:基于表达式,判断指标数据是否超出阈值。

 

设计

模块化设计:

(1)探针收负责集数据
 
(2)前端负责展示数据
 
(3)后端负责从后端存储读写数据
 
(4)后端存储负责持久化数据

 

轻量化设计:

SkyWalking在设计之初就提出了轻量化的设计理念,SkyWalking使用最轻量级的jar包模式,实现强大的数据处理和分析能力、可扩展能力和模块化能力。
 

优势:

(1)支持传统的开发框架dubbo和spring cloud,也支持云原生中的Istio和envoy。 
 
(2)组件化,可以自定义部署,后期横向扩容简单 
 
(3)每天数T的数据无压力 
 
(4)标准的http和grpc协议,开源的项目,企业可以自主二次开发
 

SkyWalking二进制及docker-compsoe安装

(1)skywalking-ui: 前端服务,端口号8080。
 
(2)skywalking-oap(Observability Analysis Platform):可观测性分析平台,11800为gRPC数据端口,12800为http数据端口。
 
(3)es:9200为elasticsearch的数据读写端口,目前skywalkin支持的存储有elasticsearch、h2、mysql、tidb、influxdbpostgresql等。
 
(4)agent: app服务器部署skywalking agent,用于收集app的访问请求。
 
 

SkyWalking二进制安装: 

部署ES

#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 
vm.max_map_count=262144

上传 elasticsearch-8.5.1-amd64.deb
#dpkg -i elasticsearch-8.5.1-amd64.deb

# vim etc/elasticsearch/elasticsearch.yml
# 修改如下配置
cluster.name: skywalking-cluster

node.name: node1

network.host: 0.0.0.0

discovery.seed_hosts: ["192.168.84.135", ]

cluster.initial_master_nodes: ["192.168.84.135", ]

xpack.security.enabled: false

xpack.security.enrollment.enabled: false

xpack.security.http.ssl:
     enabled: false

xpack.security.transport.ssl:
     enabled: fals:

 

 

 

部署skywalking:

#apt install openjdk-11-jdk -y
下载地址:https://dlcdn.apache.org/skywalking/9.3.0/apache-skywalking-apm-9.3.0.tar.gz
#tar xvf apache-skywalking-apm-9.3.0.tar.gz

#ln -sv /apps/apache-skywalking-apm-bin /apps/skywalking

#vim /apps/skywalking/config/application.yml
    storage: 
        selector: ${SW_STORAGE:elasticsearch}                
clusterNodes:${SW_STORAGE_ES_CLUSTER_NODES:192.168.84.135
:9200}

#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 
 
 
#systemctl daemon-reload && systemctl restart skywalking && systemctl enable skywalking
 

 

 

 
 
 

SkyWalking-java博客追踪案例

准备skywalking java agent: 

#mkdir /data && cd /data

#tar xvf apache-skywalking-java-agent-8.13.0.tgz

#vim /data/skywalking-agent/config/agent.config

agent.service_name=${SW_AGENT_NAME:halo}

agent.namespace=${SW_AGENT_NAMESPACE:xiaonuo}
  collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.84.135:11800}

 

服务安装

Halo 是一款现代化的个人独立博客系统,而且可能是最好的Java博客系统,从 1.4.3 起,版本要求为 11 以上的版本,1.4.3 以下需要 1.8 以上的版本。
 
 
安装要求: https://docs.halo.run/getting-started/prepare
 
apt install openjdk-11-jdk
 
mkdir /apps && cd /apps/

  wget https://dl.halo.run/release/halo-1.6.1.jar
 
相对路径启动命令: java -javaagent:./skywalking-agent.jar -jar /apps/halo-1.6.1.jar
 
绝对路径启动命令: java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/halo-1.6.1.jar     #一般使用
 
 

halo登录界面初始化并登录:

    

 

 

编写文章产生访问信息:

 

 

 

 

skywalking 验证数据:

 

 

skywalking web界面介绍:

skywalking仪表盘简介:

普通服务-->服务
  Service:服务列表,服务(Service)-表示对请求提供相同行为的一系列或一组工作负载(服务名称),在使用Agent或SDK的时候,可以自定义服务的名字,如果不定义的话,SkyWalking将会使用你在平台(比如 Istio)上定义的名字。
  service names:服务名称 Load (calls / min):每分钟访问次数 Success Rate (%):成功率 Latency (ms):验延迟时间 Apdex :应用性能指数
  Topology:架构图
  Trace:跟踪信息
   Log:日志
 

 

 

Apdex简介

(1)Apdex全称是(Application Performance Index,应用性能指数),是由Apdex联盟开放的用于评估应用性能的标准,Apdex 联盟起源于2004年,Apdex标准从用户的角度出发,提供了一个统一的测量和报告用户体验的方法,将其量化为范围为0-1的满意度评价,把最终用户的体验和应用性能作为一个完整的指标进行统一度量.
(2)在网络中运行的任何一个应用(Web服务),它的响应时间决定了用户的满意程度,用户等待所有交互完成时间的长短直接影响了用户对应用的满意程度,这才是对用户有真正意义的“响应时间”,Apdex把完成这样一个任务所用的时间长短称为应用的“响应性”。
(3)Apdex 定义了应用响应时间的最优门槛为T,另外根据应用响应时间结合T定义了三种不同的性能表现:
    Satisfied(满意)-应用响应时间小于或等于Apdex阈值,比如Apdex阈值为1s,则一个耗时0.6s或者1s的响应结果则可以认为是满意的。
    Tolerating(可容忍)-应用响应时间大于Apdex阈值,但同时小于或等于4倍的Apdex阈值,假设应用设定的Apdex阈值为1s,则4*1=4s为应用响应时间的容忍上限。
    Frustrated(烦躁期)-应用响应时间大于4倍的Apdex阈值。

skywalking仪表盘简介: 

普通服务-->服务--> halo|xiaonuo|-->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|xiaonuo|-->Instance-->选择实例-->Overview(实例概览信息): 

Service Instance Load (calls / min):当前实例的每分钟请求数。
Service Instance Success Rate (%):当前实例的请求成功率。
Service Instance Latency (ms):当前实例的响应延时。
Database Connection Pool:数据库连接池信息
Thread Pool:线程池信息

 

 

 

普通服务-->服务--> halo|xiaonuo|-->Endpoint(端点信息): 

Endpoints: URL
Load (calls / min):平均请求次数(默认时间范围半小时),比如半小时内总请求次数6次,6%30=0.20
Success Rate (%):平均成功率(默认时间范围半小时)
Latency (ms):平均延迟时间(默认时间范围半小时)
 

 

普通服务-->服务--> halo|xiaonuo|-->Topology(拓扑图):

普通服务-->服务--> halo|xiaonuo|-->Instance-->示例-->Trace(请求跟踪信息):

 

普通服务-->服务--> halo|xiaonuo|-->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 CountJVM类计数
 
 

普通服务-->服务--> halo|magedu|-->Instance-->示例-->.NET(.NET信息):

普通服务-->服务--> halo|magedu|-->Instance-->示例-->Spring Sleuth(Spring信息):

普通服务-->服务--> halo|magedu|-->Instance-->示例-->Golang(Golang信息):

普通服务-->服务--> halo|magedu|-->Instance-->示例-->PVM( Python Virtual Machine (PVM) metrics信息):

 

 

Java服务案例-tomcat运行Jenkins实现链路跟踪案例

基础环境准备

https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/readme/
部署jdk环境: 参考halo示例
部署skywalking java客户端:参考halo示例
 

部署tomcat: 

下载并部署tomcat
https://tomcat.apache.org/

:/apps# wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.84/bin/apache-tomcat-8.5.84.tar.gz

:/apps# tar xvf apache-tomcat-8.5.84.tar.gz
vim /data/skywalking-agent/config/agent.config

    agent.service_name=${SW_AGENT_NAME:xiaonuo}

    agent.namespace=${SW_AGENT_NAMESPACE:jenkins}

     collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:http://192.168.84.135:11800}

  vim /apps/apache-tomcat-8.5.84/bin/catalina.sh

     添加上:CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS 
 
  cd /apps/apache-tomcat-8.5.84/webapps/ 上传jenkins.war

  /apps/apache-tomcat-8.5.84/bin/catalina.sh run

验证jenkins web界面:

 

 

验证skywalking 数据:

 

 

 

skywalking-dubbo微服务实现链路跟踪案例:

微服务与单体服务架构:

 

 

 

 

部署注册中心:(192.168.84.137)

apt install openjdk-8-jdk

mkdir /apps && cd /apps

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz

tar xvf apache-zookeeper-3.7.1-bin.tar.gz


cp /apps/apache-zookeeper-3.7.1-bin/conf/zoo_sample.cfg /apps/apache-zookeeper-3.7.1- bin/conf/zoo.cfg

/apps/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start

lsof -i:2181

 

 

部署provide(192.168.84.137):

apt install openjdk-8-jdk -y


mkdir /data && cd /data


tar xvf apache-skywalking-java-agent-8.13.0.tgz


vim /data/skywalking-agent/config/agent.config
    20 agent.service_name=${SW_AGENT_NAME:dubbo-server1}
    23 agent.namespace=${SW_AGENT_NAMESPACE:myserver}
    101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.84.135:11800} 
  
  添加主机名解析,dubbo里面的zookeeper地址写在了源代码中,域名变量为ZK_SERVER1:
  vim /etc/hosts
      192.168.84.135 skywalking.example.com
  vim /etc/profile     
      export ZK_SERVER1=192.168.84.137
  source /etc/profile
  echo $ZK_SERVER1 
   
  
  mkdir -pv /apps/dubbo/provider
 
  cd  /apps/dubbo/provider
  
  java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/provider/dubbo-server.jar
 

 

 

部署consumer(192.168.84.136): 

 

apt install openjdk-8-jdk -y

mkdir /data && cd /data

tar xvf apache-skywalking-java-agent-8.13.0.tgz

vim /data/skywalking-agent/config/agent.config

20 agent.service_name=${SW_AGENT_NAME:dubbo-consumer1} 
23 agent.namespace=${SW_AGENT_NAMESPACE:myserver}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:${SW_SERVER}:11800} vim /etc/profile   export SW_SERVER="192.168.84.135"   export ZK_SERVER1="192.168.84.137"
  source /etc/profile 
  mkdir -pv /apps/dubbo/
  java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/consumer/dubbo-client.jar
 

 

192.168.84.136:8080/hello?name=zhangsan 

验证skywalking数据:

 

 

skywalking 实现钉钉告警

skywalking 告警简介:

skywalking/backend-alarm.md at master · apache/skywalking (github.com)

skywalking 告警-指标:

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 告警-钉钉:

在钉钉创建三人以上的群  设置-智能群助手-添加机器上-自定义

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=8dc26e5fad0f462413ef8917931765c9ff9954a5314ba2972253a15850345fd1 #注意钉钉关键字

  

posted @ 2022-12-17 20:22  耿筱诺  阅读(870)  评论(1编辑  收藏  举报