一、体系架构(了解)
数据采集流程
说白了就是采集数据->计算是否超过阈值->发起警告
Prometheus查询界面如下
1.报警简介
展现形式:短信,邮件,电话,通讯软件。
阈值(Trigger Value),如达到阈值可以触发预警。
Pagerduty拥有 短信、电话、邮件所有报警机制,还有必要的运维值班管理制度和报警升级等等拓展功能。
2.优势
-
监控精细程度绝对第一,精确到1-5秒的采集精度
-
集群部署速度 监控脚本的制作 非常速度 大大减少监控搭建的时间成本
-
周边插件丰富
-
本身基于数学模型,大量实用函数可以实现复杂的业务逻辑监控(QPS曲线,弯曲 凸起 下跌的比例等模糊概念)
-
可以嵌入很多开源工具
-
图形美观高大上
3.缺点
-
因其采集精度,如果集群数量太大,那么单点的监控有性能瓶颈。
-
学习成本太大,数学命令行复杂。
-
磁盘消耗较大,具体根据监控集群量 和 监控项的多少。
-
需要有一定的数学头脑。
4.基本原理
通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。
其大概的工作流程是:
1、Prometheus server 定期从配置好的 jobs 或者 exporters 中拉metrics指标,或者接收来自Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
2、Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
3、Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
4、在Grafana图形界面中,可视化查看采集数据。
二、安装
1.Compose安装
version: '3.8'
volumes:
prometheus_data: {}
grafana_data: {}
networks:
monitoring:
driver: bridge
services:
prometheus:
image: prom/prometheus
container_name: prometheus
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./prometheus/:/etc/prometheus/
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
#热加载配置
- '--web.enable-lifecycle'
#api配置
#- '--web.enable-admin-api'
#历史数据最大保留时间,默认15天
- '--storage.tsdb.retention.time=30d'
networks:
- monitoring
links:
- alertmanager
- cadvisor
- node_exporter
expose:
- '9090'
ports:
- 9090:9090
depends_on:
- cadvisor
alertmanager:
image: prom/alertmanager
container_name: alertmanager
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./alertmanager/:/etc/alertmanager/
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
networks:
- monitoring
expose:
- '9093'
ports:
- 9093:9093
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- monitoring
expose:
- 8080
ports:
- 8080:8080
node_exporter:
image: prom/node-exporter
container_name: node-exporter
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker)($$|/)'
networks:
- monitoring
ports:
- '9100:9100'
grafana:
image: grafana/grafana:9.4.3
container_name: grafana
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- grafana_data:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
env_file:
- ./grafana/config.monitoring
networks:
- monitoring
links:
- prometheus
ports:
- 3000:3000
depends_on:
- prometheus
下面是我的安装目录。
2.访问地址
3.通过Grafana展示Prometheus
直接保存。
访问grafana官网,找到Node Exporter Full
Grafana dashboards | Grafana Labs
1806
4.自定义指令
接下来我们会频繁使用到这两个命令,可以取个别名。不取也行。
docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml
curl -X POST http://localhost:9090/-/reload
#进入文件
vim ~/.bashrc
#修改
#Prometheus的检查yml配置文件的指令
alias check_prometheus_yml='docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml'
#开启热重载后重新加载配置文件的指令
alias reload_prometheus='curl -X POST http://localhost:9090/-/reload'
#生效
source ~/.bashrc