docker-compose搭建prometheus以及grafana

06-01 1042阅读

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角色软件
              主机1192.168.1.30服务端        Prometheus、node-exporter、cadvisor、Grafana
              主机2192.168.1.29客户端node-exporter、cadvisor

              docker-compose搭建prometheus以及grafana

              二、安装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

              docker-compose搭建prometheus以及grafana

              四、配置grafana

              http://192.168.1.30:3000/ 浏览器访问

              账号密码是admin/admin   登录会让你修改   如果不修改跳过即可

              docker-compose搭建prometheus以及grafana

              配置的话就不多说了 比较简单  先添加prometheus数据源 然后再面板 导入数字添加即可

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码