Apache SkyWalking 监控 MySQL Server 实战解析
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 的朋友都知道,它可以监控我们的应用程序中执行的 SQL语句,监控到的 SQL 大概像下图这样,看起来是不是很酷!
监控 MySQL Server上面展示的是在 MySQL 客户端层面的监控,那如果想要监控 MySQL Server 该怎么做呢,SkyWalking 发布的 9.2.0 版本升级了许多内容,其中一项就是开始支持 MySQL Server Monitoring。
SkyWalking 是如何监控 MySQL Server 程序的呢,SkyWalking 社区并没有重复造***,而是利用了已有的开源实现来采集 MySQL Server 的 metrics 数据,并将 metrics 发送到 SkyWalking OAP,由 MAL 引擎去分析、计算、聚合和存储,具体流程如下:
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
receivers: prometheus: config: scrape_configs: - job_name: 'mysql-monitoring' scrape_interval: 5s static_configs: - targets: ['mysqld-exporter:9104'] labels: host_name: showcase processors: batch: exporters: otlp: endpoint: SkyWalking OAP 地址:11800 tls: insecure: true service: pipelines: metrics: receivers: - prometheus processors: - batch exporters: - otlp
对以上配置做个简要说明:
1)receivers 用于配置 Collector 的数据来源,这里是从 prometheus 的 mysqld_exporter 抓取数据;
2)exporters 用于配置要将接收到的数据发送到哪里,这里是发送到 SkyWalking OAP ;
3)processors 指定如何处理接收到的数据;
4)service 配置将整个 pipelines 串起来。
docker compose 部署我们这里使用 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 启动了多长时间,单位是秒。
mysqld-exporter 和 otel-collector 服务能正常采集数据之后,我们可以访问 SkyWalking UI,可以查看到 MySQL Sever 端的监控信息了。
图中每一项指标的具体含义大家可以访问官网查看,这里就不一一赘述了
刚刚演示的 SkyWalking 中 MySQL Server 的监控功能是一名大三学生贡献的!,具体贡献过程可以看下issue 链接 。之前看到过一句话,对技术有追求的开发者都应该去参与开源项目。
相关链接
以上就是Apache SkyWalking 监控 MySQL Server 实战解析的详细内容,更多关于Apache SkyWalking监控MySQL的资料请关注其它相关文章!
原文地址:https://juejin.cn/post/7144592187995455518