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:主要是负责采集物理机、中间件的信息

TOC

★准备工作★

需要四台服务器实验
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.001
实现所有服务器时间同步
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 界面(如下图所示)
prometheus.002

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的监控指标(如下图所示)
prometheus.003

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的监控指标(如下图所示)
prometheus.004

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)的状态(如下图所示)
prometheus.005
还可以选择指标项来查看各种监控项的参数和图形化界面比如下面例子
Clinet(192.168.31.102)的内存使用情况:
prometheus.006
mysqld(192.168.31.103)的mysql连接数:
prometheus.007
上面只是简单举例可以看出图形画面非常简陋,需要更精美的图形化界面就需要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
prometheus.008
初次登录会让修改新密码,也可以跳过(如下图所示)
prometheus.009
进入之后Add data source添加资源,选择Prometheus(如下图所示)
prometheus.010
然后填写Prometheus的api地址端口号(如下图所示)
prometheus.011
导入想要使用的模板,来展示Prometheus收集到的数据(如下图所示)
prometheus.012
这里输入模板的id号,也可以上传json文件方式,大家可以去查看一些好用模板的id(如下图所示)
prometheus.013
这里输入一个名字,就是创建一个Dashboard的名字(如下图所示)
prometheus.014
这个模板就可以看到Client(192.168.31.102)的监控数据了
内存、CPU、网络状况数字展示:
prometheus.015
内存、CPU、网络状况图形展示:
prometheus.016
mysqld(192.168.31.103)服务器也一样的步骤(这里使用的7362模板展示)
prometheus.017

推荐Grafana好用的模板

Linux服务器
9276(效果如下):
prometheus.018
8919(效果如下):
prometheus.019