背景

1、Prometheus官网提供的mysql exporter 对于mysql实例只能一个进程监控一个实例,数据库实例很多的情况,不方便管理

2、内部有定制化监控需求,RDS 默认无法实现,比如对数据库增长的监控

3、默认 Prometheus官网提供的mysql exporter 采集mysql几乎所有的指标,但是实际用到的却不多。浪费存储空间

思路

先了解对于数据库的监控需求

  • 1、一个exporter可以采集所有RDS实例数据

  • 2、RDS 实例采集指标不用全部采集,按需即可

  • 3、定制化需求

    • 数据库磁盘使用率,默认mysql的status/variables中没有该指标
    • 统计数据库、表的总大小(数据大小+索引大小)

** 针对第一个需求 **

之前在使用Prometheus监控redis的时候,有个export实现了可以同时监控多个实例的情况,大概的思路是:

把实例名称或者地址作为target参数传递给一个URL,这个URL就是一个exporter,然后根据传递的不同target 采集相同指标

** 针对第二个需求 **

做过监控的人都知道mysql的监控指标其实都是采集的show global statusshow global variables 的结果然后做相关汇总或者计算

所以我们很容易就可以通过这两个sql的结果帅选出需要的选项保存在一个配置文件,采集的时候读取该配置文件选项,按需采集即可

** 针对第三个需求 **

数据库磁盘使用率 / 统计数据库、表的总大小 都不是从status/variables 能获取到的。所以了解Prometheus架构的就知道,可以使用 pushgateway 来实现

自定义 exporter 介绍

cws-mysql-exporter
├── aliyunapi.py
├── config.py
├── generate-instance-yml.py
├── instance.yml
├── metrics.yml
├── utils.py
├── pushgateway.py
├── push_cron_dbsize.py
├── push_cron_rds_cpumemiops.py
└── rds-exporter.py
  • aliyunapi.py 是封装的阿里云相关的api接口,因为磁盘和CPU只能从阿里云获取,它和主机有关系
  • config.py 里面定义 阿里云api的ak/sk ,以及 exporter连接数据库用到的账号和密码,这个账号密码是所有实例共用的
  • generate-instance-yml.py 这个是首次需要执行的脚本,生成 instance.yml 配置文件,主要是获取所有RDS的实例名称和连接地址,及instance_id(因为有些接口入参必须是instance_id)
rds-xxxx:host: rm-xxxxxx.mysql.rds.aliyuncs.comid: rm-xxxxxxrds-yyyyy:host: rm-yyyyy.mysql.rds.aliyuncs.comid: rm-yyyyy
  • metrics.yml 是需要采集的监控指标,分variablesstatus ,格式如下
variables:max_connections: ""max_user_connections: ""... ...
status:Aborted_connects: ""Aborted_clients: ""... ...
  • utils.py 是封装的公共函数

  • pushgateway.py 是封装的需要推送的 pushgateway 的监控指标

  • push_cron_dbsize.pypush_cron_rds_cpumemiops.py 是包装的不同维度需要推送到 pushgateway 的脚本, 最终需要在crontab中定时去执行

  • rds-exporter.py 是 exporter 的入口,这里借助了 flask 来运行server

exporter 开源地址详见: 自定义exporter实现多RDS数据采集

启动 rds-exporter, 默认端口在 5005

Prometheus及组件安装

这里介绍简单的安装和配置,具体的Prometheus及其架构介绍网上有很多资料,大家自行查阅即可

1、安装Prometheus

#!/usr/bin/env bash
# encoding: utf-8
# Author: Eagle
# Desc: 自动化安装 Prometheus
# version="2.36.1"
if [ $# -eq 1 ]
thenversion="$1"
fiecho "Will install prometheus ${version} version"# download
wget "https://github.com/prometheus/prometheus/releases/download/v${version}/prometheus-${version}.linux-amd64.tar.gz"# untar and set link
tar -zxf prometheus-${version}.linux-amd64.tar.gz -C /opt/app
ln -s /opt/app/prometheus-${version}.linux-amd64 /opt/app/prometheus

2、安装pushgateway

#!/usr/bin/env bash
# encoding: utf-8
# Author: Eagle
# Desc: 自动化安装 Prometheus Pushgateway
# version="1.4.3"
if [ $# -eq 1 ]
thenversion="$1"
fiecho "Will install prometheus pushgatewa ${version} version"
wget "https://github.com/prometheus/pushgateway/releases/download/v${version}/pushgateway-${version}.linux-amd64.tar.gz"# untar and set link
tar -zxf pushgateway-${version}.linux-amd64.tar.gz -C /opt/app
ln -s /opt/app/pushgateway-${version}.linux-amd64 /opt/app/pushgateway

3、启动 pushgateway

配置systemd service,文件位置/usr/lib/systemd/system/pushgateway.service

Description=Prometheus Pushgateway Service
Requires=network-online.target
After=network-online.target[Service]
Restart=on-failure
ExecStart=/opt/app/pushgateway/bin/pushgateway[Install]
WantedBy=multi-user.target
  • 配置开启自启动 systemctl enable pushgateway
  • 启动/停止/重启 systemctl start/stop/restart pushgateway

pushgateway不需要额外的配置,默认是在9091端口

4、配置Prometheus并启动

配置systemd service,文件位置/usr/lib/systemd/system/prometheus.service

Description=Prometheus Server
Requires=network-online.target
After=network-online.target[Service]
Restart=on-failure
ExecStart=/opt/app/prometheus/bin/prometheus --config.file=/opt/app/prometheus/prometheus.yml --storage.tsdb.retention=60d --web.enable-lifecycle --web.enable-admin-api --storage.tsdb.path=/data/prometheus-data[Install]
WantedBy=multi-user.target

注意提前创建 prometheus 数据目录

  • 配置开启自启动 systemctl enable prometheus
  • 启动/停止/重启 systemctl start/stop/restart prometheus

配置Prometheus

# 这里是全局变量的配置
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# 这里是配置 alertmanager, Prometheus会根据 rules 规则把告警信息发送给 alertmanager 组件,alertmanager 负责实际告警信息的发送
alerting:alertmanagers:- static_configs:- targets: ['192.168.xx.yyy:9093']# 这里是配置告警规则,本次不是讲解重点先忽略
# rule_files:
#   - "rules/rds_rules.yml"# 配置Prometheus从那些 endpoint 或者叫 exporter 采集监控数据
scrape_configs:# 默认监控 Prometheus服务本身- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]labels:instance: prometheus# 自定义的mysql targets ,这里的targets是通过直接配置的方式# 另外还有通过文件的方式、通过consul等自动发现的方式,# 这两种方式这里不展开介绍,感兴趣的关注后续文章- job_name: 'mysql_targets'scrape_interval: 60sscrape_timeout: 12smetrics_path: /scrapestatic_configs:- targets:- rds-xxx- rds-yyy# relabel_configs 是通过label重写实现我们最终需要的标签# 另外这里是通过重写target,重新定义了 endpoint 地址relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 192.168.3.108:5005# pushgateway - job_name: 'pushgateway'scrape_interval: 60sstatic_configs:- targets:- 192.168.3.108:9091# 这里是对自定义的 mysql-exporter 做监控- job_name: 'rds-exporter'scrape_interval: 60sstatic_configs:- targets:- 192.168.3.108:5005

重启Prometheus或者执行reload操作 curl -XPUT http://192.168.3.108:9090/-/reload 使配置生效

最终在prometheus的webui界面的Status -> Targets 里面看到如下


Grafana 配置MySQL监控大盘

具体的Grafana安装和配置请参考教程 或者网上自动查阅

打开Grafana界面进行 Dashboard的导入,如下图所示

点击左侧 + 选择 import ,然后通过三种不同的方式导入Dashboard模板

1、在granfan 官网找到合适的模板之后,记住ID,输入该ID然后点击Load
2、通过右上角的 Upload .json file 上传本地的模板json文件
3、直接把本地的模板json文件内容copy到 Or paste JSON 下方的框中即可

这里提供自定义的模板JSON文件 下载地址

最终的效果如下

自定义prometheus exporter实现监控阿里云RDS相关推荐

  1. Zabbix 监控阿里云RDS

    简介 Zabbix 监控阿里云RDS数据库.主要通过阿里云提供的API来进行监控. 需要在阿里云获取"用户AccessKey"指定ID,进行RDS监控. 环境 服务:Zabbix ...

  2. 从没想到监控可以这么做!阿里云RDS智能诊断系统首次公开

    阿里妹导读:来自阿里云RDS团队的论文"TcpRT: Instrument and Diagnostic Analysis System for Service Quality of Clo ...

  3. 阿里云RDS深度定制-XA Crash Safe

    简介: 近几年,随着分布式数据库系统的兴起,特别是基于MySQL分布式数据库系统,会用到XA来保证全局事务的一致性.众所周知,MySQL对XA事务的支持是比较弱的,存在很多问题.为了满足分布式数据库系 ...

  4. 自建MySQL和阿里云RDS的区别 有必要使用云数据库吗?...

    很多阿里云ECS用户都会考虑是使用ECS自建数据库还是使用阿里云的RDS云数据库,如何选择?有必要使用云数据库吗?云吞铺子告诉你使用阿里云RDS云数据库的理由: RDS的高可用性 RDS提供了主备双节 ...

  5. 阿里云mysql数据库引擎_在阿里云RDS数据库服务器中将MySQL InnoDB引擎表转为压缩格式...

    今年以来将我们以前托管或者租用的服务器全面转向阿里云,除了采用ECS服务器以外,还有一项重要的是采用了RDS数据库服务器,这对于服务的稳定性.各项指标的监控.调优等都有帮助. 不过随着近期更多数据库转 ...

  6. Greenplum roaring bitmap与业务场景 (类阿里云RDS PG varbitx, 应用于海量用户 实时画像和圈选、透视)

    摘要: 标签 PostgreSQL , Greenplum , varbitx , roaring bitmap , pilosa , varbit , hll , 多阶段聚合 背景 roaring ...

  7. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记

    1初始化配置 1.1设置白名单 创建RDS实例后,需要设置RDS实例的白名单,以允许外部设备访问该RDS实例.默认的白名单只包含默认IP地址127.0.0.1,表示任何设备均无法访问该RDS实例. 设 ...

  8. 重磅干货免费下载!阿里云RDS团队论文被数据库顶会SIGMOD 2018收录

    为什么80%的码农都做不了架构师?>>>    摘要: 来自阿里云RDS团队的论文"**TcpRT: Instrument and Diagnostic Analysis ...

  9. 【数据库取证篇】阿里云RDS数据库简介

    [数据库取证篇]阿里云RDS数据库简介 ​ 初识RDS基本信息,知其然,再知其所以然-[suy] 文章目录 [数据库取证篇]阿里云RDS数据库简介 (一)云数据库RDS简介 1.各版本功能 (二)RD ...

最新文章

  1. C++拾遗(五)语句相关
  2. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...
  3. angularjs 添加拦截器
  4. AI算法连载11:统计之集成学习
  5. java使用计算器完成加法、减法运算
  6. 根据个人亲身进阶架构师经历系统构建20大进阶架构师专题!
  7. PaddleOCR服务器端部署C++ cpu或者gpu进行预测
  8. office工具包开源了,使用Excel导入导出非常方便
  9. JAVA环境变量安装
  10. 离散数学编程输出主析取范式(二进制排列转十进制输出)
  11. linux搭建steam服务器吗,如何在Linux系统服务器中安装steam play
  12. 尝试一下暴力破解Wifi
  13. 微弱信号检测_科学家发现水溶液中气体磁共振信号增强新方法
  14. Mac安装Linux虚拟机
  15. tumblr_向您的Tumblr博客添加高级主题
  16. 计算机如何把应用储存进u盘,怎样把word中的内容保存进u盘 怎样把word文档放到u盘里?...
  17. 全部驳回?元宇宙商标申请被国家知识产权局“劝退”
  18. HDU 1114 Piggy-Bank 猪仔储钱罐(完全背包)
  19. (二十七) 开运算、闭运算、形态梯度、顶帽、黑帽
  20. 如何用svg画一个骚气的名字

热门文章

  1. 【高数】函数有原函数与函数可积的区别与联系
  2. 嵌入式系统的软件框架简述
  3. 【热补丁】新版本浏览器导致Cockpit无法登录的问题
  4. python3 自动整理文件(超简单代码)
  5. 计算机毕业设计springboot+vue基本微信小程序的我来运动健身系统
  6. 佛山南方风机股份启用易度文控管理
  7. 一些linux命令总结。
  8. 雄雄的工具箱-去水印、图像处理、文本处理、实用工具大全
  9. 什么是失调电压调整电路 它有什么作用
  10. 浏览器之旅:从输入网址到页面呈现的神秘过程揭秘(一)