• 首页
  • 归档
  • 关于
  • 搜索
  • 夜间模式
    ©2026  望时代 Theme by OneBlog

    望时代

    搜索
    标签
    # 教程 # Linux # 脚本 # AI # 影音 # 游戏 # 随笔 # 科技 # 认知
  • 首页>
  • >
  • 正文
  • 探针 Grafana + Prometheus 之比 Docker 更简单的部署流程

    2026年06月26日 2 阅读 0 评论 12863 字

    探针 Grafana + Prometheus 之比 Docker 更简单的部署流程 __2023年7月24日 __3条评论 __296次阅读 __0人点赞 __Tao_Qi

    若无单独说明,按照文章代码块中命令的顺序,一条一条执行,即可实现目标。
    适用系统:Debian 系发行版,包括 Ubuntu ,其他发行版按流程稍改命令一般也可。

    完成部署预计时间:15 分钟

    文章里的一键脚本仅适用于 amd64 系统

      • *

    Grafana ,Prometheus 和 Node Exporter 是一套流行的开源监控工具,用于收集,存储,查询系统和应用程序的各种使用率,并可视化显示。每个工具都有特定的功能:

    1. Grafana :是一款可视化程序,提供开源版和企业版。 Grafana 不从客户端收集任何数据,也不存储,它的功能是以直观且优美的格式显示 Prometheus 或其他数据源(SQL 等)收集的数据。 它允许用户自定义面板,支持警报、注释、仪表板变量、插件和身份验证。
    2. Prometheus :是一个开源的系统监控和警告程序,它使用 HTTP 协议轮询客户端以获取所需数据。维护结果的时间序列数据库,以预定义的时间间隔轮询每个客户端,进而能够构建客户端长期性能的概览。
    3. Node Exporter :在客户端节点上能使用各种收集器,但 Prometheus 推荐使用自己的 Node Exporter 工具。 它收集大量硬件和内核指标,如 CPU,磁盘 I/O,内存,网络等,收集的可用指标的完整列表可以在 Node Exporter GitHub page 页面上找到。
      • *

    由于篇幅过长,更好的阅读体验,请移步: https://blog.vfly2.com/2023/07/a-simpler-deployment-process-of-the-probe-grafana-prometheus-compared-to-docker/ 资源使用率 Grafana 和 Prometheus 部署好后,内存使用量增加了 200MB 多;监控的客户端为 3 个的情况下,在运行一天之后,内存占用达到 300MB 。总的来说,资源消耗量较大,适合 2g 内存、20GB 磁盘空间的机子。 通过 top 命令,node_exporter 占用了大约 20 MB 内存。
    [code]

    top -p $(pgrep node_exporter)
    

    [/code]

      • *

    部署流程 默认,Grafana Web 界面使用端口 3000 访问,而 Prometheus 使用端口 9090 ,Node Exporter 使用端口 9100 。开放防火墙:
    [code]

    sudo ufw allow 9090 comment 'prometheus'
    sudo ufw allow 3000 comment 'grafana'
    # Node Exporter 有所不同,在后面
    

    [/code]

    为了获得最佳结果,请在同一服务器上运行 Prometheus 和 Grafana。下面将托管 Prometheus 和 Grafana 的服务器的系统称为“监控服务器”。被监控的系统是“客户端”。

      • *

    本文中的步骤是为非 root 用户编写的。需要提升权限的命令以 sudo 为前缀。 在监控服务器上开放防火墙,已完成✔ 如果不想使用脚本,或者希望了解安装过程,请查看原文: https://blog.vfly2.com/2023/07/a-simpler-deployment-process-of-the-probe-grafana-prometheus-compared-to-docker/ ,考虑篇幅过长,因此这么安排。 在监控服务器上安装 Prometheus 并作为服务运行 复制一键安装 Prometheus :(bash-script/install-prometheus.sh at main · AhFeil/bash-script (github.com))
    [code]

    wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-prometheus.sh' | sudo bash
    

    [/code]

    若运行结束后,出现 active (running) ,则安装成功。 通过 http://ip_addr:9090 访问 Prometheus Web 界面和仪表板。将 ip_addr 替换为监控服务器的地址。 在所有客户端上安装 Node Exporter,并开放防火墙。

    客户端可以是 Linux 发行版,也可以是 Windows 等,不过 Node Exporter 仅适用于 Linux。

    在客户端只给 监控服务器IP 开放 9100 端口,记得修改监控服务器IP:
    [code]

    sudo ufw allow from 监控服务器IP to any port 9100 comment 'node_exporter'
    

    [/code]

    复制一键安装 Node Exporter :(bash-script/install-node_exporter.sh at main · AhFeil/bash-script (github.com))
    [code]

    wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-node_exporter.sh' | sudo bash
    

    [/code]

    若运行结束后,出现 active (running) ,则安装成功。 更新的话重新运行一遍就可以 配置 Prometheus 来监控客户端 客户端节点现在已准备好进行监控。要将客户端添加到 prometheus.yml ,请按照以下步骤操作: 在运行Prometheus的监控服务器上,打开 prometheus.yml 进行编辑。
    [code]

    sudo vim /etc/prometheus/prometheus.yml
    

    [/code]

    找到 scrape_configs ,里面是作业列表。当前有一个名为 prometheus 的作业。此作业监视端口 9090 上的本地 Prometheus 任务。 在 prometheus 作业下方,添加第二个作业,其 job_name 为 remote_collector 。包括以下信息。

    • 设置抓取时间间隔: scrape_interval: 10s
    • 添加要监控的 IP 和 端口号 :9100 ,使用逗号分隔每个条目。
    • 要启用对本地服务器的监视,请将 localhost:9100 条目添加到列表中,并在本地安装 Node Exporter。

    该条目应类似于以下示例。将 remote_addr 替换为客户端的实际IP地址。
    [code]

    ...
    
      - job_name: "remote_collector"
        scrape_interval: 10s
        static_configs:
          - targets: ["remote_addr:9100", "localhost:9100"]
    

    [/code]

    立即刷新 Prometheus,
    [code]

    sudo systemctl restart prometheus
    

    [/code]

    使用 Web 浏览器重新访问监控服务器上端口 9090 的 Prometheus Web 门户。选择【Status】-【Targets】。将显示 remote_collector 作业的第二个链接,指向客户端上的端口 9100 。单击链接查看统计数据。 安装并部署 Grafana 服务器 Prometheus 收集的统计信息只能被视为原始数据转储。很难阅读,而且没有太大用处。 Grafana 提供了查看 Prometheus 收集的统计信息的界面。在运行 Prometheus 的同一服务器上安装 Grafana 并将 Prometheus 添加为数据源。 前置准备,
    [code]

    # 安装一些必需的实用程序
    sudo apt-get install -y apt-transport-https software-properties-common
    # 导入 Grafana GPG 密钥
    sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
    # 添加 Grafana“稳定版本”存储库
    echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
    

    [/code]

    安装 Grafana 的开源版本。
    [code]

    sudo apt-get update && sudo apt-get install grafana
    

    [/code]

    重新加载 systemctl 守护进程。
    [code]

    sudo systemctl daemon-reload
    

    [/code]

    加入开机自启,并立即启动
    [code]

    sudo systemctl enable --now grafana-server.service
    

    [/code]

    查看状态
    [code]

    sudo systemctl status grafana-server
    

    [/code]

    关联 Grafana 和 Prometheus 所有系统组件现已安装,但 Grafana 和 Prometheus 尚未关联。剩下的可以使用 Grafana Web 界面完成。 要集成 Grafana 和 Prometheus,请按照以下步骤操作:

    1. 浏览器访问监控服务器的 3000 端口。例如,输入 http://ip_addr:3000 ,将 ip_addr 替换为实际 IP 地址。
    2. Grafana 显示登录页面。使用用户名和默认密码 都是 admin 。当出现提示时,将密码更改为更安全的值。
    3. 成功更改密码后,Grafana 将显示 Grafana 仪表板。
    4. 要将 Prometheus 添加为数据源,请单击齿轮符号(代表配置),然后选择数据源。

    1. 在下一个显示中,单击“添加数据源”按钮。
    2. 选择Prometheus作为数据源。
    3. 对于本地 Prometheus 源,将 URL 设置为 http://localhost:9090 。大多数其他设置可以保留默认值。

    1. 对设置满意后,选择屏幕底部的【Save & test】按钮。
    2. 如果所有设置均正确,Grafana 会确认 Data source is working 。

    使用 Grafana ,导入仪表板模板 可以创建自定义仪表板。然而,Prometheus 已经创建了一个仪表板来支持 Node Exporter,名为 Node Exporter Full ,下面是导入的流程。

    要创建自定义仪表板,请单击仪表板按钮,该按钮类似于四个正方形。然后选择 新建仪表板。有关更多信息,请参阅 Grafana 构建仪表板指南。
    1. 在 Grafana 仪表板。选择由四个正方形组成的仪表板图标,

    1. 右边【New】-【Import】。

    1. 然后在 【Import via grafana.com】, 输入上一步中的 ID 1860 。然后选择【Load】。

    1. 在下一个屏幕确认导入详细信息。选择 Prometheus 作为数据源,然后单击【Import】按钮。

    1. Node Exporter Full 仪表板立即生效。它显示客户端节点的性能指标和状态,包括内存、RAM 和 CPU 详细信息。

      • *
    原文链接: https://blog.vfly2.com/2023/07/a-simpler-deployment-process-of-the-probe-grafana-prometheus-compared-to-docker/
    版权声明:本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 。

    如果你认为我的文章有帮助,欢迎使用 RSS 订阅,也欢迎留言指正。 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议

    1. pioneer说道: 2023年7月24日 下午11:15
    2. 丿啦灬啦啦说道: 2023年7月24日 下午11:17
    3. Testcharon说道: 2023年7月25日 上午7:06 寫個 docker-conpose.yml,部署管理方便的多嘛

    [code] version: "3.8"

         volumes:
           prometheus_data: {}
           grafana_data: {}
         networks:
           proxy:
           monitoring:
         services:
           watchtower:
             image: containrrr/watchtower:latest
             environment:
               - WATCHTOWER_LABEL_ENABLE=true
             volumes:
               - /var/run/docker.sock:/var/run/docker.sock
             labels:
               com.centurylinklabs.watchtower.enable: "true"
           node-exporter:
             image: prom/node-exporter:latest
             container_name: node-exporter
             restart: unless-stopped
             volumes:
               - /proc:/host/proc:ro
               - /sys:/host/sys:ro
               - /:/rootfs:ro
             command:
               - "--path.procfs=/host/proc"
               - "--path.rootfs=/rootfs"
               - "--path.sysfs=/host/sys"
               - "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"
             ports:
               - "9100:9100"
             networks:
               - monitoring
             labels:
               com.centurylinklabs.watchtower.enable: "true"
           prometheus:
             image: prom/prometheus:latest
             container_name: prometheus
             restart: unless-stopped
             volumes:
               - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
               - prometheus_data:/prometheus
             command:
               - "--config.file=/etc/prometheus/prometheus.yml"
               - "--storage.tsdb.path=/prometheus"
               - "--web.console.libraries=/etc/prometheus/console_libraries"
               - "--web.console.templates=/etc/prometheus/consoles"
               - "--web.enable-lifecycle"
               - "--web.enable-admin-api"
             ports:
               - "9110:9090"
             networks:
               - monitoring
             labels:
               com.centurylinklabs.watchtower.enable: "true"
           cadvisor:
             image: gcr.io/cadvisor/cadvisor-arm64:v0.47.2
             container_name: cadvisor
             privileged: true
             volumes:
               - /:/rootfs:ro
               - /var/run:/var/run:rw
               - /sys:/sys:ro
               - /var/lib/docker:/var/lib/docker:ro
               - /dev/disk/:/dev/disk:ro
             restart: unless-stopped
             devices:
               - /dev/kmsg
             ports:
               - "8080:8080"
             networks:
               - monitoring
             labels:
               com.centurylinklabs.watchtower.enable: "true"
           mosquitto:
             image: eclipse-mosquitto:latest
             container_name: mosquitto
             restart: always
             ports:
               - "1883:1883"
             networks:
               - monitoring
             volumes:
               - ./mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf
             labels:
               com.centurylinklabs.watchtower.enable: "true"
           loki:
             image: grafana/loki:latest
             container_name: loki
             restart: unless-stopped
             ports:
               - "3100:3100"
             command:
               - "-config.file=/etc/loki/local-config.yaml"
             networks:
               - monitoring
           promtail:
             image: grafana/promtail:latest
             container_name: promtail
             volumes:
               - /var/log:/var/log
             command:
               - "-config.file=/etc/promtail/config.yml"
             networks:
               - monitoring
           grafana:
             image: grafana/grafana:latest
             container_name: grafana
             volumes:
               - grafana_data:/var/lib/grafana
               - ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
               - ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources      - ./grafana/conf/grafana.ini:/etc/grafana/grafana.ini
             environment:
               - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER}
               - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
               - GF_USERS_ALLOW_SIGN_UP=false
               - GF_SMTP_ENABLED=true
               - GF_SMTP_HOST=${GF_SMTP_HOST}
               - GF_SMTP_USER=${GF_SMTP_USER}
               - GF_SMTP_PASSWORD=${GF_SMTP_PASSWORD}
               - GF_SMTP_FROM_ADDRESS=${GF_SMTP_FROM_ADDRESS}
             restart: unless-stopped
             ports:
               - "3000:3000"
             networks:
               - monitoring
             labels:
               com.centurylinklabs.watchtower.enable: "true"
         

    [/code]

    回复

    发表回复 取消回复电子邮件地址不会被公开。必填项已用 标注 __ __

    本文著作权归作者 [ doudoudoubao ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    教程Linux
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.003 s
    Theme by OneBlog V3.7.1
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。