大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 ,若此文对你有帮助,一定记得倒点个关注与小红星,收藏学习不迷路 。
前言简述
描述:作者在上一篇文章《国产云原生采集工具Categraf初识与二进制部署实践指南》中介绍了,如何在 OpenEuler 24.03 LTS 系统中安装 Categraf ALL in One 的采集工具,并介绍了如何通过 Categraf 采集 Linux 系统相关指标数据到 Prometheus(VictoriaMetrics)时序数据库中,并在夜莺(Nightingale v8)系统中查询相关指标数据,以及可视化展示了采集的指标数据。
通过在官方提供的插件目录中,可以发现 Categraf 支持多种数据库的指标采集,包括 MySQL、MsSQL、Oracle、Redis、PostgreSQL、MongoDB 等各类数据库的监控数据采集,所以为了完善本企业数据监控体系,以及国产化的趋势。
项目地址:https://github.com/flashcatcloud/categraf
本章将介绍实践如何通过国产采集工具 Categraf 采集 MySQL 的指标数据到 VictoriaMetrics时序数据库中,并在夜莺(Nightingale v8)系统中查询相关监控指标数据,以及在 夜莺、Grafana 可视化面板展示采集的指标数据,最后对官方提供的告警规则进行优化添加,打通监控预警的最后一公里,希望本文对各位看友有帮助,作者将尽可能以少的语言进行讲解实践。
本文是作者熬夜爆肝总结实践,将其设为付费浏览文章,希望各位看友理解支持!看完本文后你可企业中快速落地使用国产化采集器 Categraf 采集 MySQL (MariaDB)指标,并进行可视化展示与异常告警通知等,效果如下:
作者设计的 Grafana MySQL For VictoriaMetrics 模板样图。
weiyigeek.top-grafana mysql面板效果页1图
weiyigeek.top-grafana mysql面板效果页2图
weiyigeek.top-grafana mysql面板效果页3图
使用夜莺平台+钉钉实现告警通知。
weiyigeek.top-整理后的 MySQL 告警规则图
weiyigeek.top-钉钉机器人告警效果图
文章末尾提供了自定义修改后 MySQL 插件的二进制 catagraf 制品、钉钉、企业微信告警模板以及相关实践所需网盘资源。
温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,或直接加入知识星球中阅读(收获定大于付出),原文链接:https://articles.zsxq.com/id_wpw8sp4z49tq.html
MySQL 插件介绍
Categraf MySQL 采集插件,与 Prometheus mysql_exporter 插件类似,都是需要在 MySQL 数据库中创建监控账号,并授予相应的权限(低权限),然后通过该账号执行 SQL 语句采集指标数据,例如连到 MySQL 上执行 show global status、show global variables 等命令。与之不同的是 Categraf 支持通过配置文件,采集自定义查询语句指标数据,例如:MySQL 慢查询日志、MySQL 连接数、MySQL 核心数,乃至业务表字段数据的变化等,另外,其仅支持将采集的指标数据 PUSH 到 Prometheus、VictoriaMetrics 时序数据库中,不支持 PULL 方式。
Categraf MySQL 插件文档:https://flashcat.cloud/docs/content/flashcat-monitor/categraf/plugin/mysql/
MySQL 插件配置
Categraf 内置 MySQL 的监控插件配置文件在 Categraf 的 conf/input.mysql/mysql.toml ,作者在这里做一个简单的配置说明,如下所示:
# # 采集间隔,单位秒
interval = 15
# # 定义全局要执行的自定义SQL,即若配置了多个 instance 都会执行。
[[queries]]
# # 最终指标名称 mysql_lock_wait_total
mesurement = "lock_wait"
metric_fields = [ "total" ]
timeout = "3s"
request = '''
SELECT count(*) as total FROM information_schema.innodb_trx WHERE trx_state='LOCK WAIT'
'''
# # 指定实例对象,一个 instance 对应一个 mysql 实例
# # 例如,配置了两个 mysql 实例
[[instances]]
address = "10.20.172.213:3306"
username = "monitor"
password = "weiyigeek.top"
[[instances]]
address = "10.20.172.214:3306"
username = "monitor"
password = "weiyigeek.top"
# # 是否使用 tls 等定制参数
# parameters = "tls=false"
# # 执行 show global status 语句采集的基础指标,默认开启
extra_status_metrics = true
# # 执行 show global variables 语句采集的扩展指标,默认关闭,若需要采集则将其设置 true
# extra_innodb_metrics = false
# # 采集 processlist 指标信息,默认不采集
# gather_processlist_processes_by_state = false
# gather_processlist_processes_by_user = false
# # 采集各个数据库的磁盘占用大小,若 DB 较大可能会很耗时,不建议采集,由于通常会采集主机磁盘空间使用率,所以这里用处不大。
# gather_schema_size = true
# # 采集所有的 table 的磁盘占用大小,若 DB 较大可能会很耗时,不建议采集,
# gather_table_size = false
# # 采集系统表的大小,通常不用,设置为false
# gather_system_table_size = false
# # 若为 MySQL 主从复制环境,则可以开启下面的采集指标, 默认开启
# gather_slave_status = true
# # 执行超时时间,单位秒
timeout_seconds = 3
# # 采集周期的倍数 = global.interval * interval_times ,当 interval 为 15 时,interval_times 设置为 2 时,则采集周期为30s
interval_times = 2
# # 非常重要:自定义指标标签,例如:
labels = { job="categraf_mysql", instance="10.20.172.214:3306", names="MySQL测试数据库", company="it", env="test", region="cq-yubei"}
# # MySQL TLS 安全连接配置,通常情况下 MySQL 未开启 TLS ,特殊业务除外,默认不开启
# use_tls = false
# tls_min_version = "1.2"
# tls_ca = "/etc/categraf/ca.pem"
# tls_cert = "/etc/categraf/cert.pem"
# tls_key = "/etc/categraf/key.pem"
# # 若使用自签证书,则可以开启下面的配置
# insecure_skip_verify = true
# # 自定义 SQL 查询进行指标采集,但只针对单个 instance 配置,若需要全局配置则在 [[queries]] 下配置
[[instances.queries]]
mesurement = "user"
metric_fields = [ "total" ]
# label_fields = [ "alias" ]
# field_to_append = ""
timeout = "3s"
request = '''
select 'user_count' as alias, count(User) as total from mysql.user where User NOT LIKE 'mysql%';
'''
MySQL 插件内置指标
描述:通过上面的学习,我们已经知道 categraf 采集工具内置了针对 MySQL 的监控指标,我们可以通过其源代码了解到采集了 MySQL 数据库中那些指标,当然了你也可参考本文第三部分的【#可视化监控】章节进行查看到相关指标
在 MySQL 插件缺省配置文件中,作者总结了一部分 categraf 采集 MySQL 的内置指标名称,更多指标请参考源码:
$ ./categraf -inputs mysql -test | grep "mysql_" > mysql_metrics.txt
787