Apache SkyWalking 在本月初发布了 SkyWalking Backend、UI 的 9.2.0 版本 以及 SkyWalking Java Agent 8.12.0 版本,其中就有笔者贡献的 hutool-http client 5.x 插件,以后大家通过 hutool 工具发送的 http 请求也可以出现在分布式链路中了。

另外,社区宣布计划在 2022 年 11 月 30 日结束所有 v8 版本,v9 可以在生产环境中提供稳定和更高性能的 APM,具体声明见SkyWalking 官网。

了解 SkyWalking 的朋友都知道,它可以监控我们的应用程序中执行的 SQL语句,监控到的 SQL 大概像下图这样,看起来是不是很酷!

Apache SkyWalking 监控 MySQL Server 实战_docker

监控 MySQL Server

上面展示的是在 MySQL 客户端层面的监控,那如果想要监控 MySQL Server 该怎么做呢,SkyWalking 发布的 9.2.0 版本升级了许多内容,其中一项就是开始支持 MySQL Server Monitoring。

SkyWalking 是如何监控 MySQL Server 程序的呢,SkyWalking 社区并没有重复造轮子,而是利用了已有的开源实现来采集 MySQL Server 的 metrics 数据,并将 metrics 发送到 SkyWalking OAP,由 MAL 引擎去分析、计算、聚合和存储,具体流程如下:

Apache SkyWalking 监控 MySQL Server 实战_docker_02

1)mysqld_exporter 从 MySQL Server 收集 metrics 数据;

2)OpenTelemetry Collector 通过 Prometheus Receiver 从 mysqld_exporter 抓取 metrics 数据;

3)OpenTelemetry Collector 通过 OpenCensus gRPC Exporter 或 OpenTelemetry gRPC exporter 将 metrics 数据 发送给 SkyWalking OAP Server;

4)SkyWalking OAP Server 使用 MAL引擎解析表达式,并对 metrics 数据进行过滤、计算、聚合并存储结果。

其中,mysqld_exporter 是 Prometheus 提供的用于收集 MySQL Server 的metrics 数据,OpenTelemetry Collector 是 OpenTelemetry 提供的用于收集 telemetry 数据,它提供了与厂商无关的实现,用于接收、处理与导出 telemetry 数据。

安装过程

这里假设我们已经部署了 MySQL Server 以及 SkyWalking,现在想要在 SkyWalking 中监控 MySQL Server,我们这里准备一台机器(192.168.56.102),这台机器笔者已经提前安装好了 Docker,接下来我们就在这台机器上安装 mysqld_exporter 和 OpenTelemetry Collector 。

首先我们需要创建一个 MySQL 用户并授权,用于 mysqld_exporter 收集 metrics 使用,操作如下:

create user 'mysql_exporter'@'%' identified by 'mysql_exporter';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%' WITH MAX_USER_CONNECTIONS 3;
flush privileges;

准备 OpenTelemetry Collector 组件的配置文件 otel-collector-config.yaml

version: '3.8'
services:

mysqld-exporter:
image: prom/mysqld-exporter:v0.14.0
container_name: mysqld-exporter
ports:
- 9104:9104
environment:
- DATA_SOURCE_NAME=mysql_exporter:mysql_exporter@(mysql地址:3306)/
- TZ=Asia/Shanghai

otel-collector:
image: otel/opentelemetry-collector:0.50.0
container_name: otel-collector
command: [ "--config=/etc/otel-collector-config.yaml" ]
volumes:
- /opt/data/otel-collector-config.yaml:/etc/otel-collector-config.yaml
expose:
- 55678

对以上配置做个简要说明:

1)receivers 用于配置 Collector 的数据来源,这里是从 prometheus 的 mysqld_exporter 抓取数据;

2)exporters 用于配置要将接收到的数据发送到哪里,这里是发送到 SkyWalking OAP ;

3)processors 指定如何处理接收到的数据;

4)service 配置将整个 pipelines 串起来。

我们这里使用 docker compose 部署,docker-compose.yml 完整配置如下:

version: '3.8'
services:

mysqld-exporter:
image: prom/mysqld-exporter:v0.14.0
container_name: mysqld-exporter
ports:
- 9104:9104
environment:
- DATA_SOURCE_NAME=mysql_exporter:mysql_exporter@(mysql地址:3306)/
- TZ=Asia/Shanghai

otel-collector:
image: otel/opentelemetry-collector:0.50.0
container_name: otel-collector
command: [ "--config=/etc/otel-collector-config.yaml" ]
volumes:
- /opt/data/otel-collector-config.yaml:/etc/otel-collector-config.yaml
expose:
- 55678

将 docker-compose.yml 和otel-collector-config.yaml 配置文件上传到服务器并放到 /data/opt/ 目录下,执行 docker compose up -d 即可启动 mysqld-exporter 和 otel-collector 服务。

启动完成之后,我们可以通过访问 mysqld-exporter 服务 ​​http://192.168.56.102:9104/metrics​​ 查看  mysqld-exporter 采集了 MySQL 的哪些 metrics 数据,比如下图中的 mysql_global_status_uptime 指标表示 MySQL Server 启动了多长时间,单位是秒。

Apache SkyWalking 监控 MySQL Server 实战_mysql_03

mysqld-exporter 和 otel-collector 服务能正常采集数据之后,我们可以访问 SkyWalking UI,可以查看到 MySQL Sever 端的监控信息了。

Apache SkyWalking 监控 MySQL Server 实战_docker_04

图中每一项指标的具体含义大家可以访问官网查看,这里就不一一赘述了 ​​skywalking.apache.org/docs/main/v…​