一、prometheus简介
Prometheus是一套开源的系统监控报警框架。它以给定的时间间隔从已配置的目标收集指标,评估规则表达式,显示结果,并在发现某些情况为真时触发警报。
作为新一代的监控框架,Prometheus具有以下特点 :
强大的多维度数据模型:
(1)时间序列数据通过metric名和键值对来区分;
(2)所有的metrics都可以设置任意的多维标签;
(3)数据模型更随意,,不需要刻意设置为以点分隔的字符串;
(4)可以对数据模型进行聚合、切割和切片操作;
(5)支持双精度浮点类型,标签可以设为全unicode(统一码);
灵活、强大的查询语句:在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作;
易于管理:不依赖于分布式存储;
使用 pull 模式采集时间序列数据;
可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端;
可以通过服务发现或者静态配置去获取监控的 targets;
有多种可视化图形界面;
易于伸缩。;
二、Prometheus组成及架构
Prometheus包含了许多组件,其中许多组件都是可选的,常用的组件有:
Prometheus Server:用于收集和存储时间序列数据;
Client Library:客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server;
Push Gateway:主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向Prometheus server 端推送它们的 metrics;
Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus;
Alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对端的接受方式,发出报警;
…………等等,还有好多,这里就列出几个常用的组件!
Prometheus官方文档中的架构图:
官方的架构图中,主要模块块包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及图形界面;
大致的工作流程是:
(1)Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics;
(2)Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报;
(3)Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警;
(4)在图形界面中,可视化采集数据;
三、部署prometheus
服务器版本 | 主机名 | ip |
---|---|---|
Centos 7.6 | Zabbix | 192.168.168.101 |
Centos 7.6 | Prometheus | 192.168.167.35 |
官方下载地址
Prometheus下载地址: https://prometheus.io/download/
node_exporter下载地址 : https://prometheus.io/download/
Grafana下载地址: https://grafana.com/grafana/download
1、服务端部署Prometheus
#安装wget命令
yum install -y wget
#下载Prometheus安装包
mkdir -p /data/soft
cd /data/soft
wget https://github.com/prometheus/prometheus/releases/download/v2.34.0-rc.0/prometheus-2.34.0-rc.0.linux-amd64.tar.gz
#解压安装包
tar xf prometheus-2.34.0-rc.0.linux-amd64.tar.gz -C /opt/
ln -s /opt/prometheus-2.34.0-rc.0.linux-amd64 prometheus
#注:官网提供的是二进制版,解压就能用,不需要编译
#创建用户/数据目录、授权
useradd -s /sbin/nologin -M prometheus
mkdir /data/prometheus -p
chown -R prometheus. /opt/prometheus*
添加systemctl启动方式
vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target
#设置开机自启
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
打开 http://localhost:9090/graph (要找开对应端口的防火墙)
Status-Targets 查看 Endpoint 对应的 State 是 UP ,即代表成功 ,如下图:
2、客户端安装Node Exporter采集主机运行数据
安装wget命令
yum install -y wget
下载Prometheus安装包
mkdir -p /data/soft
cd /data/soft
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
解压安装包
tar xf node_exporter-1.3.1.linux-amd64.tar.gz -C /opt/
ln -s /opt/node_exporter-1.3.1.linux-amd64 /opt/node_exporter
将node_exporter加入系统服务
vi /usr/lib/systemd/system/node_exporter.service
#添加内容:
[Unit]
Description=node_exporter
[Service]
ExecStart=/opt/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
#设置开机自启
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter
#查看日志
tailf /opt/node_exporter/nohup.out
3、服务端配置监控客户端
#修改服务端配置文件
vim /opt/prometheus/prometheus.yml
#末尾添加如下内容:
- job_name: 'Zabbix'
metrics_path: '/metrics'
static_configs:
- targets: ['192.168.168.101:9100']
#如图:
注:YML配置文件格式需严格对齐
:wq
保存退出
重启Prometheus服务
systemctl restart prometheus
打开prometheus页面查看是不是有对应的数据了
http://localhost:9090/graph
四、Grafana安装部署
请手动移至Grafana搭建
五、Grafana添加Prometheus数据(图例)
1、Grafana添加Prometheus数据源
2、配置Prometheus数据源
3、创建仪表盘
4、配置仪表盘
导入后就会出现如下截图
六、添加认证方式
刚才我们直接通过http就可以访问到数据采集接口上的数据。没有安全性。我们可以加入http认证实现输入密码才能访问接口。
分两步。
1.客户端在node_exporter创建配置文件设置用户名密码。
2.prometheus在配置文件中写入用户名密码。
1、创建一个用于接口访问的用户,如prometheus,并且加密密码。
useradd admin
echo "prometheus" | passwd --stdin admin
yum install httpd-tools –y
htpasswd -nBC 12 '' | tr -d ':\n'
#输出
$2y$12$XpIdYSwiFcy5wr8bUfbcZeD0AxpMrKxuXMKm2G8c1OhVhdg50b8wa
#2、客户端在node_exporter创建配置文件设置用户名密码
node_exporter根目录下添加配置文件
vim /opt/node_exporter/config.yml
#添加内容
basic_auth_users:
admin: $2y$12$XpIdYSwiFcy5wr8bUfbcZeD0AxpMrKxuXMKm2G8c1OhVhdg50b8wa
#注: 用户名/加密密码
#node_exporter系统服务文件指定config.yml的位置
[Unit]
Description=node_exporter
[Service]
ExecStart=/opt/node_exporter/node_exporter --web.config=/opt/node_exporter/config.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
#添加内容如图:
重载服务。
systemctl daemon-reload && systemctl reload node_exporter
刷新接口页面发现需要登陆 并且监控那边也挂了。
3、服务端Prometheus配置文件配置用户名密码重载即可
修改服务端配置文件
vim /opt/prometheus/prometheus.yml
#修改添加内容:
- job_name: 'Zabbix'
metrics_path: '/metrics'
basic_auth:
username: admin
password: prometheus
static_configs:
- targets: ['192.168.168.101:9100']
#如图:
重启Prometheus
systemctl restart prometheus
重启后恢复正常