容器|装在笔记本里的私有云环境:监控篇( 三 )


上面的内容中,配置了一个基本能开箱即用的 Prometheus 服务,我们将接收到的数据默认存储一年,并将采集的数据直接持久化到本机中,相对于配置文件的 data 目录中。将上面的内容保存为 docker-compose.yml 后,我们来继续编写它的配置文件。
global:
# 监控自身状态scrape_interval:15s# 报警评估周期# 可以关联阅读,理解报警的生命周期# https://pracucci.com/prometheus-understanding-the-delays-on-alerting.htmlevaluation_interval: 15s# 和其他组件时通讯时使用,起个名字区别不同的数据来源external_labels:monitor: 'docker-prometheus'# 监控规则文件列表rule_files:- "alert.rules"# 配置要与 Prometheus 通信(被抓取)的服务接口scrape_configs:- job_name: 'nodeexporter'scrape_interval: 5sstatic_configs:- targets: ['nodeexporter:9100']- job_name: 'cadvisor'scrape_interval: 5sstatic_configs:- targets: ['cadvisor:8080']- job_name: 'prometheus'scrape_interval: 10sstatic_configs:- targets: ['localhost:9090']- job_name: 'pushgateway'scrape_interval: 10shonor_labels: truestatic_configs:- targets: ['pushgateway:9091']# 配置监控报警服务alerting:alertmanagers:- scheme: httpstatic_configs:- targets:- 'alertmanager:9093
上面的配置中,出现了许多不同的服务以及这些服务的具体访问端口,未来我们可以针对这些服务具体部署的位置进行调整,为了跑通第一个服务,我们目前先不动它。将上面的内容保存到 config/prometheus.yml,我们继续编写监控规则文件。如果能想阅读完整的配置规范,可以阅读这里。
参考官方配置,我们不难写出类似下面的监控配置:
groups:
- name: examplerules:- alert: service_downexpr: up == 0for: 1mlabels:severity: criticalannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."- alert: high_loadexpr: node_load1 > 0.5for: 1mlabels:severity: criticalannotations:summary: "Instance {{ $labels.instance }} under high load"description: "{{ $labels.instance }} of job {{ $labels.job }} is under high load."
这里入门的模版,我推荐使用包含了容器基础模版的开源项目 stefanprodan/dockprom 并在它的基础上进行调整。将内容保存到 config/alert.rules 后,使用 docker-compose logs -f启动服务,看到类似下面的日志后,就说明 应用启动成功啦。
prometheus| level=info ts=2021-10-29T13:08:11.712Z caller=main.go:438 msg="Starting Prometheus" version="(version=2.30.3, branch=HEAD, revision=f29caccc42557f6a8ec30ea9b3c8c089391bd5df)"
...prometheus| level=info ts=2021-10-29T13:08:11.724Z caller=main.go:794 msg="Server is ready to receive web requests.服务启动之后,在浏览器中访问http://monitor.lab.com:9090/ 就能看到 Prometheus 的默认界面了,不过因为我们目前什么数据都没有上报,所以就先不进行查询啦。
容器|装在笔记本里的私有云环境:监控篇
文章插图

系统采样组件:Node Exporter一般情况下,我们需要采集的监控数据,除了应用状态之外,还有服务器硬件的基础状态,Prometheus 应用默认不具备检测和采样操作系统状态的能力。所以官方推出了 Node Exporter 这个应用组件,以及一个简单的入门文档。
虽然官方出于容器和主机需要充分隔离的思考,不推荐将 Node Exporter 使用容器部署,但是实际上,我们只需要将系统内的文件以只读方式映射到容器内,就可以使用“绿色无污染”的容器方式来运行这个服务了。
version: "3"services:nodeexporter:image: prom/node-exporter:v1.2.2container_name: nodeexportervolumes:- /proc:/host/proc:ro- /sys:/host/sys:ro- /:/rootfs:rocommand:- "--path.procfs=/host/proc"- "--path.rootfs=/rootfs"- "--path.sysfs=/host/sys"- "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"restart: alwaysexpose:- 9100ports:- 9100:9100networks:- monitorlogging:driver: "json-file"options:max-size: "1m"networks:monitor:external: true