本文用来介绍如何基于开源监控软件Prometheus打造一套监控解决方案。
Prometheus 是一个始于2012年由 SoundCloud 开发的开源监控解决方案,后来成为 Cloud Native Computing Foundation (CNCF) 下的一个毕业项目。作为一款流行的时间序列数据库和监控工具集,Prometheus 设计之初就考虑了云原生环境的需求,能够高效地收集、存储和分析海量实时监控数据。
核心特性与原理
Alertmanager 是 Prometheus 生态系统中一个关键组件,专门负责管理和路由警报(alerts)。Prometheus Server 负责根据用户定义的规则生成警报,而 Alertmanager 则负责后续的处理工作,包括但不限于以下核心功能:
Grafana 是一款强大的开源数据可视化和分析平台,主要设计用于实时监测和探索大规模时间序列数据。它不仅能够从多种数据源获取数据,还能以直观且高度可定制的方式呈现这些数据,通过构建丰富的仪表盘(dashboards)实现数据的可视化展现。
以下是Grafana的主要特性摘要:
Prometheus Alert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus,Zabbix,日志系统Graylog和数据可视化系统Grafana发出的预警消息,支持钉钉,微信,华为云短信,腾讯云短信,腾讯云电话,阿里云短信,阿里云电话等,可以看出prometheusalert相比和alertmanager内置的报警媒介相比支持的更全面,并且配置和调试更方便,prometheusalert 并不能取代alertmanager,而是要作为webhoook与alertmanager结合使用。
Node Exporter 是 Prometheus 生态系统中的一个重要组成部分,它是一个用于从 Linux 系统收集硬件和操作系统级别的指标数据的工具。Node Exporter 通过监听特定的 HTTP 端口(默认为 9100),对外暴露这些指标数据,供 Prometheus Server 通过 Pull 模式主动抓取。
mysql_exporter 是 Prometheus 生态系统中的一款专用Exporter,它的作用是连接到 MySQL 或 MariaDB 数据库,从中提取关键的性能和运行状态指标,并将这些指标以 Prometheus 可识别的格式暴露出来。这样,Prometheus Server 就可以周期性地拉取这些指标,用于监控和报警。
Blackbox Exporter 是一个具体的黑盒监控工具,它是 Prometheus 生态系统中的一个组件,由 Prometheus 社区官方维护。这个工具允许用户通过各种协议对远程端点进行健康检查和性能度量,包括但不限于:
通过配置 Blackbox Exporter,您可以定义一组探测模块和参数,定期执行这些探测,并将结果暴露为 Prometheus 可读的指标数据。这样,Prometheus 服务器就可以抓取这些指标,进一步整合到告警规则中,并通过 Alertmanager 发送告警通知,或者通过 Grafana 等可视化工具展示实时监控视图,帮助运维人员快速发现并定位问题。
Docker 是一款开源的应用容器引擎,它诞生于2013年,由 DotCloud 公司(后改名为 Docker Inc.)开发并推广。Docker 旨在简化应用的打包、部署和运行过程,尤其是在不同的开发、测试和生产环境中,提供一致性的运行环境。
Docker Compose 是 Docker 官方提供的一个工具,用于定义和运行多容器的 Docker 应用程序。它使用 YAML 文件(通常命名为 docker-compose.yml)来配置应用程序的服务、网络和数据卷等组件,通过简洁的声明式语法定义各个容器之间的依赖关系、端口映射、环境变量、网络配置等细节。
使用 Docker Compose 的好处在于,只需一个简单的命令(如 docker-compose up),就能够依据 YAML 文件的配置,一次性创建并启动所有相关的 Docker 容器,而且容器间可以方便地共享资源和通信。此外,Docker Compose 还支持服务的启动、停止、重启、销毁等一系列生命周期管理操作。
Docker Compose 的主要特点包括:
简而言之,Docker Compose 是 Docker 应用部署和管理的强大助手,尤其适合于小型到中型规模的分布式应用,为开发者提供了一个简单易用的容器编排方案,极大地提升了工作效率和应用部署的灵活性。
version: '3'
services:
prometheus:
image: monitor/prometheus:v2.36.2
hostname: "prometheus"
environment:
- TZ=Asia/Shanghai
ports:
- 9090:9090
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/data:/prometheus/data
- ./prometheus/rules/alert_rules.yml:/etc/config/rules.yml
command: "--config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle"
privileged: true
restart: always
depends_on:
- alertmanager
- blackbox
- mysqld_exporter
links:
- alertmanager
- blackbox
networks:
- monitor_net
grafana:
image: monitor/grafana:7.5.16
hostname: "grafana"
environment:
- TZ=Asia/Shanghai
- GF_SECURITY_ADMIN_PASSWORD=admin
ports:
- 3000:3000
volumes:
- ./grafana/data:/var/lib/grafana
privileged: true
restart: always
links:
- prometheus
networks:
- monitor_net
alertmanager:
image: monitor/alertmanager:v0.24.0
hostname: "alertmanager"
environment:
- TZ=Asia/Shanghai
ports:
- 9093:9093
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
- ./alertmanager/data:/etc/alertmanager/data
- ./alertmanager/templates:/etc/alertmanager/templates
command: "--config.file=/etc/alertmanager/alertmanager.yml --storage.path=/etc/alertmanager/data --cluster.advertise-address=0.0.0.0:9093"
privileged: true
links:
- prometheusalert
restart: always
depends_on:
- prometheusalert
networks:
- monitor_net
mysqld_exporter:
image: monitor/mysqld-exporter:v0.14.0
hostname: "mysqld_exporter"
environment:
- TZ=Asia/Shanghai
- DATA_SOURCE_NAME=weihu:123456@(10.10.0.41:3306)/
ports:
- 9104:9104
privileged: true
restart: always
networks:
- monitor_net
blackbox:
image: monitor/blackbox-exporter:v0.19.0
hostname: "blackbox"
environment:
- TZ=Asia/Shanghai
ports:
- 9115:9115
volumes:
- ./blackbox/blackbox.yml:/opt/blackbox.yml
privileged: true
restart: always
networks:
- monitor_net
prometheusalert:
image: monitor/prometheus-alert:v4.8.2
hostname: "prometheusalert"
environment:
- TZ=Asia/Shanghai
ports:
- 8080:8080
volumes:
- ./prometheusalert/conf:/app/conf
- ./prometheusalert/db:/app/db
- /etc/localtime:/etc/localtime
privileged: true
restart: always
networks:
- monitor_net
networks:
monitor_net:
driver: bridge