在现代 IT 环境中,监控系统是确保基础设施稳定运行的核心工具。Prometheus 和 Grafana 是目前最受欢迎的开源监控解决方案之一,凭借其强大的功能和灵活性,广泛应用于各种场景。
# 引言
随着业务的扩展和技术的进步,服务器、虚拟机和物联网设备的数量不断增加。为了确保这些系统的稳定性和性能,实时监控变得至关重要。Prometheus 是一个强大的开源监控和报警工具,而 Grafana 则是一个功能丰富的数据可视化平台。两者的结合能够为用户提供全面的监控解决方案。
本文的目标是帮助你完成以下任务:
安装并配置 Prometheus 和 Grafana(包括使用 Docker 部署)。
将 PVE、TrueNAS 和树莓派接入到 Prometheus 监控系统中。
在 Grafana 中创建直观的仪表盘,展示各个设备和系统的性能数据。
# 使用 Docker 部署 Prometheus 和 Grafana
# 什么是 Docker?
Docker 是一个开源的容器化平台,允许你将应用程序及其依赖打包到一个容器中,从而实现跨平台的快速部署和一致性。
# 安装 Docker
在 Linux 系统上,你可以使用以下命令安装 Docker:
# 安装 Docker | |
sudo apt update | |
sudo apt install -y docker.io | |
# 验证 Docker 是否安装成功 | |
sudo docker --version |
# 使用 Docker 部署 Grafana
Grafana 可以通过 Docker 快速部署。以下是部署命令:
# 创建存储目录 | |
sudo mkdir -p /opt/grafana-storage | |
sudo mkdir -p /opt/grafana-conf | |
# 运行 Grafana 容器 | |
sudo docker run -d \ | |
-p 3000:3000 \ | |
--name=grafana \ | |
--restart=always \ | |
-v /opt/grafana-storage:/var/lib/grafana \ | |
-v /opt/grafana-conf:/etc/grafana \ | |
grafana/grafana |
-d
:后台运行容器。-p 3000:3000
:将容器的 3000 端口映射到宿主机的 3000 端口。--name=grafana
:为容器指定名称。--restart=always
:设置容器在重启后自动启动。-v /opt/grafana-storage:/var/lib/grafana
:将 Grafana 的数据存储目录挂载到宿主机。-v /opt/grafana-conf:/etc/grafana
:将 Grafana 的配置文件目录挂载到宿主机。
# 使用 Docker 部署 Prometheus
Prometheus 也可以通过 Docker 快速部署。以下是部署命令:
# 创建存储目录 | |
sudo mkdir -p /opt/prometheus/data | |
# 创建 Prometheus 配置文件 | |
sudo nano /opt/prometheus/prometheus.yml |
在 prometheus.yml
中添加以下内容:
global: | |
scrape_interval: 30s | |
scrape_configs: | |
- job_name: 'prometheus' | |
static_configs: | |
- targets: ['localhost:9090'] | |
- job_name: 'pve' | |
static_configs: | |
- targets: ['your-pve-server:9411'] | |
- job_name: 'truenas' | |
static_configs: | |
- targets: ['your-truenas-server:9412'] | |
- job_name: 'raspberry-pi' | |
static_configs: | |
- targets: ['your-raspberry-pi-ip:9100'] | |
- job_name: 'cadvisor' | |
static_configs: | |
- targets: ['your-raspberry-pi-ip:8080'] |
保存并退出。
运行 Prometheus 容器:
# 运行 Prometheus 容器 | |
sudo docker run -d \ | |
-p 9090:9090 \ | |
--name=prometheus \ | |
--restart=always \ | |
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ | |
-v /opt/prometheus/data:/prometheus \ | |
prom/prometheus |
-d
:后台运行容器。-p 9090:9090
:将容器的 9090 端口映射到宿主机的 9090 端口。--name=prometheus
:为容器指定名称。--restart=always
:设置容器在重启后自动启动。-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
:将 Prometheus 的配置文件挂载到容器中。-v /opt/prometheus/data:/prometheus
:将 Prometheus 的数据存储目录挂载到宿主机。
# 验证 Docker 容器
验证 Prometheus 和 Grafana 容器是否运行正常:
sudo docker ps |
访问 Grafana:
- 打开浏览器,访问
http://your-grafana-ip:3000
,默认用户名和密码为admin
。
访问 Prometheus:
- 打开浏览器,访问
http://your-prometheus-ip:9090
。
# 将 PVE 接入 Prometheus
# 安装 Prometheus PVE Exporter
Prometheus PVE Exporter 是一个用于监控 Proxmox VE(PVE)的 Prometheus Exporter,可以通过 pip3
安装。
# 安装步骤
更新软件包并安装 Python 3 环境
apt update && apt upgrade -y
apt install python3 python3-pip -y
安装 prometheus-pve-exporter
pip3 install prometheus-pve-exporter
安装成功后,文件会存储在
/usr/local/bin/pve_exporter
。创建 PVE 监控用户
在 PVE 的 Web 界面中,创建一个用户专用于 Prometheus 监控,用户名为
monitoring
,领域选择Proxmox VE authentication server
,并设置密码。为用户设置权限:数据中心 -> 权限 -> 添加 -> 用户权限,路径选择
/
,用户选择刚才创建的,权限选择PVEAuditor
。
创建配置文件
使用您熟悉的编辑器创建配置文件
/etc/prometheus-pve-exporter/pve.yml
:default:
user: monitoring@pve
password: 你刚才设置的密码
verify_ssl: false
创建 systemd 服务
创建 systemd 服务文件
/etc/systemd/system/prometheus-pve-exporter.service
:
[Unit] | |
Description=Proxmox Exporter | |
After=network.target | |
[Service] | |
ExecStart=/usr/local/bin/pve_exporter --config.file /etc/prometheus-pve-exporter/pve.yml --web.listen-address=:9221 | |
Restart=always | |
[Install] | |
WantedBy=multi-user.target |
保存并关闭文件,然后执行以下命令启动服务:
systemctl daemon-reload | |
systemctl start prometheus-pve-exporter | |
systemctl enable prometheus-pve-exporter |
验证 Exporter 是否运行
通过以下命令检查服务状态:
systemctl status prometheus-pve-exporter
如果正常运行,您可以通过浏览器访问
http://<PVE_SERVER_IP>:9221/pve
查看数据。
# 在 Prometheus 中配置 PVE 监控
编辑 Prometheus 配置文件: 编辑 Prometheus 的配置文件
/etc/prometheus/prometheus.yml
:sudo nano /etc/prometheus/prometheus.yml
添加 PVE 监控配置: 在文件末尾添加以下内容(替换
your-pve-ip
为实际的 PVE 服务器 IP 地址):- job_name: 'pve'
metrics_path: /pve
static_configs:
- targets: ['your-pve-ip:9221']
重启 Prometheus:
bash 复制
sudo systemctl restart prometheus
# 访问 Prometheus PVE Exporter
访问 Prometheus PVE Exporter 的 Web 界面:
打开浏览器,访问
http://your-pve-ip:9221
。在页面中,你可以通过
/pve?target=your-pve-ip
查看监控数据。
# 将 TrueNAS 接入 Prometheus
注:参考项目 truenas-graphite-to-prometheus
# 在 TrueNAS 中运行 Exporter
TrueNAS 没有官方的 Prometheus Exporter,但可以使用自定义应用来实现。以下是具体步骤:
创建自定义应用
在 TrueNAS 中,打开
Apps
(应用)选项卡。点击
Discover Apps
(发现应用),然后选择Custom App
(自定义应用)。按照提示填写应用名称,使用默认版本。
在镜像设置中,使用以下镜像:
镜像名称:
ghcr.io/supporterino/truenas-graphite-to-prometheus
镜像标签:
latest
镜像策略可以保持默认设置。
配置端口转发
需要转发两个端口,一个用于 Graphite,另一个用于 Prometheus。
Graphite 的容器端口为
9109
,节点端口可以使用相同端口或指定其他可用端口,协议为TCP
。Prometheus 的容器端口为
9108
,同样使用TCP
协议。配置示例如下:
Graphite:
9109
(TCP)Prometheus:
9108
(TCP)
设置资源限制
- Exporter 非常轻量级,因此通常不需要设置资源限制。
# 在 Prometheus 中配置 TrueNAS 监控
编辑 Prometheus 配置文件
sudo nano /etc/prometheus/prometheus.yml
添加 TrueNAS 监控配置
在文件末尾添加以下内容(替换
your-truenas-server
为实际的 TrueNAS 服务器地址):- job_name: 'truenas'
static_configs:
- targets: ['your-truenas-server:9108']
重启 Prometheus
sudo systemctl restart prometheus
# 将 Raspberry Pi 接入 Prometheus
# 使用 Docker 部署 node_exporter
和 cadvisor
# 树莓派安装 Docker
在树莓派上安装 Docker 可以通过以下步骤完成:
更新软件包
sudo apt update
sudo apt upgrade -y
安装 Docker
sudo apt install -y docker.io
验证 Docker 安装
sudo docker --version
将当前用户添加到 docker 组
sudo usermod -aG docker pi
使更改生效:
newgrp docker
# 使用 Docker 部署 node_exporter
运行 node_exporter
容器:
# 运行 node_exporter 容器 | |
sudo docker run -d \ | |
-p 9100:9100 \ | |
--name=node_exporter \ | |
--restart=always \ | |
-v /proc:/host/proc:ro \ | |
-v /sys:/host/sys:ro \ | |
-v /:/rootfs:ro \ | |
prom/node-exporter \ | |
--path.procfs /host/proc \ | |
--path.sysfs /host/sys \ | |
--collector.filesystem.ignored-mount-points \ | |
"^/host/(sys|proc|dev|etc|var/lib/docker/containers|var/lib/docker/)" |
-d
:后台运行容器。-p 9100:9100
:将容器的 9100 端口映射到宿主机的 9100 端口。--name=node_exporter
:为容器指定名称。--restart=always
:设置容器在重启后自动启动。-v /proc:/host/proc:ro
:将宿主机的/proc
挂载到容器中。-v /sys:/host/sys:ro
:将宿主机的/sys
挂载到容器中。-v /:/rootfs:ro
:将宿主机的根文件系统挂载到容器中。
# 使用 Docker 部署 cadvisor
运行 cadvisor
容器:
# 运行 cadvisor 容器 | |
sudo docker run --restart=always \ | |
--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:v0.49.2 \ | |
--housekeeping_interval=15s \ | |
--docker_only=true \ | |
--store_container_labels=false |
--restart=always
:设置容器在重启后自动启动。--volume=/:/rootfs:ro
:将宿主机的根文件系统挂载到容器中。--volume=/var/run:/var/run:ro
:将宿主机的/var/run
挂载到容器中。--volume=/sys:/sys:ro
:将宿主机的/sys
挂载到容器中。--volume=/var/lib/docker/:/var/lib/docker:ro
:将宿主机的 Docker 数据目录挂载到容器中。--volume=/dev/disk/:/dev/disk:ro
:将宿主机的磁盘设备挂载到容器中。--publish=8080:8080
:将容器的 8080 端口映射到宿主机的 8080 端口。--detach=true
:后台运行容器。--name=cadvisor
:为容器指定名称。--privileged
:赋予容器特权模式。--device=/dev/kmsg
:将宿主机的/dev/kmsg
设备挂载到容器中。
# 在 Prometheus 中配置树莓派监控
在 prometheus.yml
中添加以下内容:
- job_name: 'raspberry-pi-node-exporter' | |
static_configs: | |
- targets: ['your-raspberry-pi-ip:9100'] | |
- job_name: 'raspberry-pi-cadvisor' | |
static_configs: | |
- targets: ['your-raspberry-pi-ip:8080'] |
重启 Prometheus:
sudo systemctl restart prometheus |
# 在 Grafana 中创建 Dashboard
# 添加 Prometheus 数据源
在 Grafana 中,导航到 Configuration
> Data Sources
,添加一个 Prometheus 数据源。
点击
Add data source
。选择
Prometheus
。在
HTTP
选项卡中,输入 Prometheus 的地址(如http://localhost:9090
)。点击
Save & Test
,确保连接成功。
# 创建监控图表
进入 Dashboard
,点击 Add Panel
,选择 import
- raspberry 仪表盘: raspberry-pi-docker-monitoring
- pve 仪表盘:proxmox-via-prometheus
- truenas 仪表盘:在上面提到的项目
truenas-graphite-to-prometheus
的 Dashboard 目录中