Prometheus+Grafanna部署

很早之前就听说了Grafana这个工具,但是之前的时候没有用,最近的时候NAS总是Down 所以想监控一下 于是就部署了一个,既然部署了那就把内网的服务器全给监控一下,所以就写了这篇文章

Grafana 只是用来展示数据的,我们需要有收集数据的工具和不同的平台上报数据,我使用收集数据的是Prometheus ,Prometheus需要Exporter来上报数据。根据不同的平台选择不同的Exporter。

  • Node Exporter,负责收集所属节点的硬件和操作系统数据。
  • VM Exporter ,负责虚拟机的数据
  • cadvisor ,收集容器的数据
  • windows_exporter,收集Windows数据

安装

Grafanna

使用docker安装Grafana

1
2
3
4
5
6
7
8
9
10
11
12
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3888:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
volumes:
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped

Prometheus节点

在你需要监控的设备上,根据不同的设备类型安装不同的节点

Node Exporter

一般为Linux主机节点 我是用的是docker安装 也可以直接下载安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
services:
node_exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
- '--collector.timex' # 显式启用 timex 收集器(默认已启用)
network_mode: host
pid: host
restart: unless-stopped
cap_add:
- SYS_TIME # 用于 timex 收集器(时钟状态监控)
- SYS_NICE # 用于 perf 收集器(性能监控)
- SYS_ADMIN # 多种系统管理操作
- IPC_LOCK # 锁定内存(可能用于某些性能监控)
privileged: false # 明确不使用特权模式(更安全)
volumes:
- '/:/host:ro,rslave'
user: root # 明确以 root 用户运行(需要访问系统信息)

下载安装地址GitHub:https://github.com/prometheus/node_exporter/releases

VM Exporter

EXSI使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services:
vmware-exporter:
image: pryorda/vmware_exporter:latest
container_name: vmware_exporter
restart: unless-stopped
ports:
- "9272:9272" # 暴露监控指标端口
environment:
- VSPHERE_USER=root # vSphere用户名
- VSPHERE_PASSWORD=123 # vSphere密码
- VSPHERE_HOST=192.168.31.3 # vCenter服务器地址
- VSPHERE_IGNORE_SSL=true # 忽略SSL证书验证
- VSPHERE_SPECS_SIZE=2000 # 规格大小
networks:
- monitoring
networks:
monitoring:
driver: bridge

GitHub:https://github.com/pryorda/vmware_exporter

cadvisor

最开始pull镜像安装之后会出现问题cadvisor | F0904 08:24:28.483987 1 cadvisor.go:146] Failed to create a Container Manager: mountpoint for cpu not found 因为cgroup 可能使用 cgroup2 或者挂载点位置发生了变化,mount | grep cgroup查完确定使用的cgroup2 换了个其他,就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
services:
cadvisor:
image: lagoudocker/cadvisor:v0.37.0
container_name: cadvisor
privileged: true
restart: unless-stopped
ports:
- "8333:8080"
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:/dev/kmsg"

我在群晖上也部署了这个 ,但是群晖的硬盘映射和普通Linux不太一样所以做了些许更改下方为群晖使用的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
cadvisor:
image: lagoudocker/cadvisor:v0.37.0
container_name: cadvisor
privileged: true
restart: unless-stopped
ports:
- "8333:8080"
volumes:
- "/:/rootfs:ro"
- "/var/run:/var/run:ro"
- "/sys:/sys:ro"
- "/volume1/docker:/var/lib/docker:ro"
devices:
- "/dev/kmsg:/dev/kmsg"

GitHub:https://github.com/google/cadvisor

windows_exporter

下载安装即可

GitHub:https://github.com/prometheus-community/windows_exporter/releases

Prometheus安装

在哪安装都行 只要与node是互通的 我用的docker安装的

需要首先更改配置文件Prometheus.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 全局配置
global:
scrape_interval: 15s # 设置抓取间隔为每15秒一次。默认为每分钟一次
evaluation_interval: 15s # 每15秒评估一次规则。默认为每分钟一次
# 抓取超时时间设置为全局默认值(10秒)

# Alertmanager配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093

# 加载规则文件并根据全局'evaluation_interval'定期评估
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"

# 抓取配置,包含一个要抓取的端点:
# 这里是Prometheus自身
scrape_configs:
# 任务名称会作为标签`job=<job_name>`添加到从此配置抓取的任何时间序列中
- job_name: 'n100 winserver'

# metrics_path 默认为'/metrics'
# scheme 默认为'http'

static_configs:
#监听地址
- targets: ['192.168.31.53:9100']

- job_name: 'exsi'
static_configs:
- targets: ['192.168.31.54:9272']

- job_name: 'n100windows'
static_configs:
- targets: ['192.168.31.55:9182']

- job_name: 'docker'
static_configs:
- targets: ['192.168.31.33:8333','192.168.31.34:8333']


平台安装

1
2
3
4
5
6
7
8
9
10
11
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "8989:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped

GitHub:https://github.com/prometheus/prometheus

成功之后可以使用浏览器访问http://ip:8989/targets来查看节点是否都上线

配置联动

登录Grafana

  • 设置中文 点击右上角头像 选择 第一个然后语言中选择中文就可以了
  • 添加数据源:左侧选择连接,数据源 添加Prometheus 添加url保存测试就可以了
  • 增加仪表盘:点击仪表盘,新建,导入,输入id

我推荐的id :

  • Node Ezxporter:8919
  • Docker:19908