目前 Prometheus 监控体系越来越流行,这里也记录一下相关用法。内容除了说明下基本的 Prometheus + Grafana 安装之外,重点介绍下如何监控主机Docker 容器。主要参考官网

prometheus stack

Prometheus 和 Grafana 的安装

基本安装不多说,网络文档很多。这里简单记录。

  1. 创建 Prometheus 配置文件
# vim /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s

scrape_configs:
- job_name: "prometheus"
scrape_interval: 5s
static_configs:
- targets: ["localhost:9090"]
  1. 启动 Prometheus
# Docker 启动的 Prometheus 需要特别注意网络问题,配置里就不能直接用 localhost:port 的方式配置 scrap 了。
# 需要使用 docker inspect xxxxxx | grep IPAddr 查看具体的 IP 地址。
sudo docker run \
-d \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--name=prometheus \
--restart=always \
prom/prometheus:latest
  1. 启动 Grafana
sudo docker run \
-d \
-p 3000:3000 \
--name=grafana \
--restart=always \
grafana/grafana:latest

常见问题:

  1. Prometheus 配置修改之后需要重启生效
    • 对于 Docker 的,可以直接 Docker stop + Docker start
    • 对于直接安装的,可以使用命令 kill -HUP pid ,发送 Reload 信号给进程
    • 安装时开启了 --web.enable-lifecycle 的,也可以直接通过 curl -X POST http://localhost:9090/-/reload 请求触发 Reload
  2. Grafana 默认账号密码是 admin/admin
  3. Grafana 遇到 “origin not allowed” 错误,可以修改下 Nginx 配置增加proxy_set_header Host example.com; 跳过同源限制。
  4. Grafana 配置可以去网上找

通过 node_exporter 监控主机

这里使用 Prometheus 官方团队提供的 node_exporter 来实现。主流系统都支持。

node_exporter 也有 Docker 版,但是监视内容不完整,需要设置很多特殊参数才行。官方建议直接使用二进制文件安装到系统上。

安装 node_exporter

主要参考官网文档:https://prometheus.io/docs/guides/node-exporter/

  1. 从官网下载二进制文件
VERSION=1.3.1
wget "https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz"
tar xvfz node_exporter-${VERSION}.linux-amd64.tar.gz
# 目标目录根据自己需要进行修改
mv node_exporter-${VERSION}.linux-amd64 /usr/local/node_exporter

  1. 创建 systemd 服务
vim /etc/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
After=network.target

[Service]
Restart=always
Type=simple
KillMode=process
RestartSec=10
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 启动 node_exporter
systemctl daemon-reload
systemctl start node_exporter
# 默认监听 `9100` 端口,注意端口冲突
systemctl status node_exporter
systemctl enable node_exporter

配置 Prometheus Scrap

编辑 prometheus.yml 文件,添加内容

scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']

通过 cadvisor 监控 Docker Container

Docker 本身有提供 Metrics 功能,但是只能监控 Docker 本身的状态,无法监控运行的 Container 的状态。

需要借助 Google 开源的 cadvisor 来实现。

启动非常简单 github 上有完整命令

  • 版本改成最新的就可以直接启动了。
  • 注意端口有没有冲突,有的话修改下冒号左边的端口号为其他端口号。
VERSION=v0.39.3 # use the latest release version from https://github.com/google/cadvisor/releases
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:$VERSION

配置 Prometheus Scrap

scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets: ["localhost:8080"]

不错的 Grafana Dashboard