Prometheus 监控MySQL使用grafana展示


Posted in MySQL onAugust 30, 2021

prometheus通过exporter监控mysql,并用grafana图表展示

概述:

prometheus是由SoundCloud开发的开源监控告警系统并且自带时序数据库,基于Go语言。Prometheus根据配置的任务(job)以周期性pull的方式获取指定目标(target)上的指标(metric)。

Prometheus 监控MySQL使用grafana展示

Prometheus 生态圈中包含了多个组件:

  • Prometheus Server: 根据配置完成数据采集, 服务发现以及数据存储。
  • Push Gateway : 为应对部分push场景提供的插件,监控数据先推送到 Push Gateway 上,然后再由 Prometheus Server 端采集 pull 。用于存在时间较短,可能在 Prometheus 来 pull 之前就消失了的 jobs (若 Prometheus Server 采集间隔期间,Push Gateway 上的数据没有变化, Prometheus Server 将采集到2次相同的数据,仅时间戳不同)
  • Exporters(探针): 是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
  • Alertmanager: Prometheus server 主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到Alertmanager,Alertmanager则是根据配置处理告警信息并发送。常见的接收方式有:电子邮件,webhook 等。Alertmanager三种处理告警信息的方式:分组,抑制,静默。

接下来开始演示

1、测试机器

prometheus-server 192.168.56.140
MySQL host01 192.168.56.103
MySQL host02 192.168.56.104

 2、配置mysql host01

MySQL使用版本:

8.0.25 MySQL Community Server

3、创建exporter帐号

mysqld_exporter通过查询mysql的状态表及状态命令获取数据。所以,需要先在mysql内,创建相应帐号

create user 'exporter'@'%' identified by 'Xiaopang*803';
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'exporter'@'%';
GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
flush privileges;

4、下载,安装mysqld_exporter

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz
tar xvzf mysqld_exporter-0.13.0.linux-amd64.tar.gz -C /usr/local/.
cd /usr/local && ln -s mysqld_exporter-0.13.0.linux-amd64/ mysqld_exporter

4.1 编辑文件输入密码

编缉如下文件,输入exporter用户句与密码(与前面mysql内创建的帐号密码一致)

[root@host01 mysqld_exporter]# vi .my.cnf
[client]
user=exporter
password=Xiaopang*803

4.2 添加启动服务文件

[root@host01 ~]# vi /etc/systemd/system/mysqld_exporter.service

[Unit]
Description=mysqld_exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target

 4.3 启动mysqld_exporter

service mysqld_exporter start

4.4 测试验证

mysqld_exporter默认使用9104端口,我们可以在浏览器内输入如下地址。查看是否有数据输出。

输入 http://192.168.56.103:9104/metrics

输出信息类似如下:

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.5395e-05
go_gc_duration_seconds{quantile="0.25"} 3.5372e-05
go_gc_duration_seconds{quantile="0.5"} 3.9393e-05
go_gc_duration_seconds{quantile="0.75"} 5.5068e-05
go_gc_duration_seconds{quantile="1"} 0.062537624
go_gc_duration_seconds_sum 0.453204071
go_gc_duration_seconds_count 2131
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge

5、下载,安装node_exporter

如果只安装mysqld_exporter则无法监控OS相关的数据,所以需要安装node_exporter进行OS监控。

wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

tar xvzf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/.
cd /usr/local && ln -s node_exporter-1.2.2.linux-amd64/ node_exporter

5.1 添加启动服务文件

[root@host01 ~]# vi /etc/systemd/system/node_exporter.service
[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

 5.2 启动node_exporter

service node_exporter start

5.3 测试验证

node_exporter默认使用9100端口,我们可以在浏览器内输入如下地址。查看是否有数据输出。

输入 http://192.168.56.103:9100/metrics

输出结果类似如下:

# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 2.5934e-05
go_gc_duration_seconds{quantile="0.25"} 4.0072e-05
go_gc_duration_seconds{quantile="0.5"} 4.7616e-05
go_gc_duration_seconds{quantile="0.75"} 6.726e-05
go_gc_duration_seconds{quantile="1"} 0.228887598
go_gc_duration_seconds_sum 0.550266258
go_gc_duration_seconds_count 793
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge

6、安装prometheus+grafana

 使用版本:

prometheus 2.28

grafana 6.7.6

6.1 安装

下载软件包

wget https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz

6.2 解压并添加软链接

tar xvzf prometheus-2.28.1.linux-amd64.tar.gz -C /usr/local/.
cd /usr/local/
ln -s prometheus-2.28.1.linux-amd64/ prometheus

6.3 增加启动服务

[root@prometheus-server prometheus]# vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
Documentation=Prometheus Monitoring System

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path="data/" \
--storage.tsdb.retention.time=15d \
--web.max-connections=512 \
--web.listen-address=:9090

 6.4 添加mysql监控

vi /usr/local/prometheus/prometheus.yml

scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

  - job_name: 'mysql'
    static_configs:
      - targets: ['192.168.56.103:9104']
        labels:
          instance: mysql_instance1
  - job_name: 'linux'
    static_configs:
      - targets: ['192.168.56.103:9100']
        labels:
          instance: mysql_instance1

6.5 启动prometheus

service prometheus start

6.7 查看prometheus

prometheus默认监控端口

http://192.168.56.140:9090/

点击status->target。如果一切正常,可以看到如下mysql/linux的state为UP

Prometheus 监控MySQL使用grafana展示

7、下载,安装grafana

wget https://dl.grafana.com/oss/release/grafana-6.7.6-1.x86_64.rpm

rpm -ivh grafana-6.7.6-1.x86_64.rpm

7.1 访问grafana

prometheus的展示功能很弱,为了更好的进行图形展示,所以我们需要grafana

输入 http://192.168.56.140:3000/

配置data source为proemtheus的HTTP链接(注意是HTTP,而不是HTTPS)

Prometheus 监控MySQL使用grafana展示

Prometheus 监控MySQL使用grafana展示

 7.2导入mysql监控模板

Prometheus 监控MySQL使用grafana展示

grafana数据的展示是通过模板实现的。grafana网站上面有很多共享的模板,你可以自行探索。

本例模板,我是从如下链接下载的。

https://grafana.com/api/dashboards/9623/revisions/4/download

版本不匹配问题

因为版本不太匹配的原因,完成后有些项目如法正常显示。它使用的版本是grafana5.0版本,我的是6.x版本。

但是这点小问题,难不倒我,我自己修改了一下。就能正常显示了,如下是修改后的JSON文件。

josn_jb51.rar

修改过程

很多时候,很多东西并不完全能拿来即用。我们需要根据自己的需要进行一些修改。

接下来大概花了半个多小时,弄清楚了如何修改了。而后大概又花了两小时,修改完成的相应的项目。

修改过程中,碰到的问题,主要就两类:

   1)grafana 5.x和6.x组件的名称发生了变化。

"Buffer Pool Size of Total RAM"无法正常显示,原因是6.0和5.0组件名不同。

替换 pmm-singlestat-panel  -> singlestat搞定

   2)exporter提取的属性名字发生了变化

我用的是node_exporter-1.2.2,这里面关于OS提取的属性与JSON文件的定义属性名不匹配。

方法是直接在“http://192.168.56.103:9100/metrics”里面搜索新的属性名,替换JSON文件里面的旧的属性名。

例如:

替换 node_memory_MemTotal->node_memory_MemTotal_bytes
替换 node_memory_MemTotal->node_memory_MemTotal_bytes

进行导入

因为我进行了一些修改,你可以import的时候,直接把JSON的内容输入进去。

Prometheus 监控MySQL使用grafana展示

点击Load加载,接下来,选择数据源为prometheus。

Prometheus 监控MySQL使用grafana展示 

7.3 启动sysbench压测工具

开启sysbench工具的目的是通过压测生成有数据变化的图表(不然,没有流量,数据也不会动)。

这里,我从远端压测(在另一台机器host02上运行sysbench)。目的是为了生成网络流量数据。

[root@host02 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --time=9180 --mysql-host=host01 --mysql-port=3306 --mysql-user=dbusr --mysql-password=Xiaopang*803 --mysql-db=db1 --table-size=50000 --tables=15 --threads=15 --report-interval=10 run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 15
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 15 tps: 112.68 qps: 2268.92 (r/w/o: 1589.76/452.30/226.85) lat (ms,95%): 277.21 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 15 tps: 113.91 qps: 2282.81 (r/w/o: 1598.47/456.52/227.81) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 15 tps: 109.80 qps: 2192.95 (r/w/o: 1536.66/436.69/219.59) lat (ms,95%): 240.02 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 15 tps: 112.70 qps: 2265.36 (r/w/o: 1583.17/456.79/225.40) lat (ms,95%): 193.38 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 15 tps: 101.00 qps: 2013.42 (r/w/o: 1413.32/398.10/202.00) lat (ms,95%): 325.98 err/s: 0.00 reconn/s: 0.00

7.4查看grafana,完成后效果

这里只贴出了部分图表。

Prometheus 监控MySQL使用grafana展示

到此这篇关于Prometheus MySQL监控使用grafana展示的文章就介绍到这了,更多相关 MySQL grafana内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
详解Mysql 函数调用优化
Apr 07 MySQL
MySQL8.0.24版本Release Note的一些改进点
Apr 22 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MySQL中distinct和count(*)的使用方法比较
May 26 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
MySQL修改默认引擎和字符集详情
Sep 25 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
mysql分组后合并显示一个字段的多条数据方式
Jan 22 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
MySQL 计算连续登录天数
May 11 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 #MySQL
mysql 索引合并的使用
Aug 30 #MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 #MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 #MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 #MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 #MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 #MySQL
You might like
cakephp常见知识点汇总
2017/02/24 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
javascript闭包入门示例
2014/04/30 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
django模板语法学习之include示例详解
2017/12/17 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
用django设置session过期时间的方法解析
2019/08/05 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
爱之链教学反思
2014/04/30 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年司法局工作总结
2015/05/22 职场文书
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫