0%

SkyWalking

简介

SkyWalking:一个开源的可观察性平台,用于收集,分析,聚合和可视化来自服务和云本机基础结构的数据。SkyWalking提供了一种简便的方法来维护您的分布式系统的清晰视图,即使在整个云中也是如此。它是一种现代APM,专门为基于云的基于容器的分布式系统而设计。

网址:https://github.com/apache/skywalking

SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 等数据格式。

架构主要分几部分:

skywalking-collector:链路数据归集器

skywalking-ui:web可视化平台,用来展示落地的数据

skywalking-agent:探针,用来收集和发送数据到归集器

storage:存储,一般选择elasticsearch

系统环境

  • Java:1.8
  • Elasticsearch:6.8.13
  • SkyWalking:8.3.0
  • 操作系统:centos7
  • IP:192.168.43.87

安装java和Elasticsearch6

网址:点击

SkyWalking

网址:https://skywalking.apache.org/downloads/

SkyWalking分不同存储版本,本文以ES6为例,

1
2
3
4
5
6
7
cd /data

wget https://www.apache.org/dyn/closer.cgi/skywalking/8.3.0/apache-skywalking-apm-8.3.0.tar.gz

tar -zxvf apache-skywalking-apm-8.3.0.tar.gz

mv apache-skywalking-apm-bin apache-skywalking

如图:

agent:agent探针模块

bin:collector和web的启动脚本

config:collector模块配置目录

oap-libs:依赖

webapp: web项目

创建用户:

1
2
3
4
5
6
7
8
#创建用户
useradd skywalking

#创建组
groupadd skywalking

#将用户添加到组
useradd skywalking -g skywalking

赋予权限:

1
chown -R skywalking:skywalking /data/apache-skywalking/
SkyWalking OAP(skywalking-collector)

修改 OAP 配置文件 config/application.yml:

1
2
3
4
5
cd /data/apache-skywalking/config/

cp application.yml application.yml_bak

vi application.yml

配置文件中默认选择的是H2数据源,切换成elasticsearch,

如下:

1
2
3
4
5
6
7
8
...
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
nameSpace: ${SW_NAMESPACE:"skywalking"}
#ip,请根据实际情况修改
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.43.87:9200}
...

如图:

启动OAP服务:

1
2
3
su - skywalking

sh /data/apache-skywalking/bin/oapService.sh

日志输出以下信息,证明启动成功:

1
SkyWalking OAP started successfully!

防火墙配置,以 firewalld 为例,开放 12800 、 11800端口:

1
2
3
4
5
6
7
8
9
systemctl status firewalld.service

firewall-cmd --state

firewall-cmd --zone=public --add-port=12800/tcp --permanent

firewall-cmd --zone=public --add-port=11800/tcp --permanent

systemctl reload firewalld
SkyWalking web

修改webapp/webapp.yml,将8080端口改为18080,

1
2
3
cp /data/apache-skywalking/webapp/webapp.yml /data/apache-skywalking/webapp/webapp.yml_bak

vi /data/apache-skywalking/webapp/webapp.yml

内容如下:

1
2
3
4
5
6
7
8
9
server:
port: 18080

collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 192.168.43.87:12800

保存后退出。

启动web服务:

1
2
3
su - skywalking

sh /data/apache-skywalking/bin/webappService.sh

日志输出以下信息,证明启动成功:

1
SkyWalking Web Application started successfully!

防火墙配置,以 firewalld 为例,开放 18080 端口:

1
2
3
4
5
6
7
systemctl status firewalld.service

firewall-cmd --state

firewall-cmd --zone=public --add-port=18080/tcp --permanent

systemctl reload firewalld

访问网站:http://ip:18080

1
curl http://192.168.43.87:18080

如图:

SkyWalking agent

agent的使用需要将/agent整个目录拷贝到对应需要监控的服务器上,并修改/agent/config下的agent.config配置,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 不同的namespace会导致调用链路追踪中断
agent.namespace=${SW_AGENT_NAMESPACE:skAgent}

# 页面上展示的service的名称(配置项目名称-服务名称),也可以通过-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:appName1}

# 采集信息的服务地址,也可以通过-Dskywalking.collector.backend_service=127.0.0.1:80指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.43.87:11800}

# 忽略指定后缀的请求收集
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}


# 每3秒的采样率,负数代表100%
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}

保存后退出。

agent.sample_n_per_3_secs配置说明:

在访问量较少时,链路全量收集不会对系统带来太大负担,能够完整的观测到系统的运行状况。但是在访问量较大时,全量的链路收集,对链路收集的客户端(agent探针)、服务端(SkyWalking OAP)、存储器(例如说 Elastcsearch)都会带来较大的性能开销,甚至会影响应用的正常运行。在访问量级较大的情况下,往往会选择抽样采样,只收集部分链路信息。SkyWalking Agent 在 agent/config/agent.config 配置文件中,定义了 agent.sample_n_per_3_secs 配置项,设置每 3 秒可收集的链路数据的数量。

调用方式请查看:

https://github.com/apache/skywalking/blob/5.x/docs/cn/Deploy-skywalking-agent-CN.md

JAR file启动项目时,配置 JVM 参数,加入配置 agent 的相关参数,命令行如下:

1
java -javaagent:/data/apache-skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=appName1 -Dskywalking.collector.backend_service=192.168.43.87:11800 -jar xxxx.jar

idea开发时,以windows环境为例,配置如下:
选择XXXApplication.java(如:EurekaServerApplication.java),右击选中 More Run/Debug -> Modify Run Configuration,在VM options,输入:

1
2
3
-javaagent:D:/java/other/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=agentName1
-Dskywalking.collector.backend_service=192.168.0.108:11800

如图:

layicr 微信

微信

layicr 支付宝

支付宝