docker-compose搭建prometheus以及grafana
1. 什么是 Prometheus?
Prometheus 是一个开源的系统监控和告警工具,由 SoundCloud 于 2012 年开始开发,现为 CNCF(Cloud Native Computing Foundation)项目之一。它特别适合云原生环境和容器编排系统(如 Kubernetes)的监控。
Prometheus 的核心特点:
-
多维数据模型:时间序列数据带有标签(key-value),支持灵活查询。
-
拉模式采集:Prometheus 定期从被监控服务拉取指标数据。
-
强大的查询语言 PromQL:支持丰富的指标计算和聚合。
-
内置时序数据库:高效存储监控指标。
-
支持告警管理:结合 Alertmanager 实现告警规则和通知。
-
生态丰富:有多种导出器(exporters)可采集不同系统和应用指标。
2. Prometheus 工作原理
采集数据
Prometheus 通过 HTTP 协议周期性地拉取被监控目标的指标数据。被监控程序需要暴露符合 Prometheus 格式的指标端点(通常是 /metrics),例如:
-
node-exporter:采集 Linux 主机的系统指标(CPU、内存、磁盘、网络等)
-
cadvisor:采集容器指标
-
应用自带的 metrics endpoint:Java、Go、Python 等语言有对应的客户端库,方便开发者直接暴露应用指标。
存储数据
Prometheus 自带高效的时序数据库,将采集到的指标以时间序列形式存储,支持数据压缩和快速检索。
查询和告警
使用 PromQL 查询语言,用户可以对指标做聚合、过滤、算术运算等操作,实现灵活的监控仪表盘和告警规则。
3. Prometheus 生态组件
-
Prometheus Server:核心组件,负责采集、存储和查询数据。
-
Exporters:辅助采集各种系统和服务指标的程序。例如:
-
node-exporter:主机资源监控
-
cadvisor:容器监控
-
mysqld-exporter:MySQL 监控
-
blackbox-exporter:HTTP、TCP 服务可用性探测
-
Alertmanager:管理告警规则,支持邮件、钉钉、微信、Slack 等多种通知方式。
-
Pushgateway:用于无法被 Prometheus 拉取指标的短暂任务推送指标。
-
Grafana:流行的开源可视化平台,通常与 Prometheus 配合使用,展示图表和告警。
4. Prometheus 的优势
-
开箱即用:提供多种官方和第三方 Exporters,快速覆盖多种场景。
-
灵活的指标模型和查询语言:支持多维标签,适合复杂业务监控需求。
-
高度可扩展:支持服务发现,自动监控大规模集群。
-
活跃社区和丰富文档:持续更新和优化。
5. 典型监控架构示例
graph LR Prometheus -->|Scrape metrics| Exporters Exporters -->|Expose metrics| LinuxHost Exporters -->|Expose metrics| Containers Exporters -->|Expose metrics| Databases Prometheus -->|Store & Query| TSDB Prometheus -->|Alert rules| Alertmanager Alertmanager -->|Send alerts| NotificationChannels Prometheus -->|Provide data| Grafana Grafana -->|Visualize dashboards| Users
6. 结合 Grafana 的优势
Grafana 专注于数据可视化,支持多种数据源,包括 Prometheus。配合 Prometheus,Grafana 提供:
-
灵活的图表和仪表盘定制
-
实时监控界面
-
告警通知管理
-
多用户权限控制
一、搭建环境准备
主机 ip 角色 软件 主机1 192.168.1.30 服务端 Prometheus、node-exporter、cadvisor、Grafana 主机2 192.168.1.29 客户端 node-exporter、cadvisor 二、安装docker和docker-compose
这个在我前几期有,小白可以去看下,了解下
三、部署prometheus与grafana
创建prometheus目录 然后创建prometheus.yml
mkdir /data/prometheus && cd /data/prometheus vim prometheus.yml
global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: ['192.168.1.30:9093'] rule_files: - "node_down.yml" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['192.168.1.30:9090'] - job_name: 'node' scrape_interval: 8s static_configs: - targets: ['192.168.1.30:9100', '192.168.1.29:9100'] - job_name: 'cadvisor' scrape_interval: 8s static_configs: - targets: ['192.168.1.30:8088', '192.168.1.29:8088']
创建node_down.yml
vim node_down.yml
groups: - name: node_down rules: - alert: InstanceDown expr: up == 0 for: 1m labels: user: test annotations: summary: "Instance {{ $labels.instance }} down" description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
然后创建服务端compose文件
vim docker-compose-prometheus.yml version: '2' networks: monitor: driver: bridge services: prometheus: image: prom/prometheus container_name: prometheus hostname: prometheus restart: always volumes: - /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - /data/prometheus/node_down.yml:/etc/prometheus/node_down.yml ports: - "9090:9090" networks: - monitor grafana: image: grafana/grafana container_name: grafana hostname: grafana restart: always ports: - "3000:3000" networks: - monitor node-exporter: image: quay.io/prometheus/node-exporter container_name: node-exporter hostname: node-exporter restart: always ports: - "9100:9100" networks: - monitor cadvisor: image: google/cadvisor:latest container_name: cadvisor hostname: cadvisor restart: always volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - "8088:8080" networks: - monitor
然后docker-compose -f docker-compose-prometheus.yml up -d启动
在客户端创建docker-compose文件
vim docker-compose.yml version: '2' networks: monitor: driver: bridge services: node-exporter: image: quay.io/prometheus/node-exporter container_name: node-exporter hostname: node-exporter restart: always ports: - "9100:9100" networks: - monitor cadvisor: image: google/cadvisor:latest #image:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/cadvisor/cadvisor:v0.51.0-linuxarm64 ##arm架构的可以用下面这个镜像 container_name: cadvisor hostname: cadvisor restart: always volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - "8088:8080" networks: - monitor
然后docker-compose up -d启动
浏览器访问http://192.168.1.30:9090/targets
四、配置grafana
http://192.168.1.30:3000/ 浏览器访问
账号密码是admin/admin 登录会让你修改 如果不修改跳过即可
配置的话就不多说了 比较简单 先添加prometheus数据源 然后再面板 导入数字添加即可
-
-
-
-
-