专栏:数据库、中间件的监控一网打尽

前言

对于数据库、中间件的监控,目前社区里最为完善的就是 Prometheus 生态的各个 Exporter,不过这些 Exporter 比较分散,不好管理,如果有很多目标实例需要监控,就要部署很多个 Exporter,要是能有一个大一统的 Exporter,具备所有这些 Exporter 的能力就好了。还真有,而且还不止一个,一个是 Grafana-agent,一个是 Cprobe,Grafana-agent 整合这些 Exporter 相对比较生硬而且缺少了目标实例自动发现机制,好处是 Grafana-agent 不止是整合了常见的 Exporter,还整合了 Promtail 和 OTEL Collector,也可以用于日志和链路数据的采集转发,Cprobe 整合 Exporter 的方式相对更为丝滑且一致性更好,支持目标实例的自动发现机制,专注在指标采集方向,不提供日志采集和链路数据转发能力,两个项目都是开源的,大家根据自己的需求选择。

本专栏专注如何构建生产级监控系统,侧重指标监控领域,选择 Cprobe 作为采集器。下面我们对 Cprobe 的通用配置做简要说明。

Cprobe 简介

Cprobe 的 README 中已经放置了相关文档链接,不多总共三四篇,请各位自行阅读,这里就不再赘述了。安装的话,可以采用二进制方式、容器方式、Kubernetes 方式,安装文档在这里:https://github.com/cprobe/cprobe/issues/5,每种安装方式基本就是一条命令的事,简单的很。

Cprobe 的配置文件在 conf.d 目录下,writer.yaml 配置时序库的 remote write 地址,Cprobe 采集了数据之后通过 remote write 协议发送指标数据给时序库。conf.d 下面有不少目录,每个目录对应一个采集插件,每个采集插件的目录下通常都会有一个 main.yaml 的入口配置,main.yaml 中配置要采集的监控目标的地址,当然,也可以不写死目标实例的地址,而是通过 HTTP SD 或 File SD 的方式动态发现监控目标。其次,main.yaml 中一般会有 scrape_rule_files 配置项,配置各个 job 的采集规则,这是个数组,程序处理时会把数组里的每个规则文件拼接成一个整体来使用,即:通过这种方式可以实现配置文件拆分管理。举例:

global:scrape_interval: 15sexternal_labels:cplugin: 'mysql'scrape_configs:
- job_name: 'mysql_static'static_configs:- targets:- '127.0.0.1:3306'scrape_rule_files:- 'rule_head.toml'- 'rule_coll.toml'- job_name: 'mysql_http_sd'http_sd_configs:- url: http://localhost:8080/get-targetsscrape_rule_files:- 'rule_head.toml'- 'rule_coll.toml'- job_name: 'mysql_file_sd'file_sd_configs:- files:- 'inst.yaml'scrape_rule_files:- 'rule_head.toml'- 'rule_coll.toml'- 'rule_cust.toml'

另外,每个插件目录下通常有个 doc/README.md 文件,里面会有该插件的详细说明,并且会有插件对应的仪表盘和告警规则的模板。OK,下面我们就来看看如何配置 Cprobe 来监控常见的数据库、中间件。

MySQL

MySQL 的监控插件配置在 conf.d/mysql 目录下,我给大家演示一下监控 3 个 MySQL 实例的配置,首先是 main.yaml:

global:scrape_interval: 15sexternal_labels:cplugin: 'mysql'scrape_configs:
- job_name: 'mysql_dept1'static_configs:- targets:- '10.99.1.107:3306'- '10.99.1.108:3306'scrape_rule_files:- 'rule_head1.toml'- 'rule_coll.toml'
- job_name: 'mysql_dept2'static_configs:- targets:- '10.99.1.109:3306'scrape_rule_files:- 'rule_head2.toml'- 'rule_coll.toml'

上面的配置文件可以看出,总共监控了 3 个实例,分成两个 job,之所以分成两个 job 是因为这两组数据库实例的认证信息不同,所以需要分开配置,mysql_dept1 这个 job 引用了 rule_head1.toml,而 mysql_dept2 这个 job 引用的是 rule_head2.toml,这俩 rule toml 文件中配置的是认证信息,比如 rule_head1.toml 的内容是:

[global]
user = 'cprobe'
password = 'cProbePa55'

上面只是为了演示,所以这么划分 job 和 认证信息,实际上,用于监控的账号,最好是全局统一的只读账号,方便管理,而 job 的划分依据,主要是 SD 的方式,不同的 SD 不同的 job。

通过 ./cprobe --no-writer --no-httpd --plugins mysql 可以测试一下采集是否成功,正常来讲,会输出一堆 mysql 指标,然后我们检查 writer.yaml 中的 remote write 地址是否正确,然后重启 Cprobe,就可以在时序库中看到 MySQL 的指标了。另外你可以从下面地址获取 MySQL 仪表盘:

https://github.com/cprobe/cprobe/blob/main/conf.d/mysql/doc/dash/grafana_mysql_01.json

20240104083953

对于常用的数据库、中间件,FlashDuty 已经提供了一些常用的告警规则,导入即可使用:

20240104085229

FlashDuty 在专栏第一篇已经介绍过,主要是一个事件 OnCall 中心,可以接入各种监控系统,把告警事件收集到一个地方统一管理,提供告警多渠道分发、收敛降噪、排班、认领升级、协同等能力,新版本还内置了告警引擎,可以对时序库中的数据做告警判定,内置各类常用的告警规则模板,总之,告警这个事,交给 FlashDuty 就好了。我们只需要做好数据采集(Cprobe等各类采集器)、存储(VictoriaMetrics等时序库)、展示(Grafana等可视化工具)这些事情就行了。

Redis

Redis 的监控插件配置在 conf.d/redis 目录下,main.yaml 举例如下:

global:scrape_interval: 15sexternal_labels:cplugin: 'redis'scrape_configs:
- job_name: 'redis'static_configs:- targets:- '10.99.1.107:6379'scrape_rule_files:- 'rule.toml'

通过 ./cprobe --no-writer --no-httpd --plugins redis 可以测试一下采集是否成功,正常来讲,会输出一堆 Redis 指标,Redis 的仪表盘可以从这里获取(或者自行从 Grafana 官网搜索别人分享的仪表盘):

https://github.com/cprobe/cprobe/blob/main/conf.d/redis/doc/dash/grafana_redis_01.json

20240104085003

Redis 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

MongoDB

MongoDB 的监控插件配置在 conf.d/mongodb 目录下,main.yaml 举例如下:

global:scrape_interval: 15sexternal_labels:cplugin: 'mongodb'scrape_configs:
- job_name: 'standalone'static_configs:- targets:- 10.99.1.110:27017scrape_rule_files:- 'rule.toml'

如果有认证信息,可以在 conf.d/mongodb/rule.toml 中配置,通过 ./cprobe --no-writer --no-httpd --plugins mongodb 可以测试一下采集是否成功,正常来讲,会输出一堆 MongoDB 指标,之后重启 Cprobe 即可。MongoDB 的仪表盘可以从这里获取(或者自行从 Grafana 官网搜索别人分享的仪表盘):

https://github.com/cprobe/cprobe/blob/main/conf.d/mongodb/doc/dash/grafana_mongodb_01.json

20240104091544

MongoDB 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

Oracle

Oracle 的监控插件配置在 conf.d/oracledb 目录下,main.yaml 举例如下:

global:scrape_interval: 15sexternal_labels:cplugin: 'oracle'scrape_configs:
- job_name: 'oracle'static_configs:- targets:- 10.99.1.107:1521/xe # ip:port/servicescrape_rule_files:- 'link.toml'- 'comm.toml'

一般监控目标,即 target 的配置都是 IP + 端口,Oracle 的略有不同,需要配置成 IP + 端口 + service,通过 ./cprobe --no-writer --no-httpd --plugins oracledb 可以测试一下采集是否成功,正常来讲,会输出一堆 Oracle 指标,之后重启 Cprobe 即可。Oracle 的仪表盘可以从这里获取(或者自行从 Grafana 官网搜索别人分享的仪表盘):

https://github.com/cprobe/cprobe/blob/main/conf.d/oracledb/doc/dash/grafana_oracledb_01.json

20240104095322

Oracle 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

Postgres

Postgres 的监控插件配置在 conf.d/postgres 目录下,main.yaml 举例如下:

global:scrape_interval: 15sexternal_labels:cplugin: 'postgres'scrape_configs:
- job_name: 'postgres'static_configs:- targets:- '10.99.1.107:15432'scrape_rule_files:- 'rule.toml'

通过 ./cprobe --no-writer --no-httpd --plugins postgres 可以测试一下采集是否成功,正常来讲,会输出一堆 Postgres 指标,之后重启 Cprobe 即可。Postgres 的仪表盘可以从这里获取(或者自行从 Grafana 官网搜索别人分享的仪表盘):

https://github.com/cprobe/cprobe/blob/main/conf.d/postgres/doc/dash/grafana_postgres_01.json

20240104095711

Postgres 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

Tomcat

Tomcat 的监控插件配置在 conf.d/tomcat 目录下,main.yaml 举例如下:

global:scrape_interval: 15sexternal_labels:cplugin: 'tomcat'scrape_configs:
- job_name: 'tomcat'static_configs:- targets:- '10.211.55.3:8080'scrape_rule_files:- 'rule.toml'

注意,Tomcat 监控需要修改 conf/tomcat-users.xml 配置,增加 role 和 user,比如:

<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><role rolename="manager-gui"/><user username="tomcat" password="s3cret" roles="manager-gui"/>
</tomcat-users>

其次,通常 cprobe 和 tomcat 部署在不同的机器上,需要修改 webapps/manager/META-INF/context.xml 配置,把下面的部分注释掉:

<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

xml 的注释使用 <!-- -->,所以,最终注释之后变成:

<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

然后修改 tomcat 的 rule.toml,写上认证信息,即可测试:./cprobe --no-writer --no-httpd --plugins tomcat。Tomcat 的仪表盘暂未整理,欢迎大家贡献 PR 呀。Tomcat 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

Kafka

Kafka 的众多指标是通过 jmx 的方式暴露的,所以,在 Kafka 启动的 shell 里通过 -javaagent 埋入 prometheus_jmx_agent.jar,就可以暴露 Prometheus 协议的监控数据了,使用 Cprobe 的 Prometheus 插件来抓即可。但是 Cprobe 还是提供了一个专门的 Kafka 插件,用于抓取 consumergroup 的 lag 信息,配置文件在 conf.d/kafka 目录下,main.yaml 内容举例:

global:scrape_interval: 15sexternal_labels:cplugin: 'kafka'scrape_configs:
- job_name: 'kafka'static_configs:- targets:- '10.99.1.105:9092'scrape_rule_files:- 'rule.toml'

如果是监控集群,想要写多个实例,Kafka 的 target 写法跟其他的 plugin 会有不同,举例:

global:scrape_interval: 15sexternal_labels:cplugin: 'kafka'scrape_configs:- job_name: 'kafka'static_configs:- targets:- '172.21.0.162:9092,172.21.0.163:9092,172.21.0.164:9092'scrape_rule_files:- 'rule.toml'

和 mysql 插件对比一下,应该可以看出差别吧?你知道为啥会有这样的不同设计么?欢迎在评论区留言探讨 :-)

通过 ./cprobe --no-writer --no-httpd --plugins kafka 可以测试一下采集是否成功,正常来讲,会输出一堆 Kafka 指标,之后重启 Cprobe 即可。Kafka 的仪表盘可以从这里获取(或者自行从 Grafana 官网搜索别人分享的仪表盘):

https://github.com/cprobe/cprobe/blob/main/conf.d/kafka/doc/dash/grafana_kafka_01.json

20240104101643

Kafka 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

ElasticSearch

ElasticSearch 的监控插件配置在 conf.d/elasticsearch 目录下,main.yaml 举例如下:

global:scrape_interval: 15sexternal_labels:cplugin: 'elasticsearch'scrape_configs:
- job_name: 'elasticsearch'static_configs:- targets:- 10.99.1.105:9200scrape_rule_files:- 'rule.toml'

通过 ./cprobe --no-writer --no-httpd --plugins elasticsearch 可以测试一下采集是否成功,正常来讲,会输出一堆 ElasticSearch 指标,之后重启 Cprobe 即可。ElasticSearch 的仪表盘可以从这里获取(或者自行从 Grafana 官网搜索别人分享的仪表盘):

https://github.com/cprobe/cprobe/blob/main/conf.d/elasticsearch/doc/dash/grafana_elasticsearch_01.json

20240104103722

ElasticSearch 的告警规则,FlashDuty 也已经内置了,使用 FlashDuty 做告警和事件分发即可,这里不再赘述。

小结

作为专栏第二篇文章,给大家大体介绍了一下常用中间件的采集方式,Cprobe 是一个挺有意思的工具,大家可以一起贡献 PR。我们下一讲再见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯嵌入式——测量两路PWM频率和占空比

原理&#xff1a;在通道1&#xff0c;TIM_CH1上会输入PWM波&#xff0c;在每个上升沿来的时候会发生三个动作&#xff0c;第一个动作会触发一个中断&#xff0c;第二个动作会把CNT计数值捕获&#xff0c;第三个动作会把CNT的值清0&#xff0c; 要测量占空比则需要打开TI1FP2&a…

经济学基础入门,从《小岛经济学》看经济的演变

一直在学习怎么赚钱&#xff0c;没有专业的人指导。于是就想着先学习一下经济学相关的知识吧&#xff01;无意间看到大家推荐的这本书籍&#xff0c;一本很适合经济学入门的经济《小岛经济学》&#xff0c;这本书以故事的方式&#xff0c;讲解了经济演变过程。而且大约只需要2到…

对嵌入式系统、GCC、的理解

1、嵌入式系统通用硬件组成 2、Linux系统的嵌入式的开发流程 3、Linux系统的嵌入式的结构 4、文件IO和标准IO&#xff1f; 5、为什么需要交叉编译 1、嵌入式系统硬件的限制&#xff08;CPU处理能力不如电脑、存储空间小、网络带宽小不利于传输、安全性不如电脑、能耗问题&…

关于GitHub国内打不开的有效解决办法

哈喽大家好&#xff0c;我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01; GitHub是全球最大的开源代码托管平台之一&#xff0c;但由于某些原因&#xff0c;它在中国大陆地区经常会遭受网络封锁&#xff0c;导致无法正常访问。如果您也遇到了这个问题&#xff0c;不要担…

【计算机网络】——TCP协议

&#x1f4d1;前言 本文主要是【计算机网络】——传输层TCP协议的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句…

前端面试题-说说你了解的js数据结构?(2024.1.29)

1、数组 (Array) 数组是一组有序的值的集合&#xff0c;可以通过索引访问。JavaScript 数组可以包含不同的数据类型&#xff0c;并且长度是动态的。 let myArray [1, hello, true, [2, 3]];2、对象 (Object) 对象是无序的键值对的集合。每个键都是字符串或符号&#xff0c;…

安全刷写简单说明

文章目录 1.安全刷写的目的2.安全刷写的实现3.安全刷写的要求4.签名说明5.刷写过程 1.安全刷写的目的 为了避免ECU被恶意篡改数据&#xff0c;从而导致ECU功能失效。 2.安全刷写的实现 目前很多厂商会使对软件进行签名操作&#xff0c;从一定程度上实现安全刷写的目的。 3.…

【学网攻】 第(16)节 -- 扩展ACL访问控制列表

系列文章目录 目录 系列文章目录 文章目录 前言 一、ACL(访问控制列表)是什么 ? 二、实验 1.引入 实验目标 实验步骤 实验设备 实验拓扑图 实验配置 配置ACL访问控制 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识…

2024 年, Web 前端开发趋势

希腊哲学家赫拉克利特认为&#xff0c;变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

FPS游戏框架漫谈第七条

小地图制作流程漫谈&#xff1a; 1.由于场景导出地图顶视图结构给原画 2.原画会对其进行加工处理 3.经过原画处理后的资源给到还原&#xff0c;还原合入游戏内 4.拿的的资源一般是256256 5.场景需要提供一些采样参数给程序 一般3组即可 每组参数是场景中的坐标和顶视图中屏幕坐…

Python机器学习--简单清晰的说说K近邻算法的基本原理

K近邻算法的基本原理&#xff1a;首先通过所有的特征变量构筑起一个特征空间&#xff0c;特征空间的维数就是特征变量的个数&#xff0c;然后针对某个测试样本&#xff0c;按照参数K在特征空间内寻找与它最为近邻的K个训练样本观测值&#xff0c;最后依据这K个训练样本的响应变…

Codeforces Round 871

目录 A. Love Story B. Blank Space C. Mr. Perfectly Fine D. Gold Rush E. The Lakes F. Forever Winter G. Hits Different H. Don’t Blame Me A. Love Story 直接逐个匹配 string a"codeforces"; void solve() {string s; cin>>s;int cnt0;for(i…

快速理解MoE模型

最近由于一些开源MoE模型的出现&#xff0c;带火了开源社区&#xff0c;为何&#xff1f;因为它开源了最有名气的GPT4的模型结构&#xff08;OPEN AI&#xff09;&#xff0c;GPT4为何那么强大呢&#xff1f;看看MoE模型的你就知道了。 MoE模型结构&#xff1a; 图中&#xff0…

Netty-ChannelHandle的业务处理

ChannelHandle结构 ChannelHandler基础接口 基础接口里面定义的基础通用方法。增加handler&#xff0c;移除handler&#xff0c;异常处理。 ChannelInboundHandler public interface ChannelInboundHandler extends ChannelHandler {/*** The {link Channel} of the {link Ch…

猫突然不吃东西没精神?性价比高可以迅速恢复精神的生骨肉冻干推荐

猫突然不吃东西没精神怎么办&#xff1f;当猫咪不吃东西、精神不振时&#xff0c;可能是由于健康问题、环境因素或食物原因所引起。首先应进行身体检查&#xff0c;观察是否有其他并发症&#xff0c;如无则可排除健康问题。为猫咪提供安全舒适的环境、给予关爱&#xff0c;可改…

亚信安慧AntDB:AntDB-M元数据锁(七)

5.4.5 慢路径锁的授予条件 当且仅当满足如下两个条件时&#xff0c;才可以授予锁。 1. 其他线程没有持有不兼容类型锁。 2. 当前申请的锁的优先级高于请求等待列表中的。 首先通过锁位图判断等待队列&#xff0c;不兼容则不能授予锁。再判断快速路径&#xff0c;不兼容则不…

win11下 “pytorch导出模型“ 以及 “C++使用onnxruntime部署”

部分一&#xff1a;PyTorch导出模型 在Win11下&#xff0c;PyTorch是一个强大的深度学习框架&#xff0c;它提供了丰富的工具来训练和导出模型。在这一部分&#xff0c;我们将使用鸢尾花数据集&#xff0c;演示如何在PyTorch中训练一个简单的模型&#xff0c;并将其导出为ONNX…

改变this指针的三个方法?

要改变 this 的指向&#xff0c;JavaScript 提供了一系列的方法&#xff1a; call()&#xff1a; 使用 call() 可以直接改变 this 的指向。它接受两个参数&#xff1a;第一个是要调用的目标函数&#xff0c;第二个是将作为 this 的值的对象或对象引用的数组。例如&#xff0c…

protobuf-go pragma.go 文件介绍

pragma.go 文件 文件位于&#xff1a; https://github.com/protocolbuffers/protobuf-go/blob/master/internal/pragma/pragma.go 该文件核心思想&#xff1a; 利用 Golang 语法机制&#xff0c;扩展 Golang 语言特性 目前&#xff0c;该文件提供以下 4 个功能&#xff1a; …

C++STL模板库

类&#xff1a; pair: 头文件&#xff1a;<utility> 定义&#xff1a; 是一个标准库类型。可以看作是有两个成员变量first和second的结构体&#xff0c;并且重载了<运算符(先比较first大小&#xff0c;再比较second大小)当我们创建一个pair时&#xff0c;必须提供两…