Prometheus结合Consul采集多个MySQL实例的监控指标

本文主要介绍如何利用Prometheus官网提供的mysqld_exporter进行多MySQL实例的监控指标采集

建议安装最新版的mysqld_exporter, 因为从’2022-09-01’ 之后才支持多实例功能的。具体的官网说明详见
Support for scraping multiple mysqld hosts (#651)

ok,开始今天的教程~

1、下载安装 mysqld_exporter

# 参考 下载地址Release列表,选择适合的平台安装包

# 进入运维规范 软件安装目录
cd /opt/app

# 下载并解压
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.15.1.linux-amd64.tar.gz

# 设置软连接
ln -s /opt/app/mysqld_exporter-0.15.1.linux-amd64 mysqld_exporter

2、进行配置

配置之前创建Prometheus exporter 账号并赋权

CREATE USER 'prometheus'@'192.168.%' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 10;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'192.168.%';

配置连接MySQL的配置文件

# vim ./.my.cnf
[client]
user = prometheus
password = XXXXXXXX

其他的配置说明详见 https://github.com/prometheus/mysqld_exporter

为了方便管理,在每个MySQL实例初始化的时候,创建相同的账号 'prometheus'@'192.168.%' 和对应的密码, 这样在 mysql exporter中只用配置一个[client] 即可。

3、启动MySQL exporter并测试

注意可以通过 ./mysqld_exporter --help 查看以 --collect.xx 开头的参数,这个是该exporter支持的metrics

另外需要特殊说明几个参数

  • –config.my-cnf=“.my.cnf”

    配置exporter连接数据库时使用的认证信息(这里只要是配置用户和密码),默认是读取当前目录下的.my.cnf,可以修改指定

  • –web.listen-address=:9104

    exporter默认监听的端口,可以修改

启动 exporter 服务

nohup ./mysqld_exporter --config.my-cnf=./.my.cnf --collect.global_status --collect.global_variables --collect.mysql.user --collect.binlog_size --collect.slave_status &

当然还可以配置systemd 方式来管理该exporter服务

# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=Prometheus MySQL exporter

[Service]
ExecStart=/opt/app/mysqld_exporter/mysqld_exporter --config.my-cnf=/opt/app/mysqld_exporter/.my.cnf --collect.global_status --collect.global_variables --collect.mysql.user --collect.binlog_size --collect.slave_status
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后执行配置开机自启动

# 开启自启动
systemctl enable mysqld_exporter

# 启动
systemctl start mysqld_exporter

# 查看状态
systemctl status mysqld_exporter

4、测试验证

根据官网提示可以使用 /probe?target=foo:3306 的方式来验证

To use the multi-target functionality, send an http request to the endpoint /probe?target=foo:3306 where target is set to the DSN of the MySQL instance to scrape metrics from.

本次环境测试地址 http://192.168.3.100:9104/probe?target=xxxx:3306 然后在浏览器中打开如下,看到exporter部署成功

prometheus-mysql-expoter-probe-test

5、注册MySQL实例信息到Consul

备注: 关于Consul大家知道是目前比较常用的注册中心系统,常见的用法有

a)比如Java服务启动的时候注册到Consul,其他比如网关服务就可以自动发现服务进行请求转发

b)Nginx做服务动态转发时,可以借助于Consul中的KV功能实现在发布服务时,动态下线对应的服务节点,等服务节点重启成功之后再动态上线。可以实现后端服务的无损上线

具体Consul的服务安装和API用法详见官网文档即可,后者关于我博客中的相关文章说明

这里直接给出具体的注册代码

#!/usr/bin/env bash
# encoding: utf-8
# 批量初始化注册到Consul

while read line
do
    # echo $line
    instance_id=$(echo $line|awk '{print $1}')
    instance_name=$(echo $line|awk '{print $2}')
    instance_address=$(echo $line|awk '{print $3}')
    suffix=$(echo $instance_name|awk -F"_" '{print $NF}')
    if [[ $suffix == 'slave' ]]
    then
        role="slave"
    else
        role="master"
    fi

    data="{
        \"id\": \"rds-${instance_name}\",
        \"name\": \"mysql\",
        \"address\" : \"${instance_address}\",
        \"port\": 3306,
        \"tags\": [\"prod\", \"mysql_exporter\"],
        \"meta\": {
            \"env\": \"prod\",
            \"role\": \"${role}\",
            \"instance_id\": \"${instance_id}\",
            \"instance_name\": \"${instance_name}\"
        }
    }"
    # echo $data
    curl -X PUT 'http://192.168.x.x:8500/v1/agent/service/register' -H 'Content-Type: application/json' -d "$data"
done < /opt/scripts/db-register-into-consul/db-list.txt

其中 db-list.txt 文件的内容格式如下

instance-id-xxx instance-name instance-address

或者可以手动单个实例的注册

curl -X PUT 'http://192.168.x.x:8500/v1/agent/service/register' -H 'Content-Type: application/json' \
-d '{
  "id": "rds-xxx",
  "name": "mysql",
  "address": "rm-xxxxxxxx.mysql.rds.aliyuncs.com",
  "port": 3306,
  "tags": [
      "prod",
      "mysql_exporter"
  ],
  "meta": {
    "env": "prod",
    "instance_id": "rm-xxxxxxxx.mysql.rds.aliyuncs.com:3306",
    "role": "master",
    "instance_name": "rds-xxx"
  }
}'

然后打开 Consul的 Web 控制台,在 Services 中搜索 mysql(这里定义的服务名称) 就可以看到有对应的实例注册到该服务下

6、配置Prometheus 自动发现多个MySQL实例

为了规范配置Prometheus的配置,建议按照如下把不同的Job配置到 scrape_configs 目录下单个文件存放管理

# cat scrape_configs/mysql_exporter.yml
scrape_configs:
  - job_name: 'consul_discovery_mysql'
    consul_sd_configs:
      # Consul的服务地址(这里配置的内网域名)
      - server: 'consul.xxx.local'
        # 这里是获取Consul中的服务,如上知道我们是把所有的MySQL实例注册到了`mysql`服务下
        services: ['mysql']
    relabel_configs:
      # 核心是获取 `__parm_target` 就是 上面第四步提到的probe抓取的target
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__meta_consul_service_id]
        target_label: instarnce_name
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        # 注意这里: 该地址就是MySQL exporter服务的地址
        replacement: 192.168.3.100:9104

划重点

虽然在 mysql_exporter 的 config.file 对应的配置文件中可以配置多个 client 然后给配置不同的账号密码,且 prometheus也支持auth_module参数。

但是如果Prometheus配置auth_module参数时且每个job的账号密码不一样。那么就变成了手动配置多个Job的场景,那么基于Consul自动发现的多实例配置就失去了其意义。

所这里这里没有配置,且针对Prometheus监控猜忌,建议配置统一的账号密码就行

划重点

如果在进行relabel 配置的时候,不知道都有哪些原始的labels,可以后两种方案

1、就是Prometheus中先不进行relabel_configs的配置,然后配置生效之后打开 Prometheus Web控制台在 Status中找到 Targets ,然后鼠标放到对应job下endpoint 行 的Labels 列,就会有弹窗显示 Before relabeling 都有哪些

2、查看Prometheus官网介绍 Prometheus consul_sd_config relabel参数

但是个人建议第一种方式,因为笔者刚开始参考第二种方式在meta中存放了定制的参数,但是获取不到。最终分析定位发现是因为笔者的Consul版本太低,很多consul_sd_config参数不支持导致。

但是第一种方式,显示出来的参数就是当前版本支持的可用的参数。

当然具体使用自己更具自己的实际情况来判断就行。

7、验证Prometheus多实例采集

这里给实际的结果截图

prometheus-consul-mysql-targets

看到笔者这里已经采集到了36个实例数据,点击Endpoint就看到需要的结果,和上面第四步测试验证一致。

8、配置Grafana

配置Grafana 就相对很简单了。这里就不展开详细说明了。

大概的步骤就是

1)在grafana中添加该Prometheus数据源

2)然后新创建dashboard 在官网搜到需要的模板之后,按照模板id导致即可


如有疑问欢迎关注微信公众号或者QQ交流分享

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用PrometheusMySQL Exporter来监控MySQL实例Prometheus可以收集MySQL服务器暴露的指标MySQL Exporter可以从MySQL实例中收集指标。可以使用PrometheusMySQL Exporter来监控MySQL实例。 ### 回答2: Prometheus是一款开源的监控和警报工具,可以帮助我们收集和分析各种系统的指标数据。要监控MySQL实例,可以按照以下步骤进行设置: 1. 安装和配置Prometheus:首先,需要下载并安装Prometheus服务器。安装完成后,需要编辑配置文件prometheus.yml,指定哪些目标需要监控。 2. 配置exporter:Prometheus无法直接监控MySQL,因此需要使用exporter来从MySQL实例中收集指标数据。有许多可用的MySQL exporter,比如Prometheus MySQL exporter或Percona exporter。根据具体需求选择一个合适的exporter,并按照其官方文档进行安装和设置。 3. 收集MySQL指标:启动exporter后,Prometheus服务器将会从exporter获取MySQL实例指标数据。根据exporter的配置,指标数据将以指定的格式和路径提供给Prometheus。 4. 配置告警规则:在prometheus.yml中可以设置告警规则,用于检测MySQL实例是否出现异常或达到预定的阈值。通过设置合理的告警规则,可以及时发现和解决MySQL问题。 5. 可视化监控数据:Prometheus提供了一个基本的图形界面,可以使用Grafana等工具进行更丰富和灵活的数据可视化和仪表盘设置。这样可以更直观地查看MySQL实例监控数据,并更好地进行性能分析和优化。 通过以上步骤,就可以成功地使用Prometheus监控MySQL实例。需要注意的是,根据具体环境和需求,有些步骤可能会有些差异。 ### 回答3: Prometheus是一款开源的监控和警报系统,可以用来监控和收集各种类型的数据。要监控MySQL实例,需要进行以下步骤: 1. 安装Prometheus:首先,你需要在服务器上安装Prometheus。你可以从Prometheus的官方网站上下载适合你操作系统的版本,并按照对应的安装指南进行安装。 2. 配置Prometheus:在安装完成后,你需要配置Prometheus监控MySQL实例。进入Prometheus的配置文件(一般为`prometheus.yml`),添加以下配置: ```yaml scrape_configs: - job_name: 'mysql' static_configs: - targets: ['mysql_host:exporter_port'] ``` 其中,`mysql_host`是MySQL实例的主机地址,`exporter_port`是Prometheus exporter的端口号。这些信息可以根据你的实际环境进行配置。 3. 安装MySQL Exporter:MySQL Exporter是用于从MySQL实例中提取监控指标的工具。你需要根据你的操作系统下载适合的MySQL Exporter,并进行安装。安装完成后,启动MySQL Exporter。 4. 验证监控:在浏览器中输入Prometheus的地址和端口号(默认为`http://localhost:9090`),打开Prometheus的Web界面。在查询框中输入`mysql_up`,点击执行,如果能看到结果为`1`,则表示MySQL实例已被成功监控。 5. 配置警报规则(可选):如果你希望在MySQL出现问题时得到通知,可以配置警报规则。在Prometheus的配置文件中,添加类似以下的警报规则: ```yaml groups: - name: mysql_alert_rules rules: - alert: HighCPUUsage expr: 100 * (mysql_global_status_user_time / mysql_global_status_total_time) > 80 for: 5m labels: severity: warning annotations: summary: High CPU Usage on MySQL description: CPU usage on MySQL is consistently above 80% for the last 5 minutes. ``` 这个例子中,当MySQL的CPU使用率超过80%持续5分钟时,将触发警报。 通过以上步骤,你就可以使用Prometheus监控MySQL实例了。你可以在Prometheus的Web界面中查看监控指标,并设置警报规则来及时得到通知。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值