一、什么是prometheus
Prometheus 是一个开源的监控和报警系统(时间序列数据库)。
它专为监控动态服务和现代化基础设施而设计,具有以下显著特点:
1、主动式采集:通过配置 exporter 或者直接使用内置的采集方式,主动从目标系统获取监控指标数据。
2、灵活的指标定义:支持各种类型的指标,如计数器、仪表盘、直方图等。
3、强大的查询语言:PromQL(Prometheus Query Language)允许用户进行复杂的查询和聚合操作,以便深入分析监控数据。
4、告警机制:可以基于查询结果设置告警规则,当指标达到特定阈值时触发告警。
5、易于集成:能够与多种系统和工具集成,如 Grafana 用于数据可视化。
Prometheus 在云原生环境、微服务架构等领域得到了广泛应用,帮助运维团队有效地监控系统状态,及时发现和解决潜在问题,保障系统的稳定运行。
prometheus架构图:
组件:
组件 | 作用 |
---|---|
Prometheus Server | Prometheus 组件的核心部分,负责实现对监控数据的获取、存储以及查询 |
Exporters | 将监控数据采集的端点通过 HTTP 服务暴露给 Prometheus Server |
Alertmanager | Prometheus Server 中支持基于 PromQL 创建告警规则,若满足规则则产生告警,告警的后续处理流程由 AlertManager 管理 |
Pushgateway | 一个中间件(代理),将内部网络的监控数据主动推送到 Gateway 中,而 Prometheus Server 则以同样 Pull 的方式获取监控数据 |
Prometheus web UI/Grafana/API clients | 数据可视化工具 |
Service Discovery | 服务发现 |
二、安装prometheus
我们这里采用二进制源码安装
上传下载的源码包到linux服务器,解压源码包并且修改解压后的压缩包名字prometheus
mkdir /prom
cd /prom
tar xf prometheus-2.43.0.linux-amd64.tar.gz
mv prometheus-2.43.0.linux-amd64 prometheus
永久修改PATH变量
echo 'PATH=/prom/prometheus:$PATH' >>/etc/profile
把prometheus做成一个服务来进行管理,非常方便日后维护和使用
vim /usr/lib/systemd/system/prometheus.service
重新加载systemd相关的服务,识别prometheus服务的配置文件
systemctl daemon-reload
启动prometheus服务,启动后可以通过 使用"ps aux|grep prometheus"或者使用"netstat -anplut|grep prometheus"来查看prometheus是否启动成功
systemctl restart prometheus
设置开机启动
systemctl enable prometheus
在浏览器中输入安装prometheus的服务器的ip地址并且接上端口号(占用的是9090端口号)就可以访问prometheus的web server
修改/prom/prometheus/prometheus.yml
三、安装exporter
在整个web集群节点服务器(任何一台linux系统,mysql、web1等)上安装exporter程序
exporter 是Prometheus的客户端的数据采集工具
node-exporter 是专门用来采集节点服务器的通用性能指标(cpu、内存、磁盘、网速等)
使用ansible将node_exporter软件源码包发送给节点服务器
ansible all -m copy -a 'src=/root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/'
编写在其他机器上安装node_exporter的脚本
vim install_node_exporter.sh
#!/bin/bash
tar xf /root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz -C /
cd /
mv node_exporter-1.4.0-rc.0.linux-amd64/ node_exporter
cd /node_exporter/
echo 'PATH=/node_exporter/:$PATH' >>/etc/profile
#生成nodeexporter.service文件
cat >/usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
[Service]
ExecStart=/node_exporter/node_exporter --web.listen-address 0.0.0.0:9090
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#让systemd进程识别node_exporter服务
systemctl daemon-reload
#设置开机启动
systemctl enable node_exporter
#启动node_exporter
systemctl start node_exporter
在ansible服务器上执行安装node_exporter的脚本
ansible all -m script -a "/prom/install_node_exporter.sh"
- shell模块和script模块的区别
shell模块执行的脚本,需要提前copy到其他的机器上
script模块不需要提前将脚本传输到其他机器,直接在ansible机器上执行就可以,会自动先推送文件到执行脚本的机器上,执行完后删除脚本
在其他的服务器上查看是否安装node_exporter成功
四、添加被监控的服务器
在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里
vim prometheus.yml
由于.yml文件是通过缩进来表示层级关系,所以在此处添加配置时,一定要注意文本格式,我建议直接在命令行模式使用yy复制后在用p进行复制,再进行数据的修改,这样以免出错
重启Prometheus服务
service prometheus restart
在浏览器访问prometheus,点击Status模块的Targets