这篇文章上次修改于 206 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

系统结构

  • Prometheus 负责收集信息
  • Grafana 负责将数据图表化
  • xxx-exporter 负责采集设备信息,再由 Prometheus 进行收集存储
  • Alertmanager 负责监控告警,管理多台设备会很有用

我不需要监控告警功能所以只部署前三个服务,这是我不需要的原因:

monitor

要是有告警这能吵死我。

部署

对于系统监控类的软件其实不应该采取容器化部署,不过也不是不行就是了。

一个可用的 compose 配置:

services:
  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana
    restart: unless-stopped
    volumes:
      - ./grafana-storage:/var/lib/grafana
    ports:
      - 3000:3000

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    restart: unless-stopped
    ports:
      - 9090:9090
    volumes:
      - ./prometheus:/etc/prometheus/
      - ./prometheus_data:/prometheus/

  node-exporter:
    image: prom/node-exporter
    container_name: node-exporter
    restart: unless-stopped
    command:
      - '--path.rootfs=/host'
    pid: host
    network_mode: host
    volumes:
      - '/:/host:ro,rslave'

其中节点部分使用的是 host 网络模式,如果不这样做只能获取到容器本身的网络情况,这个实在是没办法。

节点配置

在宿主机映射到容器 prometheus 的 /etc/prometheus/ 目录下创建一个 prometheus.yml 文件,复制下面的内容并替换最后一行的节点 IP 和端口。

global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    scrape_interval: 5s
    static_configs:
      - targets: ["10.0.0.1:9100", "10.0.6.75:9100"]

接下来启动容器,就可以访问这三个服务了。有三个端口:3000 9090 9100 分别对应上面三个服务,后面两个不用管只需要看第一个。

添加数据源

访问 3000 端口对应的 grafana 服务,由于没有设置环境变量所以默认账号密码都是 admin,如果公网部署一定要改。登录后到 /connections/datasources 路径下添加数据源,第一个应该就是 prometheus。

image.png

不额外添加认证等功能直接改一个 URL 就能用了,可以使用容器名比如 http://prometheus:9090 来替代 IP。

创建面板

这个主要是去 官网 下面找或者直接配置、文件导入,入口在下图的右上角。这个面板的地址:https://grafana.com/grafana/dashboards/1860-node-exporter-full/

image.png

image.png

其他

这玩意好像会持续访问硬盘,然后我的机械盘就没停转过。。。。

prometheus 日志堆起来可能会很大,我使用了一个多月总共三个监控服务产生了 57G 日志撑爆服务器