-
Notifications
You must be signed in to change notification settings - Fork 0
/
prometheus.yml.tmpl
220 lines (171 loc) · 7.69 KB
/
prometheus.yml.tmpl
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
{{- define "normkey" -}}
{{- $last_part := index (split . "/") 4 -}}
{{- $removed_dots := replace $last_part "." "_" -1 -}}
{{- replace $removed_dots "-" "_" -1 -}}
{{- end -}}
{{- define "promlabel" -}}
{{- $label := .Key -}}
{{- $value := .Value -}}
{{- $len := split $label "prometheus.label." -}}
{{- if eq (len $len) 2 -}}
{{- $removed_prefix := replace $label "prometheus.label." "" -1 -}}
{{ template "normkey" $removed_prefix }}: '{{ $value }}'
{{- end -}}
{{- end -}}
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 1m
external_labels:
cluster: '{{getenv "PROMETHEUS_FEDERATION_CLUSTER" (getv "/name" "default")}}'
scrape_configs:
{{- range $stack_name := ls "/stacks/" -}}
{{- range $service_name := ls (printf "/stacks/%s/services/" $stack_name) -}}
{{- if eq "service" (getv (printf "/stacks/%s/services/%s/kind" $stack_name $service_name)) -}}
{{ if exists (printf "/stacks/%s/services/%s/labels/prometheus.port" $stack_name $service_name) -}}
{{- $port := getv (printf "/stacks/%s/services/%s/labels/prometheus.port" $stack_name $service_name) }}
- job_name: '{{ getv (printf "/stacks/%s/services/%s/labels/prometheus.job_name" $stack_name $service_name) (printf "%s_%s" $stack_name $service_name) }}'
scrape_interval: '{{ getv (printf "/stacks/%s/services/%s/labels/prometheus.scrape_interval" $stack_name $service_name) "10s" }}'
scrape_timeout: '{{ getv (printf "/stacks/%s/services/%s/labels/prometheus.scrape_timeout" $stack_name $service_name) "10s" }}'
metrics_path: '{{ getv (printf "/stacks/%s/services/%s/labels/prometheus.metrics_path" $stack_name $service_name) "/metrics" }}'
{{ $bearertoken := getv (printf "/stacks/%s/services/%s/labels/prometheus.bearer_token" $stack_name $service_name) "" }}
{{ if ne "" $bearertoken }}
bearer_token: '{{ $bearertoken }}'
{{ end }}
{{ $metricRelabelPattern := getv (printf "/stacks/%s/services/%s/labels/prometheus.metric_relabel_pattern" $stack_name $service_name) "" }}
{{ if eq "blackbox" $metricRelabelPattern }}
static_configs:
{{- range $b_stack_name := ls "/stacks/" -}}
{{- range $b_service_name := ls (printf "/stacks/%s/services/" $b_stack_name) -}}
{{ $blackbox_module := getv (printf "/stacks/%s/services/%s/labels/prometheus.blackbox.module" $b_stack_name $b_service_name) "" }}
{{ $blackbox_target := getv (printf "/stacks/%s/services/%s/labels/prometheus.blackbox.target" $b_stack_name $b_service_name) "" }}
{{ if ne "" $blackbox_module }}
{{ if ne "" $blackbox_target }}
- targets: ['{{ $blackbox_target }}']
labels:
__stack_name: '{{ $b_stack_name }}'
__service_name: '{{ $b_service_name }}'
{{ $blackbox_container := index (lsdir (printf "/stacks/%s/services/%s/containers/" $stack_name $service_name)) 0 }}
__blackbox_container_address: '{{ $blackbox_container }}.rancher.internal:{{ $port }}'
module: '{{ $blackbox_module }}'
{{ $type := index (split $blackbox_module "_") 0 }}
job: 'blackbox-{{ $type }}'
{{- end -}}
{{- end -}}
{{- end -}}
{{- end }}
relabel_configs:
- source_labels: [module]
target_label: __param_module
- action: labeldrop
regex: 'module'
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- source_labels: [__blackbox_container_address]
target_label: __address__
- action: 'replace'
source_labels: ['__stack_name']
target_label: 'stack_name'
- action: 'replace'
source_labels: ['__service_name']
target_label: 'service_name'
{{ else }}
static_configs:
{{- range $container := lsdir (printf "/stacks/%s/services/%s/containers/" $stack_name $service_name) }}
- targets: ['{{ $container }}.rancher.internal:{{ $port }}']
labels:
{{- $host_uuid := getv (printf "/containers/%s/host_uuid" $container) -}}
{{- range $host_name := ls "/hosts/" -}}
{{- if eq $host_uuid (getv ( printf "/hosts/%s/uuid" . )) }}
instance: '{{ $host_name }}'
__host_ip: '{{ getv (printf "/hosts/%s/agent_ip" $host_name) }}'
{{- range gets (printf "/hosts/%s/labels/*" $host_name) }}
__host_label_{{ template "normkey" .Key }}: '{{ .Value }}'
{{- end -}}
{{- end -}}
{{- end -}}
{{- range gets (printf "/stacks/%s/services/%s/labels/*" $stack_name $service_name) }}
{{ template "promlabel" . }}
{{- end -}}
__stack_name: '{{ $stack_name }}'
__service_name: '{{ $service_name }}'
__container_name: '{{ $container }}'
__container_id: '{{ getv (printf "/containers/%s/external_id" $container) }}'
{{- end -}}
{{- if eq "" $metricRelabelPattern }}
relabel_configs:
- action: 'replace'
source_labels: ['__container_id']
target_label: 'container_id'
- action: 'replace'
source_labels: ['__container_name']
target_label: 'container_name'
- action: 'replace'
source_labels: ['__stack_name']
target_label: 'stack_name'
- action: 'replace'
source_labels: ['__service_name']
target_label: 'service_name'
{{- else if eq "cadvisor" $metricRelabelPattern }}
metric_relabel_configs:
- action: 'replace'
source_labels: ['container_label_io_rancher_project_name']
target_label: 'stack_name'
- action: 'replace'
source_labels: ['container_label_io_rancher_stack_service_name']
regex: '[a-zA-Z0-9_-]*/([a-zA-Z0-9_-]*)'
target_label: 'service_name'
- action: 'replace'
source_labels: ['id']
regex: '/docker/(.+)'
target_label: 'container_id'
- action: 'replace'
source_labels: ['container_label_io_rancher_container_system']
target_label: 'system'
- action: 'labelmap'
regex: 'container_label_prometheus_label_(.+)'
- action: 'replace'
source_labels: ['image']
target_label: 'image_name'
- action: 'replace'
source_labels: ['name']
target_label: 'container_name'
- action: 'labeldrop'
regex: '(id|image|name|container_label_.*)'
{{- else if eq "node" $metricRelabelPattern }}
relabel_configs:
- action: 'labelmap'
regex: '__host_label_(.+)'
- action: 'labeldrop'
regex: 'io_rancher_.*'
{{- else if eq "rancher" $metricRelabelPattern }}
metric_relabel_configs:
- action: 'replace'
source_labels: ['__name__', 'name']
regex: 'rancher_stack_health_status;(.+)'
target_label: 'stack_name'
- action: 'replace'
source_labels: ['__name__', 'name']
regex: '(rancher_service_health_status|rancher_service_scale|rancher_service_state);(.+)'
replacement: '$2'
target_label: 'service_name'
- action: 'replace'
source_labels: ['__name__', 'exported_stack_name']
regex: '(rancher_service_health_status|rancher_service_scale|rancher_service_state);(.+)'
replacement: '$2'
target_label: 'stack_name'
- action: 'replace'
source_labels: ['__name__']
regex: 'rancher_service_[a-z_]*'
replacement: ''
target_label: 'exported_stack_name'
- action: 'replace'
source_labels: ['__name__']
regex: '(rancher_stack_health_status|rancher_service_health_status|rancher_service_scale|rancher_service_state)'
replacement: ''
target_label: 'name'
{{- end -}}
{{ end -}}
{{ end }}{{ end }}{{ end }}{{ end }}