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数据源 然后再面板 导入数字添加即可

相关推荐
Blossom.1187 小时前
人工智能在智能金融中的创新应用与未来趋势
人工智能·深度学习·docker·容器·金融·kubernetes·自动化
jackie_0510 小时前
WSL2用docker daemon(不用桌面版本的)麻烦吗?
运维·docker·容器
怡人蝶梦11 小时前
Java后端技术栈问题排查实战:Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积
java·jvm·redis·kafka·springboot·prometheus
江湖有缘11 小时前
【Docker项目实战篇】Docker部署PDF查看器PdfDing
docker·eureka·pdf
求真得真12 小时前
Predixy的docker化
运维·docker·容器
珊珊而川12 小时前
docker不用dockerfile
运维·docker·容器
tianfs16 小时前
docker安装和镜像源替换
ubuntu·docker
专注代码七年17 小时前
如何在腾讯云 OpenCloudOS 上安装 Docker 和 Docker Compose
docker
江湖有缘18 小时前
【Docker管理工具】部署Docker管理面板DweebUI
运维·docker·容器
masx20019 小时前
在 Docker 中部署 etcd 并解决权限问题实战指南,成功解决permission denied问题!
docker·etcd