云计算 / 链路监控

全链路追踪系统SkyWalking部署实践

浅时光 · 1月17日 · 2021年 · 14997次已读

一、Apache SkyWalking介绍

1、SkyWalking 是什么?

以下是官方介绍:
  • SkyWalking 是观察性分析平台和应用性能管理系统。
  • 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案.
  • 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

2、整体架构

1605187700 3e79466fde2ed6c
  • 探针 基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
  • 平台后端, 支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析。
  • 存储文章来源(Source):浅时光博客 通过开放的插件话的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统. 当然, 我们非常欢迎你贡献新的存储系统实现。
  • UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

3、功能特性

  • 多种监控手段,语言探针和service mesh
  • 多语言自动探针,Java, .Net Core, PHP, NodeJS, Golang, LUA
  • 轻量高效,不需要大数据
  • 支持告警
  • 模块化,UI、存储、集群管理多种机制可选
  • 优秀的可视化方案

二、Apache SkyWalking部署

  • Apache SkyWalking部署支持单机部署和集群部署,而Apache SkyWalking部署单机还是集群取决于ES和注册中心是单机还是集群部署的;单机部署还是建议线下部署做一些功能测试之类的,线上环境一定要采用集群模式部署,这里我也将采用集群的方式进行部署。
  • 注意:如果线上实在没有多余机器部署集群,那么也可以采用单机方式部署,如果SkyWalking挂了也不会影响业务的正常运行。

1、部署集群环境准备工作

1.1:环境描述

服务名称节点IP主机名服务版本号部署方式
Elasticsearch192.168.66.211es-017.9.1RPM包部署
192.168.66.212es-02
192.168.66.213es-03
ZooKeeper192.168.66.214zk-013.6.2二进制部署
192.168.66.215zk-02
192.168.66.216zk-03
SkyWalking OAP&UI192.168.66.217skywalking8.2.0二进制部署

1.2:下载程序

1605188480 651a5b0fcf8564b
  • 注意:ZooKeeper一定要下载代bin的源码包,从目前的最新版本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用
  • SkyWalking :http://skywalking.apache.org/downloads/
1605188503 6675e5d4570ca91
1605188504 eb1b7988af006a9

1.3:安装JDK

  • 注意:由于以上的程序都是由JAVA语言开发,所以所有节点在部署程序之前都需要安装JAVA环境,这里我通过RPM包安装JDK1.8版本
  • 下载地址:OracleJDK下载
rpm -ivh jdk-8u231-linux-x64.rpm

2、部署Elasticsearch服务集群

2.1:下载安装并放通端口

rpm -ivh elasticsearch-7.9.1-x86_64.rpm

#提前放开ES端口
firewall-cmd --permanent --zone=public --add-port=9200/tcp
firewall-cmd --permanent --zone=public --add-port=9300/tcp
#使其规则生效
firewall-cmd --reload

2.2:编辑各ES配置文件

  • 注:这里我们修改es-01节点上的es配置,然后将es-01节点上的es配置文件拷贝给其他2台es节点服务器,然后修改对应的node.name和network.host为所在主机的地址即可。
2.2.1:es-node1服务器
[root@es-01 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml 

cluster.name: es.cluster	#es集群名称
node.name: es-node1	#es节点名称。集群内节点名称不可重复
path.data: /data/elk/data	#数据存储路径
path.logs: /data/elk/logs	#日志存储路径
network.host: 192.168.66.211   #监听地址,可设置为本机IP或0.0.0.0
http.port: 9200		#监听端口
discovery.seed_hosts: ["192.168.66.211", "192.168.66.212", "192.168.66.213"]
cluster.initial_master_nodes: ["192.168.66.211", "192.168.66.212", "192.168.66.213"]
  • 注意:配置集群的主机地址,配置之后集群的主机之间可以自动发现,必须至少配置 [discovery.seed_hosts,discovery.seed_providers,cluster.initial_master_nodes] 中的一个;如果是只跑单机ES则discovery.seed_hostscluster.initial_master_nodes参数中,只需要配置本节点ES所在的服务器IP地址即可,例如:discovery.seed_hosts: ["192.168.66.211"] cluster.initial_master_nodes: ["192.168.66.211"]
  • 拷贝配置至另外节点服务器
scp /etc/elasticsearch/elasticsearch.yml root@192.168.66.212:/etc/elasticsearch/
scp /etc/elasticsearch/elasticsearch.yml root@192.168.66.213:/etc/elasticsearch/
2.2.2:es-node2服务器
[root@es-02 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml 

cluster.name: es.cluster	#es集群名称
node.name: es-node2	#es节点名称。集群内节点名称不可重复
path.data: /data/elk/data	#数据存储路径
path.logs: /data/elk/logs	#日志存储路径
network.host: 192.168.66.212   #监听地址,可设置为本机IP或0.0.0.0
http.port: 9200		#监听端口
discovery.seed_hosts: ["192.168.66.211", "192.168.66.212", "192.168.66.213"]
cluster.initial_master_nodes: ["192.168.66.211", "192.168.66.212", "192.168.66.213"]
2.2.3:es-node3服务器
[root@es-03 ~]# grep '^[a-Z]' /etc/elasticsearch/elasticsearch.yml 

cluster.name: es.cluster	#es集群名称
node.name: es-node3	#es节点名称。集群内节点名称不可重复
path.data: /data/elk/data	#数据存储路径
path.logs: /data/elk/logs	#日志存储路径
network.host: 192.168.66.213   #监听地址,可设置为本机IP或0.0.0.0
http.port: 9200		#监听端口
discovery.seed_hosts: ["192.168.66.211", "192.168.66.212", "192.168.66.213"]
cluster.initial_master_nodes: ["192.168.66.211", "192.168.66.212", "192.168.66.213"]

2.3:创建数据目录并赋权

  • 注意:3个es节点都需要创建,注意elasticsearch用户再通过rpm方式安装时会自动创建
mkdir -p /data/elk/{data,logs}
ls /data/elk/
chown -R elasticsearch.  /data/elk/

2.4:启动ES服务验证

systemctl start elasticsearch
systemctl enable elasticsearch
systemctl status elasticsearch
  • 注意:elasticsearch启动比较慢,需要等待一会,然后检查端口;如果有问题,查看/data/logs/es.cluster.log日志

2.5:浏览器访问ES服务

1605189286 5d0405d7935d2a1

3、部署ZooKeeper服务集群

3.1:解压安装

  • 在节点1解压后,然后拷贝到其他节点
[root@zk-01 ~]# tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /usr/local/ 
[root@zk-01 ~]# cd /usr/local/
[root@zk-01 local]# mv apache-zookeeper-3.6.2-bin zookeeper

3.2:修改配置

  • 三个节点的配置都需要进行创建对应的目录,复制一份新的进行修改;这里只需要在zk-01节点创建和配置,然后拷贝至另外的节点
  • 配置文件存储路径:zookeeper安装路径/zookeeper/conf
[root@zk-01 ~]# cd /usr/local/zookeeper/conf/
[root@zk-01 conf]# cp zoo_sample.cfg zoo.cfg
  • 先创建数据和日志的存储目录,zk启动之前三节点都需要先创建目录,不然启动失败
[root@zk-01 conf]# mkdir -p /data/{zkdata,zklog}
[root@zk-01 conf]# vim zoo.cfg
1605189465 6b6b7688daeee4b
  • 参数说明:
    • tickTime=2000
    • initLimit=10
    • syncLimit=5
    • dataDir=/data/zkdata    #数据存储目录
    • datalogDir=/data/zklog  #日志存储目录,默认配置文件中没有
    • clientPort=2181
    • server.1=192.1文章来源(Source):https://www.dqzboy.com68.66.214:3001:3002    #集群中个节点IP,默认配置文件中没有,需要添加
    • server.2=192.168.66.215:3001:3002
    • server.3=192.168.66.216:3001:3002

3.3:更改日志配置

  • Zookeeper 默认会将控制台信息输出到启动路径下的 zookeeper.out 中,通过如下方法,可以让 Zookeeper 输出按尺寸切分的日志文件:
3.3.1:修改conf/log4j.properties文件
  • zookeeper.root.logger=INFO, CONSOLE 改为 zookeeper.root.logger=INFO, ROLLINGFILE
[root@zk-01 conf]# vim /usr/local/zookeeper/conf/log4j.properties
1605189880 80b22c2319c3e4c
3.3.2:修改bin/zkEnv.sh文件
  • ZOO_LOG4J_PROP="INFO,CONSOLE" 改为 ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
[root@zk-01 conf]# vim /usr/local/zookeeper/bin/zkEnv.sh
1605189978 5b92b994fb98924

3.4:将程序拷贝给另外的节点

  • 由于配置文件都一样,所有我们在node1上安装配置程序后,通过scp命令将程序拷贝到其他2个节点下即可
[root@zk-01 ~]# scp -r /usr/local/zookeeper/ root@192.168.66.215:/usr/local/
[root@zk-01 ~]# scp -r /usr/local/zookeeper/ root@192.168.66.216:/usr/local/

3.5:创建myid文件

  • 在3台节点服务器的dataDir的路径下分别创建一个文件名为myid的文件,文件内容为该 zk 节点的编号
[root@zk-01 ~]# cd /data/zkdata/
[root@zk-01 zkdata]# vim myid
[root@zk-01 zkdata]# cat myid 
1

[root@zk-02 ~]# cd /data/zkdata/
[root@zk-02 zkdata]# vim myid
[root@zk-02 zkdata]# cat myid 
2

[root@zk-03 ~]# cd /data/zkdata/
[root@zk-03 zkdata]# vim myid
[root@zk-03 zkdata]# cat myid 
3

#启动前把3节点的3001、3002、2181端口放通
firewall-cmd --permanent --zone=public --add-port=3001/tcp
firewall-cmd --permanent --zone=public --add-port=3002/tcp
firewall-cmd --permanent --zone=public --add-port=2181/tcp
firewall-cmd --reload

3.6:启动程序

#依次启动三台主机上的 zookeeper 服务
cd /usr/local/zookeeper/bin/
./zkServer.sh start

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

#三台节点zk服务加入开机自启
echo "/usr/local/zookeeper/bin/zkServer.sh start" >> /etc/rc.local 
chmod +x /etc/rc.local

3.7:查看集群状态

#3个节点全部启动完成后,可依次执行如下命令查看集群状态
cd /usr/local/zookeeper/bin/
./zkServer.sh status

4、部署SkyWalking原文链接:https://www.dqzboy.com OAP服务

  • 注:提前把下载的包上传至服务器中

4.1:解压部署

[root@skywalking ~]# tar -zxvf apache-skywalking-apm-es7-8.2.0.tar.gz -C /usr/local/

[root@skywalking ~]# cd /usr/local/
[root@skywalking local]# mv apache-skywalking-apm-bin-es7 skywalking

4.2:修改配置

  • 默认连接的是H2数据库,修改为es集群地址;将zk注释去除并配置成我们创建的zk原文链接:https://www.dqzboy.com集群地址
[root@skywalking local]# cd skywalking/config/
[root@skywalking config]# cp application.yml{,_bak}
[root@skywalking config]# vim application.yml
主要修改的地方如下图:
1605190356 11ba86ed6ee9803
1605190357 38a6f054b39d424
1605190358 6b3b462c4356ebf

4.3:启动服务

[root@skywalking ~]# /usr/local/skywalking/bin/startup.sh 
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!

#加入到开机启动
[root@skywalking ~]# echo "/usr/local/skywalking/bin/startup.sh" >> /etc/rc.d/rc.local
[root@skywalking ~]# chmod +x /etc/rc.d/rc.local

#等待几分钟程序启动后,检查服务端口

#检查启动日志,确保没有报错信息
[root@skywalking ~]# tailf /usr/local/skywalking/logs/skywalking-oap-server.log

4.4:放通端口

[root@skywalking ~]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
[root@skywalking ~]# firewall-cmd --permanent --zone=public --add-port=11800/tcp
[root@skywalking ~]# firewall-cmd --permanent --zone=public --add-port=12800/tcp

[root@skywalking ~]# firewall-cmd --reload

5、访问SkyWalking UI

  • 注:由于没有跟任何项目集成所以是没有任何信息的
1605190561 465d464ae52ec02

三、SkyWalking与项目集成

  • agent存储在下载下来的源码包文件中,里面有个agent目录,将agent目录拷贝至被监控节点服务器上,下面我将agent保存在了/data/app目录下
java -javaagent:/data/app/agent/skywalking-agent.jar 
     -Dskywalking.agent.service_name=dqz_service
     -Dskywalking.collector.backend_service=XXX.XXX.XXX.XXX:11800
     -jar myapp.jar
参数说明:
  • javaagent:指定skywalking-agent包的存储路径
  • skywalking.agent.service_name: 服务名称
  • skywalking.collector.backend_service:采集信息的服务地址 agent.config配置了就可以不用指定
1599059641 ae7af2e544b8e09


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!