tshxawen

SkyWalking简介及使用

skywalking 简介:

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

skywalking 组件:

 

 

数据保存在es中(性能强)

部署在不同容器中的客户端把需要收集的数据端发给server端

server端有Tarcing  Metric 模块收集数据   存入es,mysql

skywalking-ui查询,通过Query Core在存储中查询,对结果展示

 

skywalking 简介-组件:
组件介绍:
OAP平台(Observability Analysis Platform,可观测性分析平台)或OAP Server,它是一个高度组件化的轻量级分析程序,由兼容各种探针
Receiver、流式分析内核和查询内核三部分构成。
探针:基于无侵入式的收集,并通过HTTP或者gRPC方式发送数据到OAP Server。
存储实现(Storage Implementors),SkyWalking OAP Server支持多种存储实现并且提供了标准接口,可支持不同的存储后端。
UI模块(SkyWalking),通过标准的GraphQL(Facebook在2012年开源)协议进行统计数据查询和展示 。
设计模式:
面向协议设计:面向协议设计是SkyWalking从5.x开始严格遵守的首要设计原则,组件之间使用标准的协议进行数据交互。
协议有探针协议和查询协议

 

skywalking简介-探针协议:

探针上报协议:协议包括语言探针的注册、Metrics数据上报、Tracing数据据上报等标准,Java、Go等探针都需要严格遵守此协议的标准。
探针交互协议:因为分布式追踪环境,探针间需要借助HTTP Header、MQ Header在应用之间进行通信和交互,探针交互协议就定义了交互的数据格式。
Service Mesh协议:是SkyWalking对Service Mesh抽象的专有协议,任何Mesh类的服务都可以通过此协议直接上传指标数据,用于计算服务的指标数据和绘制拓扑图。
第三方协议: 对大型的第三方开源项目 尤其是Service Mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy Service Mesh进行无缝对接。
 
skywalking简介-数据查询协议:
元数据查询:查询在SkyWalking注册的服务、服务实例、Endpoint等元数据信息。
拓扑关系查询:查询全局、或者单个服务、Endpoint的拓扑图及依赖关系。
Metrics指标查询: 查询指标数据。
聚合指标查询:区间范围均值查询及Top N排名数据查询等。
Trace查询:追踪数据的明细查询。
告警查询:基于表达式,判断指标数据是否超出阈值。
 
 
skywalking简介-数据查询协议:
元数据查询:查询在SkyWalking注册的服务、服务实例、Endpoint等元数据信息。
拓扑关系查询:查询全局、或者单个服务、Endpoint的拓扑图及依赖关系。
Metrics指标查询: 查询指标数据。
聚合指标查询:区间范围均值查询及Top N排名数据查询等。
Trace查询:追踪数据的明细查询。
告警查询:基于表达式,判断指标数据是否超出阈值。
 
skywalking简介-设计:
模块化设计:
探针收负责集数据
前端负责展示数据
后端负责从后端存储读写数据
后端存储负责持久化数据
轻量化设计:
SkyWalking在设计之初就提出了轻量化的设计理念,SkyWalking使用最轻量级的jar包模式,实现强大的数据处理和分析能力、可扩展能和模块化能力。
 
 
skywalking 简介-优势:
兼容性好:
支持传统的开发框架dubbo和spring cloud,也支持云原生中的Istio和envoy。
易于部署和后期维护:
组件化,可以自定义部署,后期横向扩容简单
高性能:
每天数T的数据无压力
易于二次开发:
标准的http和grpc协议,开源的项目,企业可以自主二次开发
 
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@sykwalking-es:~# cat /etc/security/limits.conf

 

root      soft   core      unlimited
root      hard   core      unlimited
root      soft   nproc     1000000
root      hard   nproc     1000000
root      soft   nofile    1000000
root      hard   nofile    1000000
root      soft   memlock   32000
root      hard   memlock   32000
root      soft   msgqueue  8192000
root      hard   msgqueue  8192000

*         soft   core      unlimited
*         hard   core      unlimited
*         soft   nproc     1000000
*         hard   nproc     1000000
*         soft   nofile    1000000
*         hard   nofile    1000000
*         soft   memlock   32000
*         hard   memlock   32000
*         soft   msgqueue  8192000
*         hard   msgqueue  8192000

 

root@sykwalking-es:~# cat /etc/sysctl.conf

net.ipv4.ip_forward = 1
vm.max_map_count=262144

root@sykwalking-es:~# dpkg -i elasticsearch-8.5.1-amd64.deb

root@sykwalking-es:~# grep -v "#" /etc/elasticsearch/elasticsearch.yml | grep -v "^$"
cluster.name: skywalking-cluster
node.name: node1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.4.7.132",]
cluster.initial_master_nodes: ["10.4.7.132",]
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@sykwalking-es:~# systemctl restart elasticsearch.service
 
部署sykwalking,jdk8-17
这里使用jdk11
root@sykwalking-server:~# mkdir /apps/
root@sykwalking-server:/apps# tar xf apache-skywalking-apm-9.3.0.tar.gz 
root@sykwalking-server:/apps# ln -sv /apps/apache-skywalking-apm-bin  /apps/skywalking
root@sykwalking-server:/apps# vim /apps/skywalking/config/application.yml
 
132 storage:
133   selector: ${SW_STORAGE:elasticsearch}
134   elasticsearch:
135     namespace: ${SW_NAMESPACE:""}
136     clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:10.4.7.132:9200}
 

root@sykwalking-server:/apps# vi /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@sykwalking-server:/apps# systemctl start skywalking.service

root@sykwalking-server:/apps# systemctl status skywalking.service
● skywalking.service - Apache Skywalking
     Loaded: loaded (/etc/systemd/system/skywalking.service; disabled; vendor preset: enabled)
     Active: active (exited) since Sun 2023-01-29 08:15:29 UTC; 8s ago
    Process: 2733 ExecStart=/bin/bash /apps/skywalking/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 2733 (code=exited, status=0/SUCCESS)
      Tasks: 20 (limit: 4534)
     Memory: 392.5M
        CPU: 19.283s
     CGroup: /system.slice/skywalking.service
             └─2739 java -Xms256M -Xmx512M -Doap.logDir=/apps/skywalking/logs -classpath /apps/skywalking/oap-libs/zstd-jni-1.4.9-1.jar:/apps/skywalking/>

Jan 29 08:15:27 sykwalking-server systemd[1]: Starting Apache Skywalking...
Jan 29 08:15:28 sykwalking-server bash[2735]: SkyWalking OAP started successfully!
Jan 29 08:15:29 sykwalking-server bash[2759]: SkyWalking Web Application started successfully!
Jan 29 08:15:29 sykwalking-server systemd[1]: Finished Apache Skywalking.
 
查看日志
root@sykwalking-server:/apps/skywalking# tail -f logs/*.log

http://10.4.7.131:8080/general

查看es数据

 

 

root@skywalking-agent:~# mkdir /data

root@skywalking-agent:/data# tar xf apache-skywalking-java-agent-8.13.0.tgz 

root@skywalking-agent:/data/skywalking-agent# 

root@skywalking-agent:/data/skywalking-agent# vim config/agent.config

19 # The group name is optional only.
20 agent.service_name=${SW_AGENT_NAME:magedu-halo}
22 # The agent namespace
23 agent.namespace=${SW_AGENT_NAMESPACE:magedu} #不写是默认
100 # Backend service addresses.  #skywalking服务器地址  可以写域名 变量
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:10.4.7.131:11800}

root@skywalking-agent:/data/skywalking-agent# mkdir /apps/ && cd /apps‘

SkyWalking-java博客追踪案例:
安装要求:
https://docs.halo.run/getting-started/prepare
历史版本

https://download.halo.run/

root@skywalking-agent:/apps# java --version
java 11.0.17 2022-10-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.17+10-LTS-269)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.17+10-LTS-269, mixed mode)

root@skywalking-agent:/apps# wget https://dl.halo.run/release/halo-1.6.1.jar

root@skywalking-agent:/apps# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/halo-1.6.1.jar
 
访问

 

skywalking web界面介绍:
skywalking仪表盘简介:
普通服务-->服务
Service:服务列表,服务(Service)-表示对请求提供相同行为的一系列或一组工作负载(服务名称),在使用Agent或SDK的时候,可以自定义服务
的名字,如果不定义的话,SkyWalking将会使用你在平台(比如 Istio)上定义的名字。
service names:服务名称 Load (calls / min):每分钟访问次数 Success Rate (%):成功率 Latency (ms):验延迟时间 Apdex :应用性能指数
Topology:架构图
Trace:跟踪信息
Log:日志
 
skywalking web界面介绍:
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 web界面介绍:
skywalking仪表盘简介:
 普通服务-->服务--> halo|magedu|-->Overview(服务概览)
 Service Apdex(数字):当前服务的评分
 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 (%):当前服务成功率(%):
 Successful Rate(数字):请求成功率
 
skywalking web界面介绍:
skywalking仪表盘简介:
 普通服务-->服务--> halo|magedu|-->Instance-->选择实例-->Overview(实例概览信息):
 Service Instance Load (calls / min):当前实例的每分钟请求数。
 Service Instance Success Rate (%):当前实例的请求成功率。
 Service Instance Latency (ms):当前实例的响应延时。
 Database Connection Pool:数据库连接池信息
 Thread Pool:线程池信息
 
skywalking web界面介绍:
skywalking仪表盘简介:
 普通服务-->服务--> halo|magedu|-->Endpoint(端点信息):
 Endpoints: URL
 Load (calls / min):平均请求次数(默认时间范围半小时),比如半小时内总请求次数6次,6%30=0.20
 Success Rate (%):平均成功率(默认时间范围半小时)
 Latency (ms):平均延迟时间(默认时间范围半小时)
 
skywalking web界面介绍:
skywalking仪表盘简介:
 普通服务-->服务--> 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类计数
 
Java服务案例-tomcat运行Jenkins实现链路跟踪:

skywalking web界面介绍:
skywalking仪表盘简介:
 普通服务-->服务--> 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实现链路跟踪:
root@skywalking-agent:/apps# tar xf apache-tomcat-8.5.84.tar.gz
root@skywalking-agent:/apps/apache-tomcat-8.5.84/webapps# vim /data/skywalking-agent/config/agent.config
20 agent.service_name=${SW_AGENT_NAME:magedu-jenkins}

root@skywalking-agent:/apps/apache-tomcat-8.5.84/webapps# vim /apps/apache-tomcat-8.5.84/bin/catalina.sh

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
root@skywalking-agent:/apps# /apps/apache-tomcat-8.5.84/bin/catalina.sh run

 

 

skywalking-dubbo微服务实现链路跟踪:
部署注册中心
root@skywalking-zk:~# apt install openjdk-8-jdk
root@skywalking-zk:/apps# tar xf apache-zookeeper-3.7.1-bin.tar.gz
root@skywalking-zk:/apps# ln -sv apache-zookeeper-3.7.1-bin /apps/zookeeper
root@skywalking-zk:/apps/zookeeper/conf# cp zoo_sample.cfg  zoo.cfg 

root@skywalking-zk:/apps/zookeeper/bin# ./zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /apps/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@skywalking-zk:/apps/zookeeper/bin# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /apps/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone

部署微服务

部署provider

root@skywalking-node:~# apt install openjdk-8-jdk

root@skywalking-node:~# mkdir /data

root@skywalking-agent:/data# scp apache-skywalking-java-agent-8.13.0.tgz 10.4.7.135:/data

root@skywalking-node:/data# tar xf apache-skywalking-java-agent-8.13.0.tgz 

root@skywalking-node:/data/skywalking-agent/config# vi agent.config 

19 # The group name is optional only.
20 agent.service_name=${SW_AGENT_NAME:magedu-dubbo-server1}
22 # The agent namespace
23 agent.namespace=${SW_AGENT_NAMESPACE:magedu2}
100 # Backend service addresses.
101 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:sykwalking-server.example.com:11800}
添加主机名解析,dubbo里面的zookeeper地址写在了源代码中,域名变量为ZK_SERVER1,sykwalking也可以为agent设置环境变量:
root@skywalking-node:~# vi /etc/profile
export ZK_SERVER1=10.4.7.134

root@skywalking-node:~# source /etc/profile

测试环境变量
root@skywalking-node:~# echo ${ZK_SERVER1}
10.4.7.134

root@skywalking-node:~# telnet ${ZK_SERVER1} 2181
Trying 10.4.7.134...
Connected to 10.4.7.134.
Escape character is '^]'.
^]
telnet> q
Connection closed.

root@skywalking-node:~# mkdir -pv /apps/dubbo/provider

root@skywalking-node:~# cd  /apps/dubbo/provider

root@skywalking-node:/apps/dubbo/provider# ls /apps/dubbo/provider/dubbo-server.jar
/apps/dubbo/provider/dubbo-server.jar

root@skywalking-node:/apps/dubbo/provider# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/provider/dubbo-server.jar
部署consumer
root@skywalking-node-1:~# apt install openjdk-8-jdk -y
root@skywalking-node-1:~# mkdir /data && cd /data
root@skywalking-node-1:/data# tar xf apache-skywalking-java-agent-8.13.0.tgz 
root@skywalking-node-1:/data/skywalking-agent# vim config/agent.config

# The group name is optional only.
agent.service_name=${SW_AGENT_NAME:dubbo-consumer1}

# The agent namespace
agent.namespace=${SW_AGENT_NAMESPACE:magedu2}

collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:${SW_SERVER}:11800}
root@skywalking-node-1:/data/skywalking-agent# vi /etc/profile

export SW_SERVER="10.4.7.131"
export ZK_SERVER1="10.4.7.134"

root@skywalking-node-1:/data/skywalking-agent# source /etc/profile
root@skywalking-node-1:/data/skywalking-agent# echo $SW_SERVER
10.4.7.131
root@skywalking-node-1:/data/skywalking-agent# echo $ZK_SERVER1
10.4.7.134
root@skywalking-node-1:/data/skywalking-agent# mkdir -pv /apps/dubbo/consumer

root@skywalking-node-1:/apps/dubbo/consumer# java -javaagent:/data/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/consumer/dubbo-client.jar

http://10.4.7.139:8080/hello?name=awen

 

 

  

 

root@skywalking-zk:/apps# tar xf apache-tomcat-8.5.84.tar.gz 

root@skywalking-zk:/apps/apache-tomcat-8.5.84/webapps# cp /root/dubboadmin.war .

root@skywalking-zk:/apps/apache-tomcat-8.5.84/webapps# vim dubboadmin/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://10.4.7.134:2181

root@skywalking-zk:/apps/apache-tomcat-8.5.84/webapps# /apps/apache-tomcat-8.5.84/bin/catalina.sh run

 

 
 

posted on 2023-01-31 17:30  倔强不屈的阿文  阅读(1)  评论(0)    收藏  举报

导航