Prometheus+Grafana监控
什么是Prometheus?
Prometheus又名普罗米修斯,是一套开源的监控&报警&时间序列数据库的组合,由 SoundCloud 公司开发的监控系统 Prometheus非常适合Docker、Mesos、Kubernetes环境的监控Prometheus特点
- 易管理: Prometheus核心部分只有一个单独的二进制文件,目录单一,不存在任何的第三方依赖,比如:数据和缓存
- 强大的查询语言 PromQL: Prometheus 内置一个强大的数据查询语言 PromQL,通过 PromQL 可以实现对监控数据的查询、聚合
- 高效性: Prometheus 可以高效的处理大量监控任务产生的大量数据
- 可扩展性: Prometheus 支持联邦集群,可以让多个 Prometheus 实例产生一个逻辑集群,分担单实例的压力
- 易集成: 目前官网提供了多种语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成
- 可视化: Prometheus自带一个 UI,通过这个 UI 可以方便对数据进行查询和图形化展示,同时还可以对接 Grafana 可视化工具展示精美监控指标
Prometheus主要组成部分:
- Prometheus:主要是负责存储、抓取、聚合、查询方面
- Alertemanager:主要是负责实现报警功能
- Pushgateway:主要是实现接收有 Client-push 过来的指标数据,在指定的时间间隔,有主程序来抓取
- *_exporter:主要是负责采集物理机、中间件的信息
★准备工作★
需要四台服务器实验
Prometheus:192.168.31.101
Client:192.168.31.102
mysql:192.168.31.103
Granfana:192.168.31.104
安装包详情:
prometheus-2.37.0.linux-amd64.tar.gz
influxdb-1.8.4.x86_64.rpm
node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
mysqld_exporter-0.14.0.linux-amd64.tar.gz
grafana-8.3.3-1.x86_64.rpm
安装包下载地址:
Prometheus相关下载地址:https://prometheus.io/download/
InfluxDB下载地址:https://dl.influxdata.com/influxdb/releases/influxdb-1.8.4.x86_64.rpm
Granfana下载地址:https://dl.grafana.com/oss/release/grafana-8.3.3-1.x86_64.rpm
注意:InfluxDB建议用influxdb-1.x.x版本,因为influxdb-2.x.x版本的变动很大
环境架构(如下图所示)

实现所有服务器时间同步
Prometheus(192.168.31.101):
yum -y install ntp
systemctl start ntpd
ntpdate time1.aliyun.com
192.168.31.102、192.168.31.103、192.168.31.104:
yum -y install ntpdate
ntpdate 192.168.31.101
一、安装配置Prometheus
1.安装Prometheus
下载安装Prometheus
tar zxf prometheus-2.37.0.linux-amd64.tar.gz
mv prometheus-2.37.0.linux-amd64 /usr/local/prometheus
创建用户并授权prometheus目录
useradd -s /sbin/nologin prometheus
chown -R prometheus:prometheus /usr/local/prometheus
配置prometheus服务管理
vim /usr/lib/systemd/system/prometheus.service
--------------------------------
[Unit]
Description=prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target
使服务生效加入systemctl,启动服务
systemctl daemon-reload
systemctl enable --now prometheus
启动之后就可以访问9090端口也就是192.168.31.101:9090来访问Prometheus自带的 UI 界面(如下图所示)

2.后端存储配置:influxdb
下载安装influxdb
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.4.x86_64.rpm
yum -y localinstall influxdb-1.8.4.x86_64.rpm
cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
systemctl enable --now influxdb
登录influxdb验证
influx
[root@feili12138 ~]# influx
Connected to http://localhost:8086 version 1.8.4
InfluxDB shell version: 1.8.4
>
创建数据库支持Prometheus
> create database prometheus;
> show databases;
name: databases
name
----
_internal
prometheus
配置Prometheus配置文件最后面添加influxdb信息
vim /usr/local/prometheus/prometheus.yml
-----------------------------------------
remote_write:
- url: "http://localhost:8086/api/v1/prom/write?db=prometheus"
remote_read:
- url: "http://localhost:8086/api/v1/prom/read?db=prometheus"
如果设置了influxdb用户和密码配置如下:
remote_write:
- url: "http://localhost:8086/api/v1/prom/write?db=prometheus&u=username&p=password"
remote_read:
- url: "http://localhost:8086/api/v1/prom/read?db=prometheus&u=username&p=password"
u=后面跟用户名,p=后面跟密码
重启prometheus服务
systemctl restart prometheus
二、安装Exporter插件实现监控
1.安装Node_Exporter
下载安装node_exporter
tar zxf node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
mv node_exporter-1.4.0-rc.0.linux-amd64 /usr/local/node
创建用户并授权node目录
useradd -s /sbin/nologin prometheus
chown -R prometheus:prometheus /usr/local/node
配置node_exporter服务管理
vim /usr/lib/systemd/system/node_exporter.service
--------------------------------------
[Unit]
Description=node_exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/node/node_exporter \
--web.listen-address=:9191 \
--collector.systemd \
--collector.systemd.unit-whitelist=(sshd|nginx).service \
--collector.processes
[Install]
WantedBy=multi-user.target
使服务生效加入systemctl,启动服务
systemctl daemon-reload
systemctl enable --now node_exporter
通过9191端口访问web页面也就是192.168.31.102:9191访问node的监控指标(如下图所示)

2.安装Mysqld_Exporter
下载安装mysqld_exporter
tar zxf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
编辑mysql用户配置文件
vim /usr/local/mysqld_exporter/mysql.cnf
---------------------------------------
[client]
user=prometheus
password=prometheus
登录mysql创建mysqld_exporter使用的用户和密码
mysql> grant process, replication client, select on *.* to 'prometheus'@'localhost' identified by 'prometheus';
mysql> flush privileges;
创建用户并授权mysqld_exporter目录
useradd -s /sbin/nologin prometheus
chown -R prometheus:prometheus /usr/local/mysqld_exporter
配置mysqld_exporter服务管理
vim /usr/lib/systemd/system/mysqld_exporter.service
----------------------------------------
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/usr/local/mysqld_exporter/mysql.cnf \
--collect.global_status \
--collect.auto_increment.columns \
--collect.info_schema.processlist \
--collect.binlog_size \
--collect.info_schema.tablestats \
--collect.global_variables \
--collect.info_schema.innodb_metrics \
--collect.info_schema.query_response_time \
--collect.info_schema.userstats \
--collect.info_schema.tables \
--collect.perf_schema.tablelocks \
--collect.perf_schema.file_events \
--collect.perf_schema.eventswaits \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.tableiowaits \
--collect.slave_status \
--web.listen-address=0.0.0.0:9104
[Install]
WantedBy=multi-user.target
使服务生效加入systemctl,启动服务
systemctl daemon-reload
systemctl enable --now node_exporter
通过9104端口访问web页面也就是192.168.31.103:9104访问mysqld的监控指标(如下图所示)

3.实现Prometheus监控CLient
修改Prometheus配置文件添加监控机
vim /usr/local/prometheus/prometheus.yml
---------------------------------------
- job_name: "Client"
static_configs:
- targets:
- "192.168.31.102:9191"
- job_name: "mysqld"
static_configs:
- targets:
- "192.168.31.103:9104"
重启prometheus服务
systemctl restart prometheus
然后访问192.168.31.101:9090查看web页面
这里可以看到Client(192.168.31.102)和mysqld(192.168.31.103)的状态(如下图所示)

还可以选择指标项来查看各种监控项的参数和图形化界面比如下面例子
Clinet(192.168.31.102)的内存使用情况:

mysqld(192.168.31.103)的mysql连接数:

上面只是简单举例可以看出图形画面非常简陋,需要更精美的图形化界面就需要Grafana来实现了
三、Grafana实现可视化界面
安装配置Grafana展示
下载安装Grafana
yum -y install grafana-8.3.3-1.x86_64.rpm
systemctl enable --now grafana-server
Grafana默认端口是3000可以通过配置/etc/grafana/grafana.ini文件修改访问路径和端口
访问3000端口web页面也就是192.168.31.104:3000,初始账号和密码都是admin

初次登录会让修改新密码,也可以跳过(如下图所示)

进入之后Add data source添加资源,选择Prometheus(如下图所示)

然后填写Prometheus的api地址端口号(如下图所示)

导入想要使用的模板,来展示Prometheus收集到的数据(如下图所示)

这里输入模板的id号,也可以上传json文件方式,大家可以去查看一些好用模板的id(如下图所示)

这里输入一个名字,就是创建一个Dashboard的名字(如下图所示)

这个模板就可以看到Client(192.168.31.102)的监控数据了
内存、CPU、网络状况数字展示:

内存、CPU、网络状况图形展示:

mysqld(192.168.31.103)服务器也一样的步骤(这里使用的7362模板展示)

推荐Grafana好用的模板
Linux服务器
9276(效果如下):

8919(效果如下):
