分布式监控系统SkyWalking
公司微服务架构用了有些时间了,微服务架构下的链接调用问题也越来越明显。人员流失,架构改造等原因,想人工维护架构图是不大可能了。常见的
APM
工具有cat
、zipkin
、pinpoint
,SkyWalking
也不是解决该问题的“银弹”,只是能完整绘制出链路数据流。
简介
SkyWalking
是针对分布式系统的应用性能监控,天生吻合微服务、云原生和面向容器的分布式系统架构。PHP
应用也可接入,但需以插件方式接入,偶尔也会有一些坑。
主要有以下特性:
- 服务、服务实例和endpoint(如:单个HTTP URI)的性能指标分析
- 根因分析
- 服务拓扑图
- 服务和Endpoint依赖分析
- 慢服务和慢Endpoint探查
- 性能优化
- 分布式追踪和追踪上下文传播
- 告警
SkyWalking支持从多种数据源,收集不同格式的遥感数据,包括
- Java, .NET Core, NodeJS, PHP 自动探针
- Istio 遥感数据
- Zipkin v1/v2
最新有8.x架构图如下,较复杂,但实际应用起来还算简单
部署安装
环境要求
- JDK8+
- Elasticsearch 6.x
- 8080,10800,11800,12800 端口不被占用
参考官方教程, 安装完成后需要对 config/elasticsearch.yml 做如下修改:
# 修改
# 如果 cluster.name 不设置为 CollectorDBCluster ,则需要修改 SkyWalking 的配置文件
cluster.name: CollectorDBCluster
network.host: 0.0.0.0
# 增加
thread_pool.bulk.queue_size: 1000
- linux环境中
tar -xvf skywalking-dist.tar.gz
解压,windows环境中选择zip包. - 运行
bin/startup.sh
,windows环境运行bin/startup.bat
你可以使用config / application.yml
的默认值
- 注意:在5.0.0-alpha 版本中,startup.sh将会启动collector和UI两个进程,UI通过127.0.0.1:10800访问本地collector,无需额外配置。
顺利的话,访问自己 http://localhost:8080 就能查看页面了。想进一步完善的话,可以申请域名,做80跳转。
Java接入
参考官网 https://github.com/apache/skywalking/blob/5.x/docs/cn/Deploy-skywalking-agent-CN.md,这里不做赘述。
.NET接入
参考官网 https://github.com/SkyAPM/SkyAPM-dotnet, 这里不做赘述
PHP接入
参考官网 https://github.com/SkyAPM/SkyAPM-php-sdk/blob/master/docs/install.md,这里不做赘述
使用体验和一些坑
- 所有服务的数据流调用
看起来很酷炫,数据很详尽,实际上没多大用。
- 点击单台详情有服务器概览
- java项目监控有天生优势,对gc,jvm的监控有screen绘制的很详尽
- 搜索框功能有待加强,一般人是真找不到。。
- trace状态跟踪功能很赞
可以指定状态来,比如下图,我指定 error状态,选择指定时间段后,会把这段时间内的程序异常搜索出来,点击具体条目,会显示错误详情。这个功能还是很赞的
- 一些不足的地方
- 缓存严重,新增服务器通常要删除浏览器缓存重新打开页面,才能看到新增服务器。这对于新增服务器是否正常添加到服务器池造成不小疑问和问题排查难度。尤其是新接触
Skywalking
的同学 PHP
接入后,如果产生程序日志,服务池中是不会显示服务器列表的。Java
项目倒未发现这个问题。其它语言有待考查
总体
- 部署简单
- 体验友好
- 功能强大
- UI优美
- 暂未发现性能占用严重问题
- 对程序入侵程度可以接受。
推荐一试, 更多功能,大家自行发掘吧