Apache SkyWalking 监控 MySQL Server 实战解析
作者:Geek_ymv 发布时间:2024-01-24 01:31:54
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 大概像下图这样,看起来是不是很酷!
监控 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.apache.org/docs/main/v…
刚刚演示的 SkyWalking 中 MySQL Server 的监控功能是一名大三学生贡献的!,具体贡献过程可以看下issue 链接 github.com/apache/skyw… 。之前看到过一句话,对技术有追求的开发者都应该去参与开源项目。
相关链接
github.com/prometheus/…
opentelemetry.io/docs/concep…
skywalking.apache.org/docs/main/v…
来源:https://juejin.cn/post/7144592187995455518


猜你喜欢
- 本文实例讲述了MySQL截取和拆分字符串函数用法。分享给大家供大家参考,具体如下:首先说截取字符串函数:SUBSTRING(commenti
- 注意:由于博文已经很多这方面的内容,这里不介绍安装vscode和anaconda的步骤,只讨论如下情况:已经安装了anaconda,也从官网
- 前言WebStorm是一款强大的前端开发软件,vue是当前前端热门技术栈。对于WebStorm默认的配置,它会把vue当成文本文件处理,从而
- 本文实例总结了Python字典常见操作。分享给大家供大家参考,具体如下:简单的字典:字典就是键值对key-value组合。#字典 键值对组合
- matplotlib中的字体文件被封装在font_manager这个子模块中,fontManager.ttflist这个列表涵盖了所有Mat
- 表的创建CREATE TABLE `lee` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` c
- 本文实例为大家分享了python(列表生成式/器)的具体代码,供大家参考,具体内容如下一、列表生成式#列表生成式是快速生成一个列表的一些公式
- Oracle中SQL语句连接字符串的符号为|| select catstr(tcdm) || (',') from T_YW
- 区别于redis的分布式缓存,ehcache是纯java进程内的单机缓存,根据不同的场景可选择使用,以下内容主要为springboot整合e
- 这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方式了。不过就我逐渐入门markdown的写作过程来看,目前
- eval(“1+2”),-> 3 动态判断源代码中的字符串是一种很强大的语
- 写在之前我们都知道 Python 中内置了许多标准的数据结构,比如列表,元组,字典等。与此同时标准库还提供了一些额外的数据结构,我们可以基于
- 前言如何通过python实现邮件解析?邮件的格式十分复杂,主要是mime协议,本文主要是从实现出发,具体原理可以自行研究。一、安装通过mai
- 经常有朋友问起GoEasy如何实现IM,今天就手把手的带大家从头到尾用GoEasy实现一个完整IM聊天,全套代码已经放在了github。今日
- NetCDF(网络通用数据格式)文件后缀为.nc,文件中的数据结构包含维(dimensions)、变量(variables)和属性(attr
- 前言最近在公司售前售后同事遇到一些奇怪的需求找到我,需要提供公司一些项目数据库所有表的结构信息(字段名、类型、长度、是否主键、***、备注)
- 这个主要应用于,获取用户输入的时候,防止用户不小心,多输入了一个空格,导致验证无法通过,多用于用户名跟密码的,好多情况下,大家复制的winr
- link(){var olink = getElementById("link");var text = olink.i
- 学生管理系统相信大家学各种语言的时候,练习总是会写各种管理系统吧,管理系统主要有对数据的增删查改操作,原理不难,适合作为练手的小程序数据的结
- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- =====================