标签:__ regex 配置文件 kubernetes 标签 Prometheus service 重打 configs
一、配置文件
1、prometheus 配置文件主体
Configuration | Prometheus 官网的配置说明
主要分为7大块的配置:全局、报警规则、抓取、报警alertmanager实例地址、后端存储写入api地址、后端存储读api地址、链路跟踪(tracing)
注:除了在全局配置抓取间隔,还可在每个单独的 job 中配置抓取间隔和超时
# 此片段指定的是prometheus的全局配置, 比如采集间隔,抓取超时时间等. global: # 抓取间隔 [ scrape_interval: <duration> | default = 1m ] # 抓取超时时间 [ scrape_timeout: <duration> | default = 10s ] # 评估规则间隔 [ evaluation_interval: <duration> | default = 1m ] # 外部一些标签设置 external_labels: [ <labelname>: <labelvalue> ... ] # File to which PromQL queries are logged. # Reloading the configuration will reopen the file. [ query_log_file: <string> ] # 此片段指定报警规则文件, prometheus根据这些规则信息,会推送报警信息到alertmanager中。 rule_files: [ - <filepath_glob> ... ] # 此片段指定抓取配置,prometheus的数据采集通过此片段配置。 scrape_configs: [ - <scrape_config> ... ] # 此片段指定报警配置, 这里主要是指定prometheus将报警规则推送到指定的alertmanager实例地址。 alerting: alert_relabel_configs: [ - <relabel_config> ... ] alertmanagers: [ - <alertmanager_config> ... ] # 指定后端的存储的写入api地址。 remote_write: [ - <remote_write> ... ] # 指定后端的存储的读取api地址。 remote_read: [ - <remote_read> ... ] # 链路追踪 tracing: [ <tracing_config> ]
2、scrape_configs (其中的抓取配置比较重要)
一个scrape_config 片段指定一组目标和参数, 目标就是实例,指定采集的端点, 参数描述如何采集这些实例, 配置文件格式如下
# The job name assigned to scraped metrics by default. job_name: <job_name> # 抓取间隔,默认继承global值。 [ scrape_interval: <duration> | default = <global_config.scrape_interval> ] # 抓取超时时间,默认继承global值。 [ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ] # 抓取路径, 默认是/metrics [ metrics_path: <path> | default = /metrics ] [ honor_labels: <boolean> | default = false ] # honor_timestamps controls whether Prometheus respects the timestamps present [ honor_timestamps: <boolean> | default = true ] # 指定采集使用的协议,http或者https。 [ scheme: <scheme> | default = http ] # 指定url参数。 params: [ <string>: [<string>, ...] ] # 指定认证信息。 basic_auth: [ username: <string> ] [ password: <secret> ] [ password_file: <string> ] # 指定token的数值, 用户get metrics认证使用 [ bearer_token: <secret> ] # 指定获取token的文件, 用户get metrics认证使用 [ bearer_token_file: /path/to/bearer/token/file ] # 指定获取metrics时需要的tls证书 tls_config: [ <tls_config> ] # Optional proxy URL. [ proxy_url: <string> ] # List of Azure service discovery configurations. azure_sd_configs: [ - <azure_sd_config> ... ] # List of Consul service discovery configurations. consul_sd_configs: [ - <consul_sd_config> ... ] # List of DNS service discovery configurations. dns_sd_configs: [ - <dns_sd_config> ... ] # List of EC2 service discovery configurations. ec2_sd_configs: [ - <ec2_sd_config> ... ] # List of OpenStack service discovery configurations. openstack_sd_configs: [ - <openstack_sd_config> ... ] # List of file service discovery configurations. file_sd_configs: [ - <file_sd_config> ... ] # List of GCE service discovery configurations. gce_sd_configs: [ - <gce_sd_config> ... ] # List of Kubernetes service discovery configurations. kubernetes_sd_configs: [ - <kubernetes_sd_config> ... ] # List of Marathon service discovery configurations. marathon_sd_configs: [ - <marathon_sd_config> ... ] # List of AirBnB's Nerve service discovery configurations. nerve_sd_configs: [ - <nerve_sd_config> ... ] # List of Zookeeper Serverset service discovery configurations. serverset_sd_configs: [ - <serverset_sd_config> ... ] # List of Triton service discovery configurations. triton_sd_configs: [ - <triton_sd_config> ... ] # 静态指定服务job(还有多种方式服务发现方式) static_configs: [ - <static_config> ... ] # 控制采集哪些数据标签,可以删除不必要的标签 relabel_configs: [ - <relabel_config> ... ] # 添加、编辑或修改指标的标签值或标签格式。 metric_relabel_configs: [ - <relabel_config> ... ] [ sample_limit: <int> | default = 0 ]
2.1 relabel_configs(位于scrape_configs配置下)
relable_configss是功能强大的工具,就是Relabel可以在Prometheus采集数据之前,通过Target实例的Metadata信息,动态重新写入Label的值。
除此之外,我们还能根据Target实例的Metadata信息选择是否采集或者忽略该Target实例。
relabel_configs配置格式如下:
[ source_labels: '[' <labelname> [, ...] ']' ] # 默认分隔符 [ separator: <string> | default = ; ] [ target_label: <labelname> ] 正则匹配 [ regex: <regex> | default = (.*) ] [ modulus: <uint64> ] [ replacement: <string> | default = $1 ] [ action: <relabel_action> | default = replace ]
其中action主要包括:
replace:默认,通过regex匹配source_label的值,使用replacement来引用表达式匹配的分组
keep:删除regex与连接不匹配的目标 source_labels值
drop:删除regex与连接匹配的目标 source_labels值
labeldrop:删除regex匹配的标签
labelkeep:删除regex不匹配的标签
hashmod:设置target_label为modulus连接的哈希值source_labels
labelmap:匹配regex所有标签名称。然后复制匹配标签的值进行分组,replacement分组引用({2},…)替代
prometheus中的数值都是key:value格式, 其中replace、keep、drop都是对value的操作, labelmap、labeldrop、labelkeep都是对key的操作
replace用法
replace是action的默认值, 通过regex匹配source_label的值,使用replacement来重新组合匹配到的标签,给到 target_label。
- action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 source_labels: - __address__ - __meta_kubernetes_service_annotation_prometheus_io_port target_label: __address__
上面的列子中address的值为$1:$2
, 其中 $1
是正则表达式([^:]+)(?::\d+)?
从address中获取, $2
是正则表达式(\d+)从(\d+)
中获取, 最后的address的数值为192.168.1.1:9100
删除标签(keep和drop)(标签是key:value,键值对)
keep:
regex
匹配到的标签值保留,其余的 source_labels
上的各标签的值,则删除value。
drop:
regex
匹配到的source_labels
上的各标签值,则删除value。
labelmap用法
labelmap的用法和上面说到replace、keep、drop不同, labelmap匹配的是标签名称key, 而replace、keep、drop匹配的是value
relabel_configs: - action: labelmap regex: __meta_kubernetes_service_label_(.+)
上面例子中只要匹配到正则表达式__meta_kubernetes_service_label_(.+)
的标签, 就将标签重写为(.+)
中的内容, 效果如下:
原标签: __meta_kubernetes_service_label_test=111 重写后: test=111
labeldrop用法
使用labeldrop则可以对Target标签进行过滤,删除符合过滤条件的标签,例如
relabel_configs: - action: labeldrop regex: __meta_kubernetes_service_label_(.+)
该配置会使用regex匹配当前target中的所有标签, 删除符合匹配规则的标签, 其余保留
labelkeep用法
使用labelkeep则可以对Target标签进行过滤,仅保留符合过滤条件的标签,例如:
relabel_configs: - action: labelkeep regex: __meta_kubernetes_service_label_(.+)
该配置会使用regex匹配当前target中的所有标签, 保留符合规则的标签, 反之不符合的移除
2.2 metric_relabel_configs(对获取metrics之后对标签的操作)
上面我们说到relabel_config是获取metrics之前对标签的重写,metric_relabel_configs是对获取metrics之后对标签的操作, metric_relabel_configs能够确定我们保存哪些指标,删除哪些指标,以及这些指标将是什么样子。
metric_relabel_configs的配置和relabel_config的配置基本相同,
2.3 static_configs
主要用途为指定exporter获取metrics数据的目标, 可以指定prometheus、 mysql、 nginx等目标
简单理解就是prometheus访问 http://localhost:port/metrics 获取监控数据
scrape_configs: - job_name: node static_configs: - targets: - 10.40.58.153:9100 - 10.40.61.116:9100 - 10.40.58.154:9100
2.4 kubernetes_sd_configs
kubernetes的服务发现可以刮取以下几种数据
- node
- service
- pod
- endpoints
- ingress
通过指定kubernetes_sd_config的模式为endpoints,Prometheus会自动从Kubernetes中发现到所有的endpoints节点并作为当前Job监控的Target实例。如下所示,
kubernetes_sd_configs: - role: endpoints
实例:该配置是使用kubernetes的发现机制发现kube-apiservers
scrape_configs: - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token job_name: kubernetes-apiservers kubernetes_sd_configs: - role: endpoints relabel_configs: - action: keep regex: default;kubernetes;https source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true
实例2:该配置是自动发现kubernetes中的endpoints
- job_name: 'kubernetes-service-endpoints' kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] action: replace target_label: __scheme__ regex: (https?) - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] action: replace target_label: __address__ regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 - action: labelmap regex: __meta_kubernetes_service_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_service_name] action: replace target_label: kubernetes_name - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: kubernetes_node
可以看到relable_configs中的规则很多, 具体的内容如下
- job名称为kubernetes-service-endpoints(job-name: kubernetes-service-endpoints)
- 获取kubernetes中endpoints的相关信息(role: endpoints)
- 使用http的方式获取信息(没有配置使用默认配置http)
- relabel配置部分:
-
annotations中必须存在
prometheus.io/scrape: "true"
配置才会被promethues发现 -
__scheme__
的值为__meta_kubernetes_service_annotation_prometheus_io_scheme的value, 需要满足正则表达式(https?)
-
__metrics_path__
的值为__meta_kubernetes_service_annotation_prometheus_io_path的value, 满足正则表达式(.+)
-
__address__
的value替换为IP:port的方式 -
kubernetes_namespace的value replace为__meta_kubernetes_namespace的value
-
kubernetes_name的value replace为__meta_kubernetes_service_name的value
-
kubernetes_node的value replace为__meta_kubernetes_pod_node_name的value
-
获取信息如下
up{app="prometheus",app_kubernetes_io_managed_by="Helm",chart="prometheus-11.3.0",component="node-exporter",heritage="Helm",instance="10.40.61.116:9100",job="kubernetes-service-endpoints",kubernetes_name="prometheus-node-exporter",kubernetes_namespace="devops",kubernetes_node="py-modelo2o08cn-p005.pek3.example.com",release="prometheus"}
Relabel用来重写target的标签
每个Target可以配置多个Relabel动作,按照配置文件顺序应用
Target包含一些内置的标签(以'__'开头),都可以用于relabel,在relabel时未保留,内置标签将被删除
Target([source_label,…]) -> relabel -> Target ([target_label,…])
Relabel的action
ACTION | Regex匹配 | 操作对象 | 重要参数 | 描述 |
---|---|---|---|---|
keep | 标签值 | Target | 源标签、regex | 丢弃指定源标签的标签值没有匹配到regex的target |
Drop | 标签值 | Target | 源标签、regex | 丢弃指定源标签的标签值匹配到regex的target |
labeldrop | 标签名 | Label | Regex | 丢弃匹配到regex 的标签 |
labelkeep | 标签名 | Label | Regex | 丢弃没有匹配到regex 的标签 |
Replace | 标签值 | Label名+值 | 源标签、目标标签、替换(值)、regex(值) | 更改标签名、更改标签值、合并标签 |
hashmod | 无 | 标签名+值 | 源标签、hash长度、target标签 | 将多个源标签的值进行hash,作为target标签的值 |
labelmap | 标签名 | 标签名 | regex、replacement | Regex匹配名->replacement用原标签名的部分来替换名 |
replace是缺省action,可以不配置action
使用labeldrop 和labelkeep Relabel后需要注意保证metrics+labels唯一
查看源标签
过滤target
- 使用keep,保留标签值匹配regex的targets
scrape_configs: - … - job_name: "cephs" relabel_configs: - action: keep source_labels: - __address__ regex: ceph01.*
prometheus配置详解_mnasd的博客-CSDN博客_prometheus 配置
Prometheus重新标记 - 简书 (jianshu.com)
标签:__,regex,配置文件,kubernetes,标签,Prometheus,service,重打,configs 来源: https://www.cnblogs.com/dgp-zjz/p/16291626.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。