docker-compose编排搭建prometheus+grafana+alertmanager+node-exporter+snmp-exporter

Docker-compose

目前集成很多Exporter,加上grafana的image-renderer,后面又加上ping-exporter,很多东西加起来发现操作一次docker 很烦啊。

科普之后感觉自己对k8s还有有些发怵的。从简单的一个入手吧,选择了docker-compose。

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

安装

安装方式看了一下,我选择直接下载bin文件方式:

1
2
3
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose```

通过 docker-compose version 看到版本信息算是安装完成。

编写docker-compose.yml

  1. 目录结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
├── docker-compose.yaml
├── prometheus
│ ├── rules
│ │ └── *(rules).yaml/json
│ ├── nodes
│ │ └── *(nodes).yaml
│ ├── data
│ │ └── ... # 挂载prom的data数据
│ └── prometheus.yaml
├── alertmanager
│ ├── templates
│ │ └── *.tmpl
│ └── alertmanager.yaml
├── grafana
│ ├── data
│ │ ├── plugins #插件目录
│ │ ├── png
│ │ └── grafana.db
│ └── grafana.ini
├── snmp(snmp_exporter)
│ └── snmp.yml
└── blackbox(balck box-exporter)
└── blackbox.yml
  1. 根据结构编写
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
version: "3.8"

networks:
monitor:
driver: bridge

services:
snmp-exporter:
image: prom/snmp-exporter:v0.19.0
container_name: snmp
restart: always
expose:
- 9116
volumes:
- "./snmp/snmp.yml:/etc/snmp_exporter/snmp.yml"
networks:
- monitor

node-exporter:
image: prom/node-exporter:v1.0.1
container_name: node-exporter
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.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
expose:
- 9100
networks:
- monitor

blackbox-exporter:
image: prom/blackbox-exporter:v0.18.0
expose:
- 9115
container_name: blackbox
restart: unless-stopped
volumes:
- "./blackbox/:/config"
command:
- "--config.file=/config/blackbox.yml"
networks:
- monitor

cadvisor:
image: google/cadvisor:v0.33.0
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
restart: unless-stopped
expose:
- 8080
networks:
- monitor
depends_on:
- prometheus

prometheus:
image: prom/prometheus:v2.22.1
container_name: prom
restart: always
user: "0"
ports:
- "9090:9090"
volumes:
- "./prometheus/:/prometheus"
command:
- "--storage.tsdb.retention.time=60d"
- "--config.file=/prometheus/prometheus.yml"
- "--web.enable-lifecycle"
networks:
- monitor
depends_on:
- blackbox-exporter
- node-exporter
- snmp-exporter

alertmanager:
image: prom/alertmanager:v0.21.0
restart: always
container_name: alert
volumes:
- ./alertmanager/:/alert
command:
- '--config.file=/alert/alertmanager.yml'
- '--storage.path=/alert'
ports:
- "9093:9093"
networks:
- monitor
depends_on:
- prometheus

grafana:
image: chenwl2016/grafana-chs:0.1.4
restart: always
container_name: grafana
user: "0"
ports:
- "3000:3000"
environment:
- "GF_SECURITY_ADMIN_PASSWORD=helloGf"
- "GF_RENDERING_SERVER_URL=http://renderer:8081/render"
- "GF_RENDERING_CALLBACK_URL=http://grafana:3000/"
- "GF_LOG_FILTERS=rendering:debug"
volumes:
- ./grafana/:/grafana
- ./grafana/data/:/var/lib/grafana
networks:
- monitor
depends_on:
- prometheus
- renderer

renderer:
image: grafana/grafana-image-renderer:latest
container_name: renderer
ports:
- "8081:8081"
environment:
- "ENABLE_METRICS=true"
- "RENDERING_MODE=clustered"
- "RENDERING_CLUSTERING_MODE=context"
- "RENDERING_CLUSTERING_MAX_CONCURRENCY=5"
networks:
- monitor

当前的配置,主要是文件存储到宿主机上。通过容器挂载卷到容器内部。存储到宿主机目录时prometheus与grafana 会有权限问题。 配置中我是在user: “0”账户下,挂载目录 prometheus/grafana 都是 root:root。如果你不是root 需要根据uid:gid进行对应的配置。

prometheus 目录下的nodes是file_sd的配置文件,结合实际考虑docker-compose 的具体细节。

请我吃辣条吧?!