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 kill不掉线程的原因
May 07 MySQL
52条SQL语句教你性能优化
May 25 MySQL
Mysql 用户权限管理实现
May 25 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
解析MySQL binlog
Jun 11 MySQL
Unity连接MySQL并读取表格数据的实现代码
Jun 20 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
Mar 17 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
mysql的Buffer Pool存储及原理
Apr 02 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL事务的隔离级别详情
Jul 15 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
PHP中的float类型使用说明
2010/07/27 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
php如何获取Http请求
2020/04/30 PHP
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
详解Django中Request对象的相关用法
2015/07/17 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
Python统计单词出现的次数
2018/04/04 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python中pickle模块浅析
2020/12/29 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
四好少年事迹材料
2014/01/12 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
同学会邀请函模板
2015/01/30 职场文书
2015年度保密工作总结
2015/04/24 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
学校财务管理制度
2015/08/04 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
 python中的元类metaclass详情
2022/05/30 Python