随着近几年微服务的流行,各种业务的相互调用越来越频繁,对业务性能优化和故障诊断也会显的更加复杂。skywalking监控主要用于用户请求链路和路径的监控(拓扑图),能追踪到调用链路各个环节是否正常(错误的原因)和耗时(DB查询、缓存查询等等),能快速定位程序的bug或者慢的原因,主要用于业务层面性性能优化和故障诊断。另外skywalking接入无需修改程序代码,不需要开发的介入运维自己就可以部署,客户端可以通过<group name>::<logic name>方式做好项目的分组,然后通过Python程序实现不同的项目告警通过邮件或者微信推送给不同的项目负责人,通过skywaling告警功实现能有问题及时发现、及时解决。

一、Nacos集群的部署
Skywalking集群的动态配置主要支持zookeeper、consul、etcd和nacos,我们采用nacos,先安装软件包,然后编辑配置文件,3台nacos集群服务器的配置一样。
Nacos官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
编辑cluster.conf配置文件,添加集群的节点。
[root@sw01 conf]# cat cluster.conf
ip1:8848
ip2:8848
ip3:8848
编辑application.properties配置文件,指定mysql数据存储。
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://x.x.x.x:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=xxxxxx
新建数据库给数据库授权限,并启动nacos服务。
#创建数据库nacos_config 并导入源sql数据文件nacos-mysql.sql
grant all privileges on nacos_config.* to nacos@'%' identified by 'xxxxxx';
systemctl start nacos
在每个服务器节点登录nacos后台查看集群是否正常。
二、Skywalking 集群+动态配置部署
首先到官网下载skywalking软件包然后解压,编辑skywalking配置文件application.yml,其它配置一样,只需要修改gRPCHost地址为sw服务器的IP地址。
#sw集群配置,这里的x.x.x.x为nacos虚地址,可以通过nginx为nacos集群做一个虚地址
cluster:
selector: ${SW_CLUSTER:nacos}
nacos:
serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:x.x.x.x:8848}
# Nacos Configuration namespace
namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
# Nacos auth username
username: ${SW_CLUSTER_NACOS_USERNAME:"nacos"}
password: ${SW_CLUSTER_NACOS_PASSWORD:"xxxxxx"}
# Nacos auth accessKey
accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}
secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}
#sw配置,这里的x.x.x.x为sw服务器的IP地址
core:
selector: ${SW_CORE:default}
default:
gRPCHost: ${SW_CORE_GRPC_HOST:x.x.x.x}
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
#后端存储选择ES, clusterNodes可以是ES集群虚地址或者单个ES的IP地址
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
namespace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:x.x.x.x:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}
socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}
numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
#sw + nacos 动态配置,这里x.x.x.x为nacos集群的虚IP
configuration:
selector: ${SW_CONFIGURATION:nacos}
nacos:
# Nacos Server Host
serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:x.x.x.x}
# Nacos Server Port
port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}
# Nacos Configuration Group
group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
# Nacos Configuration namespace
namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:}
# Unit seconds, sync period. Default fetch every 60 seconds.
period: ${SW_CONFIG_NACOS_PERIOD:60}
# Nacos auth username
username: ${SW_CONFIG_NACOS_USERNAME:"nacos"}
password: ${SW_CONFIG_NACOS_PASSWORD:"xxxxxx"}
# Nacos auth accessKey
accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}
secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}
#启动服务
[root@sw01 bin]# sh startup.sh
验证,如果skywalking集群没有问题,在nacos后台就可以看到skywalking已经把服务注册到nacos里面了。
三、通过Nacos动态管理skywalking
skywalking 官方动态配置手册:
https://skywalking.apache.org/docs/main/v8.8.1/en/setup/backend/dynamic-config/