-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompose.yml
More file actions
165 lines (155 loc) · 6.26 KB
/
Copy pathcompose.yml
File metadata and controls
165 lines (155 loc) · 6.26 KB
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
name: monitoring
services:
# VictoriaMetrics single-node: stores metrics
victoriametrics:
image: docker.io/victoriametrics/victoria-metrics:v1.139.0
container_name: victoriametrics
restart: unless-stopped
volumes:
- vmdata:/storage
command:
- "--storageDataPath=/storage"
- "--httpListenAddr=:8428"
- "--vmalert.proxyURL=http://vmalert:8880"
- "--retentionPeriod=12" # 12 months retention
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8428/-/healthy"]
interval: 10s
timeout: 5s
retries: 5
labels:
- "pangolin.public-resources.victoriametrics.name=VictoriaMetrics"
- "pangolin.public-resources.victoriametrics.protocol=http"
- "pangolin.public-resources.victoriametrics.full-domain=victoriametrics.afges.eu"
- "pangolin.public-resources.victoriametrics.targets[0].method=http"
- "pangolin.public-resources.victoriametrics.targets[0].hostname=victoriametrics"
- "pangolin.public-resources.victoriametrics.targets[0].port=8428"
- "pangolin.public-resources.victoriametrics.targets[0].healthcheck.hostname=victoriametrics"
- "pangolin.public-resources.victoriametrics.targets[0].healthcheck.port=8428"
- "pangolin.public-resources.victoriametrics.targets[0].healthcheck.path=/-/healthy"
- "pangolin.public-resources.victoriametrics.targets[0].healthcheck.status=200"
# VMAgent: lightweight scraping agent
vmagent:
image: docker.io/victoriametrics/vmagent:v1.139.0
container_name: vmagent
restart: unless-stopped
depends_on:
victoriametrics:
condition: service_healthy
volumes:
- vmagentdata:/vmagentdata
- ./config/vmagent/scrape.yml:/etc/prometheus/prometheus.yml:z,ro
command:
- "--promscrape.config=/etc/prometheus/prometheus.yml"
- "--remoteWrite.url=http://victoriametrics:8428/api/v1/write"
# VMAlert: evaluates alerting & recording rules
vmalert:
image: docker.io/victoriametrics/vmalert:v1.139.0
container_name: vmalert
restart: unless-stopped
depends_on:
victoriametrics:
condition: service_healthy
volumes:
- ./config/vmalert/rules:/etc/alerts:z,ro
command:
- "--datasource.url=http://victoriametrics:8428/"
- "--remoteRead.url=http://victoriametrics:8428/"
- "--remoteWrite.url=http://vmagent:8429/"
- "--notifier.url=http://alertmanager:9093/"
- "--rule=/etc/alerts/*.yml"
- "--external.url=http://grafana:3000"
- '--external.alert.source=explore?orgId=1&left={"datasource":"VictoriaMetrics","queries":[{"expr":{{.Expr|jsonEscape|queryEscape}},"refId":"A"}],"range":{"from":"{{ .ActiveAt.UnixMilli }}","to":"now"}}'
# Alertmanager: receives notifications from vmalert
alertmanager:
image: docker.io/prom/alertmanager:v0.28.1
container_name: alertmanager
restart: unless-stopped
volumes:
- ./config/alertmanager/alertmanager.yml:/config/alertmanager.yml:z,ro
- alertmanagerdata:/alertmanager
command:
- "--config.file=/config/alertmanager.yml"
- "--storage.path=/alertmanager"
labels:
- "pangolin.public-resources.alertmanager.name=Alertmanager"
- "pangolin.public-resources.alertmanager.protocol=http"
- "pangolin.public-resources.alertmanager.full-domain=alertmanager.afges.eu"
- "pangolin.public-resources.alertmanager.targets[0].method=http"
- "pangolin.public-resources.alertmanager.targets[0].hostname=alertmanager"
- "pangolin.public-resources.alertmanager.targets[0].port=9093"
- "pangolin.public-resources.alertmanager.targets[0].healthcheck.hostname=alertmanager"
- "pangolin.public-resources.alertmanager.targets[0].healthcheck.port=9093"
- "pangolin.public-resources.alertmanager.targets[0].healthcheck.path=/-/healthy"
- "pangolin.public-resources.alertmanager.targets[0].healthcheck.status=200"
# PVE Exporter: Proxmox-specific metrics (VM/CT status, storage, etc.)
pve-exporter:
image: docker.io/prompve/prometheus-pve-exporter:latest
container_name: pve-exporter
restart: unless-stopped
env_file:
- env/pve.env
# Grafana: dashboards and visualization
grafana:
image: docker.io/grafana/grafana:12.2.0
container_name: grafana
restart: unless-stopped
depends_on:
victoriametrics:
condition: service_healthy
env_file:
- env/grafana.env
volumes:
- grafanadata:/var/lib/grafana
- ./config/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:z,ro
- ./config/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards:z,ro
labels:
- "pangolin.public-resources.grafana.name=Grafana"
- "pangolin.public-resources.grafana.protocol=http"
- "pangolin.public-resources.grafana.full-domain=grafana.afges.eu"
- "pangolin.public-resources.grafana.targets[0].method=http"
- "pangolin.public-resources.grafana.targets[0].hostname=grafana"
- "pangolin.public-resources.grafana.targets[0].port=3000"
- "pangolin.public-resources.grafana.targets[0].healthcheck.hostname=grafana"
- "pangolin.public-resources.grafana.targets[0].healthcheck.port=3000"
- "pangolin.public-resources.grafana.targets[0].healthcheck.path=/api/health"
- "pangolin.public-resources.grafana.targets[0].healthcheck.status=200"
# Socket proxy: limits Docker API access for Newt (read-only, CONTAINERS+EVENTS only)
socket-proxy:
image: docker.io/tecnativa/docker-socket-proxy:latest
container_name: socket-proxy
restart: unless-stopped
environment:
CONTAINERS: 1
EVENTS: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- socket-proxy
# Newt: Pangolin tunnel client – exposes services through the Pangolin reverse proxy
newt:
image: docker.io/fosrl/newt:latest
container_name: newt
restart: unless-stopped
depends_on:
- socket-proxy
env_file:
- env/newt.env
environment:
DOCKER_SOCKET: tcp://socket-proxy:2375
networks:
- default
- socket-proxy
volumes:
vmdata: {}
vmagentdata: {}
grafanadata: {}
alertmanagerdata: {}
networks:
default:
driver: bridge
name: monitoring
socket-proxy:
driver: bridge
name: monitoring-socket-proxy
internal: true