如何在 Prometheus-operator 上重新标记抓取作业?
How to relabel scraping jobs on Prometheus-operator?
我是第一次尝试 prometheus-operator,但仍在努力解决通过它管理 Prometheus 的差异。
部署非常简单,编辑规则也是如此,但是在使用 Prometheus-operator 时尝试使用 static_configs
重新标记出口商时,我找不到自己的方式。
我过去做的是自定义 prometheus.yml
并添加 static_configs
以包含每个出口商工作名称的标签。
我知道在 Prometheus-operator 的引擎盖下,我们拥有与通常相同的设置,但我不确定如何使用运算符从 static_config
配置中获得相同的结果。
据我所知,我现在必须在与我的导出器相关的服务监视器上设置重新标记,但是我尝试过的所有配置都没有结果:
按照问题 1166, and StaticConfigs
as described on issue 1086 中的描述尝试 metricRelabelings
,但没有成功。
例如,我曾经为 kubernetes-cadvisor
出口商在 static_config
上设置标签,这样我的自定义标签就会显示在我的出口商在摄取时间收集的所有指标上:
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
kubernetes_namespace: kube-system
cluster_name: mycluster01
并在我的每个出口商工作中添加 relabel_configs
:
- job_name: 'kubernetes-cadvisor'
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- target_label: cluster_name
replacement: mycluster01
- target_label: kubernetes_namespace
replacement: kube-system
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/:10250/proxy/metrics
这是在 Prometheus-operator 上使用 metricRelabelings
实现相同目的的示例,它仍然对我不起作用:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: node-exporter
name: node-exporter
namespace: monitoring
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
interval: 30s
port: https
scheme: https
tlsConfig:
insecureSkipVerify: true
jobLabel: k8s-app
selector:
matchLabels:
k8s-app: node-exporter
metricRelabelings:
sourceLabels: __meta_kubernetes_node_name
targetLabel: node
我希望实现的是在我的导出器上创建一个静态标签,这样所有指标都带有我在抓取时定义的自定义标签,而不必为集群中的所有部署手动定义自定义标签。
在此先感谢您的帮助!
让我们通过例子看看它是如何工作的。首先,部署四个示例应用程序实例,它们在端口 8080 上侦听和公开指标。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: example-application
spec:
replicas: 4
template:
metadata:
labels:
app: example-application
spec:
containers:
- name: example-application
image: fabxc/instrumented_app
ports:
- name: backend
containerPort: 8080
ServiceMonitor 有一个标签 select 或者 select 服务及其底层端点对象。示例应用程序的服务对象 selects Pods 由具有 example-application 值的 app 标签。服务对象还指定公开指标的端口。
kind: Service
apiVersion: v1
metadata:
name: example-application
labels:
app: example-application
spec:
selector:
app: example-application
ports:
- name: backend
port: 8080
此服务对象由 ServiceMonitor 发现,select以相同的方式发现。应用标签必须具有值 example-application。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-application
labels:
team: backend-team
spec:
selector:
matchLabels:
app: example-application
endpoints:
- port: backend
Prometheus 对象定义了 serviceMonitorSelector 以指定应包括哪些 ServiceMonitor。上面指定了标签 team: backend-team
,所以这就是 Prometheus 对象 select 的内容。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceMonitorSelector:
matchLabels:
team: backend-team
resources:
requests:
memory: 400Mi
这使后端团队能够创建新的 ServiceMonitors 和服务,从而允许动态重新配置 Prometheus。
您还可以查看 this site 以阅读有关 Prometheus Operator 中 ServiceMonitor 的更多信息。
似乎我错过了 Operator 存储库中的说明....仔细查看后我发现了一些非常好的示例...似乎我的问题的答案是创建额外的抓取配置作为一个秘密,类似于下面的示例 link:additional-scrape-configs.yaml
一些额外的步骤也可以在下面找到:additional-scrape-config
我是第一次尝试 prometheus-operator,但仍在努力解决通过它管理 Prometheus 的差异。
部署非常简单,编辑规则也是如此,但是在使用 Prometheus-operator 时尝试使用 static_configs
重新标记出口商时,我找不到自己的方式。
我过去做的是自定义 prometheus.yml
并添加 static_configs
以包含每个出口商工作名称的标签。
我知道在 Prometheus-operator 的引擎盖下,我们拥有与通常相同的设置,但我不确定如何使用运算符从 static_config
配置中获得相同的结果。
据我所知,我现在必须在与我的导出器相关的服务监视器上设置重新标记,但是我尝试过的所有配置都没有结果:
按照问题 1166, and StaticConfigs
as described on issue 1086 中的描述尝试 metricRelabelings
,但没有成功。
例如,我曾经为 kubernetes-cadvisor
出口商在 static_config
上设置标签,这样我的自定义标签就会显示在我的出口商在摄取时间收集的所有指标上:
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
kubernetes_namespace: kube-system
cluster_name: mycluster01
并在我的每个出口商工作中添加 relabel_configs
:
- job_name: 'kubernetes-cadvisor'
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- target_label: cluster_name
replacement: mycluster01
- target_label: kubernetes_namespace
replacement: kube-system
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/:10250/proxy/metrics
这是在 Prometheus-operator 上使用 metricRelabelings
实现相同目的的示例,它仍然对我不起作用:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: node-exporter
name: node-exporter
namespace: monitoring
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
interval: 30s
port: https
scheme: https
tlsConfig:
insecureSkipVerify: true
jobLabel: k8s-app
selector:
matchLabels:
k8s-app: node-exporter
metricRelabelings:
sourceLabels: __meta_kubernetes_node_name
targetLabel: node
我希望实现的是在我的导出器上创建一个静态标签,这样所有指标都带有我在抓取时定义的自定义标签,而不必为集群中的所有部署手动定义自定义标签。
在此先感谢您的帮助!
让我们通过例子看看它是如何工作的。首先,部署四个示例应用程序实例,它们在端口 8080 上侦听和公开指标。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: example-application
spec:
replicas: 4
template:
metadata:
labels:
app: example-application
spec:
containers:
- name: example-application
image: fabxc/instrumented_app
ports:
- name: backend
containerPort: 8080
ServiceMonitor 有一个标签 select 或者 select 服务及其底层端点对象。示例应用程序的服务对象 selects Pods 由具有 example-application 值的 app 标签。服务对象还指定公开指标的端口。
kind: Service
apiVersion: v1
metadata:
name: example-application
labels:
app: example-application
spec:
selector:
app: example-application
ports:
- name: backend
port: 8080
此服务对象由 ServiceMonitor 发现,select以相同的方式发现。应用标签必须具有值 example-application。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-application
labels:
team: backend-team
spec:
selector:
matchLabels:
app: example-application
endpoints:
- port: backend
Prometheus 对象定义了 serviceMonitorSelector 以指定应包括哪些 ServiceMonitor。上面指定了标签 team: backend-team
,所以这就是 Prometheus 对象 select 的内容。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceMonitorSelector:
matchLabels:
team: backend-team
resources:
requests:
memory: 400Mi
这使后端团队能够创建新的 ServiceMonitors 和服务,从而允许动态重新配置 Prometheus。
您还可以查看 this site 以阅读有关 Prometheus Operator 中 ServiceMonitor 的更多信息。
似乎我错过了 Operator 存储库中的说明....仔细查看后我发现了一些非常好的示例...似乎我的问题的答案是创建额外的抓取配置作为一个秘密,类似于下面的示例 link:additional-scrape-configs.yaml
一些额外的步骤也可以在下面找到:additional-scrape-config