5

我第一次尝试使用 prometheus-operator,但仍然在努力解决通过它管理 Prometheus 的差异。

static_configs部署非常简单,编辑规则也是如此,但是在使用 Prometheus-operator时尝试重新标记导出器时我找不到方法。

我过去所做的是自定义prometheus.yml和添加static_configs以包含每个出口商工作名称的标签。

我知道在 Prometheus-operator 的引擎盖下,我们具有与通常相同的设置,但我不确定如何static_config使用操作符从配置中获得相同的结果。

据我所知,我现在必须在与我的出口商相关的服务监视器上设置重新标记,但是我尝试过的所有配置都没有结果:

尝试metricRelabelings按照 issue 1166的描述进行,并StaticConfigs按照issue 1086的描述进行尝试,但没有任何运气。

例如,这是我过去为kubernetes-cadvisorexporter 设置标签的方法static_config,以便我的自定义标签显示在我的 exporter 在摄取时间收集的所有指标上:

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/${1}:10250/proxy/metrics

这是一个metricRelabelings在 Prometheus-operator 上使用 , 实现相同功能的示例,它仍然不适合我:

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

我期望实现的是在我的导出器上创建一个静态标签,以便所有指标都带有我在抓取时定义的自定义标签,而不必为我的集群中的所有部署手动定义自定义标签。

提前感谢您的帮助!

4

2 回答 2

2

似乎我错过了 Operator 存储库中的说明......在仔细查看之后,我发现了一些非常好的例子......似乎我的问题的答案是将额外的抓取配置创建为秘密,类似于以下链接中的示例:additional-scrape-configs.yaml

一些额外的步骤也可以在下面找到:additional-scrape-config

于 2019-08-15T12:17:03.917 回答
1

让我们通过示例来看看它是如何工作的。首先,部署四个示例应用程序实例,它们在端口 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 有一个标签选择器来选择服务及其底层端点对象。示例应用程序的 Service 对象通过具有 example-application 值的 app 标签选择 Pod。Service 对象还指定公开指标的端口。

kind: Service
apiVersion: v1
metadata:
  name: example-application
  labels:
    app: example-application
spec:
  selector:
    app: example-application
  ports:
  - name: backend
    port: 8080

此 Service 对象由 ServiceMonitor 发现,它以相同的方式进行选择。应用标签必须具有值 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 以指定应包含哪些 ServiceMonitors。上面的标签team: backend-team是指定的,所以这就是 Prometheus 对象选择的内容。

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus
spec:
  serviceMonitorSelector:
    matchLabels:
      team: backend-team
  resources:
    requests:
      memory: 400Mi

这使后端团队能够创建新的 ServiceMonitors 和服务,从而允许对 Prometheus 进行动态重新配置。

您还可以在此站点上查看有关 Prometheus Operator 中 ServiceMonitor 的更多信息。

于 2019-08-12T13:23:28.513 回答