我是靠谱客的博主 活力哑铃,这篇文章主要介绍Prometheus-配置解析,现在分享给大家,希望可以做个参考。

1.Prometheus整体架构图

2.配置文件

复制代码
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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
# 全局配置 global: scrape_interval: 15s # 多久 收集 一次数据 evaluation_interval: 30s # 多久评估一次 规则 scrape_timeout: 10s # 每次 收集数据的 超时时间 # 当Prometheus和外部系统(联邦, 远程存储, Alertmanager)通信的时候,添加标签到任意的时间序列或者报警 external_labels: monitor: codelab foo: bar # 规则文件, 可以使用通配符 rule_files: - "first.rules" - "my/*.rules" # 远程写入功能相关的设置 remote_write: - url: http://remote1/push write_relabel_configs: - source_labels: [__name__] regex: expensive.* action: drop - url: http://remote2/push # 远程读取相关功能的设置 remote_read: - url: http://remote1/read read_recent: true - url: http://remote3/read read_recent: false required_matchers: job: special # 收集数据 配置 列表 scrape_configs: - job_name: prometheus # 必须配置, 自动附加的job labels, 必须唯一 honor_labels: true # 标签冲突, true 为以抓取的数据为准 并 忽略 服务器中的, false 为 通过重命名来解决冲突 # scrape_interval is defined by the configured global (15s). # scrape_timeout is defined by the global default (10s). metrics_path: '/metrics' # scheme defaults to 'http'. # 文件服务发现配置 列表 file_sd_configs: - files: # 从这些文件中提取目标 - foo/*.slow.json - foo/*.slow.yml - single/file.yml refresh_interval: 10m # 刷新文件的 时间间隔 - files: - bar/*.yaml # 使用job名作为label的 静态配置目录 的 列表 static_configs: - targets: ['localhost:9090', 'localhost:9191'] labels: my: label your: label # 目标节点 重新打标签 的配置 列表. 重新标记是一个功能强大的工具,可以在抓取目标之前动态重写目标的标签集。 可以配置多个,按照先后顺序应用 relabel_configs: - source_labels: [job, __meta_dns_name] # 从现有的标签中选择源标签, 最后会被 替换, 保持, 丢弃 regex: (.*)some-[regex] # 正则表达式, 将会提取source_labels中匹配的值 target_label: job # 在替换动作中将结果值写入的标签. replacement: foo-${1} # 如果正则表达匹配, 那么替换值. 可以使用正则表达中的 捕获组 # action defaults to 'replace' - source_labels: [abc] # 将abc标签的内容复制到cde标签中 target_label: cde - replacement: static target_label: abc - regex: replacement: static target_label: abc bearer_token_file: valid_token_file # 可选的, bearer token 文件的信息 - job_name: service-x # HTTP basic 认证信息 basic_auth: username: admin_name password: "multilinenmysecretntest" scrape_interval: 50s # 对于该job, 多久收集一次数据 scrape_timeout: 5s sample_limit: 1000 # 每次 收集 样本数据的限制. 0 为不限制 metrics_path: /my_path # 从目标 获取数据的 HTTP 路径 scheme: https # 配置用于请求的协议方案 # DNS 服务发现 配置列表 dns_sd_configs: - refresh_interval: 15s names: # 要查询的DNS域名列表 - first.dns.address.domain.com - second.dns.address.domain.com - names: - first.dns.address.domain.com # refresh_interval defaults to 30s. # 目标节点 重新打标签 的配置 列表 relabel_configs: - source_labels: [job] regex: (.*)some-[regex] action: drop - source_labels: [__address__] modulus: 8 target_label: __tmp_hash action: hashmod - source_labels: [__tmp_hash] regex: 1 action: keep - action: labelmap regex: 1 - action: labeldrop regex: d - action: labelkeep regex: k # metric 重新打标签的 配置列表 metric_relabel_configs: - source_labels: [__name__] regex: expensive_metric.* action: drop - job_name: service-y # consul 服务发现 配置列表 consul_sd_configs: - server: 'localhost:1234' # consul API 地址 token: mysecret services: ['nginx', 'cache', 'mysql'] # 被检索目标的 服务 列表. 如果不定义那么 所有 服务 都会被 收集 scheme: https tls_config: ca_file: valid_ca_file cert_file: valid_cert_file key_file: valid_key_file insecure_skip_verify: false relabel_configs: - source_labels: [__meta_sd_consul_tags] separator: ',' regex: label:([^=]+)=([^,]+) target_label: ${1} replacement: ${2} - job_name: service-z # 收集 数据的 TLS 设置 tls_config: cert_file: valid_cert_file key_file: valid_key_file bearer_token: mysecret - job_name: service-kubernetes # kubernetes 服务 发现 列表 kubernetes_sd_configs: - role: endpoints # 必须写, 必须是endpoints, service, pod, node, 或者 ingress api_server: 'https://localhost:1234' basic_auth: # HTTP basic 认证信息 username: 'myusername' password: 'mysecret' - job_name: service-kubernetes-namespaces kubernetes_sd_configs: - role: endpoints # 应该被发现的 kubernetes 对象 实体 api_server: 'https://localhost:1234' # API Server的地址 namespaces: # 可选的命名空间发现, 如果省略 那么所有的命名空间都会被使用 names: - default - job_name: service-marathon # Marathon 服务发现 列表 marathon_sd_configs: - servers: - 'https://marathon.example.com:443' tls_config: cert_file: valid_cert_file key_file: valid_key_file - job_name: service-ec2 ec2_sd_configs: - region: us-east-1 access_key: access secret_key: mysecret profile: profile - job_name: service-azure azure_sd_configs: - subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11 tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2 client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33C client_secret: mysecret port: 9100 - job_name: service-nerve nerve_sd_configs: - servers: - localhost paths: - /monitoring - job_name: 0123service-xxx metrics_path: /metrics static_configs: - targets: - localhost:9090 - job_name: 測試 metrics_path: /metrics static_configs: - targets: - localhost:9090 - job_name: service-triton triton_sd_configs: - account: 'testAccount' dns_suffix: 'triton.example.com' endpoint: 'triton.example.com' port: 9163 refresh_interval: 1m version: 1 tls_config: cert_file: testdata/valid_cert_file key_file: testdata/valid_key_file # Alertmanager相关的配置 alerting: alertmanagers: - scheme: https static_configs: - targets: - "1.2.3.4:9093" - "1.2.3.5:9093" - "1.2.3.6:9093"

3.基于consul的服务发现 

  注意: Prometheus的consul_sd_config使用的是catalog的API。

使用http接口注册consul

复制代码
1
# curl -X PUT -d '{"ID": "node_exporter", "Name": "node_exporter", "Address": "10.6.28.37", "Port": 9100, "Tags": ["lock"], "EnableTagOverride": false}' http://10.6.28.37:8500/v1/agent/service/register

  

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# curl -s http://10.6.28.37:8500/v1/agent/services|jq { "node_exporter": { "ID": "node_exporter", "Service": "node_exporter", "Tags": [ "lock" ], "Address": "10.6.28.37", "Port": 9100, "EnableTagOverride": false, "CreateIndex": 0, "ModifyIndex": 0 } }

  

4.prometheus配置详解

  当查询的时候存在十分复杂的表达式,这样会降低prometheus的性能可以使用 Recording rules

  允许您预先计算经常需要的或计算上昂贵的表达式,并将其结果保存为新的 time series。这对于仪表板尤其有用,每次刷新时它都需要重复查询相同的表达式。 将复杂的计算后台计算 放到一个新的时序里

 

  
  二元算术运算符 应用于 应用于 即时向量/即时向量 时

    运算符将应用于左侧向量中的元素及其在右侧向量中的匹配到的元素.
    运算结果被传播到结果向量中,并且度量名称被丢弃.
    那些在右侧向量中没有匹配条目的条目 不是结果的一部分。

 

  例如:

复制代码
1
employee_age_bucket_bucket{le=~"20|30|40"} + employee_age_bucket_bucket{le=~"30|40|50"}

 返回的结果是:

复制代码
1
2
{instance="10.0.86.71:8080",job="prometheus",le="30"} 6000 {instance="10.0.86.71:8080",job="prometheus",le="40"} 8000

  

 

转载于:https://www.cnblogs.com/liujiliang/p/10080849.html

最后

以上就是活力哑铃最近收集整理的关于Prometheus-配置解析的全部内容,更多相关Prometheus-配置解析内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部