* GreatSQL 社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
注:本文适用于 SkyWalking v9.1.0。
SkyWalking 简介
SkyWalking 是一个分布式系统的应用程序性能监视(APM)工具,专为微服务、云原生架构和基于容器(K8s)架构而设计。当前版本具备了全路径跟踪、指标采集、日志记录等功能,并对多种编程语言及平台(Java/C/C++/Go/Rust/Node/PHP 等)提了采集代理(agent),并对 service mesh(stio + Envoy )提供支持。
SkyWalking 的对比其他常用监控工具 Zabbix、Prometheus、ELK、Zipkin、Jaeger 等有以下特点:
优点
-
一站式全功能的解决方案,支持全路径跟踪、指标采集和日志记录。当前版本仍需依赖外部存储组件
(H2/MySQL/PostgreSQL/Elasticsearch)
。项目自带的 BanyanDB 正在积极研发中,正式发布后可不再依赖外部存储。 -
非侵入式为主的指标采集方式,一般不需要代码级的调整,对几十种主流 Java 组件都有官方插件支持。Java 程序通过 javaagent+bytebuddy 实现动态生成监控插件,Native 应用则通过 ebpf 实现类似功能。
-
标准协议的支持,支持 OpenTelemetry、Kafka、estapi、Zabbix 多种行业规范或者事实标准的接入,方便各种应用的对接。
-
微服务和云原生的支持,对基于容器(K8s+Java)的全链路监控,支持 ebpf agent 通过 sidecar 注入。
缺点
-
agent 不够完善,OpenTelemetry 采集方式目前需要用 Prometheus node expoter 采集,再通过 Opentelemetry collector 转换后导出传导 SkyWalking oap.
-
比 Zabbix 等传统监控工具缺少自动探测和资产管理功能,增加自定义监控指标需要手工修改 MAL 配置文件,不能通过 UI 配置。
-
官方文档不完善,只是相当于参数手册加功能列表,但缺乏各种监控场景的配置指引。
-
ebpf agent 虽然是亮点但实现很初级,最新发布版(0.2.0)只支持 cpu profiling。git 最新代码已增加 network profiling。功能均为 Go 和 C 混合的硬编实现,用户自行扩展不便。硬编码的 ebpf 代码也导致对 Linux 内核的兼容性差。gcc4.5 + 在不同的优化级别(O?)产生的符号命名不一样,会导致 ebpf 启动失败。
MySQL 的监控方案
监控项类别 | 监控项 | 监控方式 |
---|---|---|
主机或 vm 的 OS 指标 | cpu 内存 磁盘 | Zabbix agent/Prometheus exporter + otl collect |
MySQL 日志 | 日志文件 | Filebeat httpoutput + SkyWalking http json api |
ebpf | cpu/network profile, sql query, fs profile(etx4/xfs) | ebpf agent (skeywalking ravor), 除 cpu profile 外要自行扩展 |
jdbc client | virtual db, 连接池状态等 | Java agent |
通过以上各种维度的监控可以全面掌握 MySQL 的运行状态,并能在出现性能问题时通过 ebpf agent(Ravor)远程执行 profiling 分析。基于 ebpf 的监控方式在 DBaaS-MySQL 容器化部署的方式下非常方便而且性能影响也最小。
限于篇幅原因,在后续的文章中会详细讲解每种监控方式的配置和相关扩展代码。
Enjoy GreatSQL :)