发布于 2026-01-06 0 阅读
0

第一部分:如何使用 Docker 设置 Grafana 和 Prometheus

第一部分:如何使用 Docker 设置 Grafana 和 Prometheus

准备好让你的 NestJS 应用性能飙升了吗?在本篇博客中,我们将一步步引导你使用 Docker 轻松配置 Grafana 和 Prometheus。告别繁琐的监控和可视化,让你的开发之旅更加顺畅、更具洞察力。让我们一起探索容器化部署的世界,为你的 NestJS 项目增添可视化元素,让你的数据超越性能指标的局限,焕发活力。

这将是一份全面的指南:

1. 在主项目中创建一个名为“docker-compose.monitoring.yml”的 Docker Compose 文件

2. 创建一个名为“config”的文件夹,并在其中创建名为“config/prometheus.yaml”的文件。

  • 我们需要四个基本组件来建立监控系统:Prometheus、Grafana、cAdvisor 和 Node Exporter:

Prometheus:一款开源的监控和告警工具包,专为可靠性和可扩展性而设计。Prometheus 收集并存储时间序列数据,支持查询和分析。

Grafana:一个流行的开源监控和可观测性平台。Grafana 提供可定制的仪表盘,用于可视化和分析来自各种数据源(包括 Prometheus)的指标。

cAdvisor:是 Container Advisor 的缩写,cAdvisor 是一款开源容器监控工具。它分析运行中容器的资源使用情况和性能特征,为容器化环境提供有价值的见解。

Node Exporter:一个 Prometheus 导出器,用于从 Linux 和其他类 Unix 系统中收集硬件和操作系统级别的指标。Node Exporter 支持对主机级资源和性能指标进行监控。

让我们再次投入练习吧 🔥

  1. 在我们的“docker-compose.monitoring.yml”文件中,我们需要添加以下代码:

    第一个:



version: '3.8'
networks:
  monitoring:
    driver: bridge



Enter fullscreen mode Exit fullscreen mode

在此步骤中,我们将 Docker Compose 版本设置为 3.8,并使用桥接驱动程序定义一个名为“monitoring”的自定义网络。

——第二个:



volumes:
  prometheus-data:
    driver: local
  grafana-data:
    driver: local



Enter fullscreen mode Exit fullscreen mode

此步骤创建名为“prometheus-data”和“grafana-data”的本地卷,用于持久存储。

——第三人称:服务 1:普罗米修斯:



prometheus:
  image: prom/prometheus:v2.37.9
  container_name: prometheus
  ports:
    - 9090:9090
  command:
    - '--config.file=/etc/prometheus/prometheus.yaml'
  volumes:
    - ./config/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro
    - ./data:/prometheus
  restart: unless-stopped



Enter fullscreen mode Exit fullscreen mode

镜像:指定 Prometheus 的 Docker 镜像及其版本。
容器名称:为 Prometheus 容器指定一个名称。
端口:将主机端口 9090 映射到容器的端口 9090,以便访问 Prometheus。
命令:设置 Prometheus 的配置文件路径。
卷:绑定用于 Prometheus 配置和数据持久化的本地目录。
重启:确保 Prometheus 容器在未显式停止的情况下自动重启。

-- 服务 2:Grafana:



grafana:
  image: grafana/grafana-oss:latest
  container_name: grafana
  ports:
    - '3000:3000'
  volumes:
    - grafana-data:/var/lib/grafana
  restart: unless-stopped




Enter fullscreen mode Exit fullscreen mode

-- 服务 3:节点导出器:



node_exporter:
  image: quay.io/prometheus/node-exporter:v1.5.0
  container_name: node_exporter
  command: '--path.rootfs=/host'
  pid: host
  restart: unless-stopped
  volumes:
    - /:/host:ro,rslave



Enter fullscreen mode Exit fullscreen mode

-- 服务 4:cAdvisor:



cadvisor:
  image: gcr.io/cadvisor/cadvisor:v0.47.0
  container_name: cadvisor
  command:
    - '-port=8098'
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    - /dev/disk/:/dev/disk:ro
  devices:
    - /dev/kmsg
  privileged: true
  restart: unless-stopped



Enter fullscreen mode Exit fullscreen mode

所以结果会是这样的🚨:



version: '3.8'
networks:
  monitoring:
    driver: bridge
volumes:
  prometheus-data:
    driver: local
  grafana-data:
    driver: local
services:
  prometheus:
    image: prom/prometheus:v2.37.9
    container_name: prometheus
    ports:
      - 9090:9090
    command:
      - '--config.file=/etc/prometheus/prometheus.yaml'
    volumes:
      - ./config/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro
      - ./data:/prometheus
    restart: unless-stopped
  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana
    ports:
      - '3000:3000'
    volumes:
      - grafana-data:/var/lib/grafana
    restart: unless-stopped
    #password: root123
  node_exporter:
    image: quay.io/prometheus/node-exporter:v1.5.0
    container_name: node_exporter
    command: '--path.rootfs=/host'
    pid: host
    restart: unless-stopped
    volumes:
      - /:/host:ro,rslave
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.0
    container_name: cadvisor
    command:
      - '-port=8098'
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    devices:
      - /dev/kmsg
    privileged: true
    restart: unless-stopped



Enter fullscreen mode Exit fullscreen mode

现在,让我们深入了解 Prometheus 配置文件:
在 config/prometheus.yaml 文件中,我们需要定义 scarpe 配置:



global:
  scrape_interval: 15s



Enter fullscreen mode Exit fullscreen mode

设置全局抓取间隔为 15 秒。这意味着 Prometheus 将按此间隔从配置的目标收集指标。



scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['myapi:6003']
    metrics_path: '/tam-metrics'



Enter fullscreen mode Exit fullscreen mode

为名为“prometheus”的作业定义抓取配置。scrape_interval
: 5s:将此特定作业的全局抓取间隔覆盖为 5 秒。static_configs
指定静态配置的目标列表。targets
: ['myapi:6003']:指示 Prometheus 应从目标“myapi”的 6003 端口抓取指标。metrics_path
: '/tam-metrics':指定 Prometheus 应从中抓取此作业指标的路径。

3.



  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node_exporter:9100']



Enter fullscreen mode Exit fullscreen mode

添加另一个名为“node-exporter”的作业配置。
目标: ['node_exporter:9100']:指示 Prometheus 应该从端口 9100 上的目标“node_exporter”抓取指标。

4.



  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8098']



Enter fullscreen mode Exit fullscreen mode

targets: ['cadvisor:8098']:指定 Prometheus 应该从目标 'cadvisor' 的 8098 端口抓取指标。

最终结果如下:



global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['myapi:6003']
    metrics_path: '/tam-metrics'
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node_exporter:9100']

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8098']



Enter fullscreen mode Exit fullscreen mode

要运行所有这些命令,只需在终端中输入:

docker-compose -f docker-compose.monitoring.yml up -d

然后砰的一声🤯:

普罗米修斯

图片描述

格拉法纳
图片描述

首次登录:admin/admin

好了,本节到此结束。我们已经成功配置了容器,一切运行顺畅,并取得了一些令人瞩目的成果。但是等等,这仅仅是个开始!真正的精彩之处在于我们深入配置仪表盘并从 Nest 应用导出指标。准备好迎接视觉盛宴吧!敬请期待第二部分,我们将详细探讨这些激动人心的方面。我们第二部分见,一起开启数据可视化之旅。

👋 您也可以在领英上联系我并关注我的帖子

文章来源:https://dev.to/chafroudtarek/part-1-how-to-set-up-grafana-and-prometheus-using-docker-i47