
搭建Prometheus + Alertmanager + Grafana 学习笔记

前言
Zabbix存在性能瓶颈、界面不友好、大量脏数据等问题而且在监控容器化应用方面存在一定的局限性。
尝试使用thanos+prometheus+grafana作为运维监控架构
架构图
Prometheus 的告警规则擅长确定_当前_出现了什么问题,但它们不是一个完整的通知解决方案。需要另一层来添加汇总、通知速率限制、静默和告警依赖关系,以补充简单的告警定义。在 Prometheus 的生态系统中,Alertmanager 承担了此角色。
Detail
Prometheus PL: go
两种选用的搭建version:,最后选择了LTS作为实验环境
- 2.53.2 LTS
- 3.0.0 latest
Prometheus 安装
docker安装
拉取2.53.2 LTS镜像
1 | docker pull prom/prometheus:v2.53.2 |
使用命名卷,存储持久化数据
将docker用于生产部署Prometheus时,偏好命名卷(named volume)
- 比绑定挂载(bind mounts) 更容易备份或迁移(跨平台)
- 与容器解耦
- 性能更优
- 适用于永久存储数据的场景(对于非持久化存储,使用tmpfs)
- 容器间可共享
docker中关于卷的命令:
1 | # CRUD |
创建Prometheus
1 | # 创建卷存储 |
docker操作小tips
1 | # 查看进程 |
内部细节
默认启动的dockerfile
1 | ARG ARCH="amd64" |
docker inspect的回显
1 | [ |
镜像内部的prometheus.yml
可以作为自己编写配置文件的参考,可以跳过,后面会详细写一下配置文件。
配置文件是yaml格式,对于缩进很敏感,一定要好好看文档,不然就会浪费时间(
1 | # my global config |
源码安装
兜兜转转还是源码
下了包直接解压启动就行
系统服务脚本
包管理器安装的软件,其unit文件路径一般为/usr/lib/systemd/system/xxx.service
用户自己写的服务unit文件,路径一般为/etc/systemd/system/xxx.service
,其优先级比上面路径里的同名文件高。
1 | [Unit] |
添加监控目标target
需要两步
- 在Prometheus配置文件中添加target
- 在客户端安装并启动node-exporter
1. 添加target
在scrape_configs
中添加target
1 | scrape_configs: |
2. 安装node-exporter
- 官网拉包,本地scp传给宿主机;或者直接wget(虚拟机有性能损失)
- 解压,运行binary文件即可(一般都有exec权限)
PS. 没装DE的server cli界面,通过alt切换tty操作
配置node-exporter unit服务
编写/etc/systemd/system/node_exporter.service
1 | [Unit] |
1 | # 重载systemd服务 |
问题:局域网ip变化
服务跑起来没问题
1 | sudo systemctl status node_exporter.service |
问题出在,每次重启集群机器,局域网ip变化。
issue1
ip变化问题已解决,修改网卡配置文件,配置静态ip
成因是dhcp ip池的随机分配
issue2
机子是ubuntu server,在我修改网卡配置文件,设定静态ip后,机器重启后ip会变化。经查看,发现网卡的配置文件会回滚。原因如下:
网卡的配置文件是cloud的init文件,定期从云端拉取配置文件,修改过后网卡配置文件会恢复原状。解决办法:
在/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
文件中写入network: {config: disable}
在偷懒想要命令一步到位的时候,发现个小issue,记录一下。
为什么不能用以下命令一步到位?
1 | sudo echo "network: {config: disable}" >> /etc/cloud/cloud.cfg.d/99-disable-network`-config.cfg |
命令行中执行输出重定向,shell的处理机制是先打开要写入的文件,文件打开成功后再执行写入操作。
即使您在命令前使用了 sudo
,Shell 在执行重定向时仍然是以普通用户的身份尝试打开文件。
可以使用管道符号+tee实现
1 | echo "network: {config: disable}" | sudo tee -a /etc/cloud/cloud.cfg.d/99-disable-network`-config.cfg |
配置后开机速度变慢,开机的时候会wait for network configuration。
安装grafana
apt 安装
1 | sudo apt-get install -y adduser libfontconfig1 musl |
系统服务设置
因为是apt安装,不是自己下载源码安装,所以不需要手写unit文件。
仅需配置systemctl
服务
1 | sudo systemctl daemon-reload grafana-server |
安装Alertmanager
目前装完的有Prometheus、node-exporter、Grafana,分别作用是报警、客户端监控、数据可视化。
现在安装的alertmanager是报警管理器,负责汇总、通知速率限制、静默和告警依赖关系,以补充简单的告警定义。
安装
安装是从源码,不赘述。
systemd服务文件:
1 | [Unit] |
配置文件服务不启动的时候,仔细看日志,上面我注释掉的那行,就是原因(
alertmanager没有--storage.tsdb.path
flag,Prometheus有。
有问题仔细查日志命令即可:
1 | journalctl --unit=alertmanager.service |
配置文件
alertmanager是配置文件与Prometheus配置文件是两个东西。
首先要在prometheus.yml中添加以下内容,以启动alertmanager.yml
1 | # Alertmanager configuration |
接着再编写alertmanager.yml
1 | global: |
手动拉高cpu测试
1 | cat /dev/zero>/dev/null |
设置的邮件报警可以收到邮件
也可以在Prometheus的Web UI中看到pending和firing
查询target数据
通过node_exporter服务进行数据的收集,然后通过prometheus内置的PromQL语句进行组合查询,对于每一个公式,都可以在Prometheus 的WEB UI界面测试查询。
收集系统CPU监控信息
1
2# CPU使用率
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)收集系统内存监控信息
1
2
3
4
5# 内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes ))* 100
# 可用内存(单位:M)
node_memory_MemAvailable_bytes / 1024 / 1024收集系统磁盘监控信息
1 | # 磁盘总大小(单位: G) |
- 收集系统网络监控信息
1 | # 入网流量 (指定某一个网卡) |
参考
- Title: 搭建Prometheus + Alertmanager + Grafana 学习笔记
- Author: Aoi Komiya
- Created at: 2024-11-23 11:46:25
- Updated at: 2024-11-23 12:17:00
- Link: https://blog.komiya.monster/2024/11/23/prometheus/
- License: This work is licensed under CC BY-NC-SA 4.0.