繁体   English   中英

无法从pod中删除指标

[英]Unable to scrape metrics from pods

我能够使用此Prometheus作业配置从Kubernetes服务中获取Prometheus指标:

- job_name: 'prometheus-potapi'
  static_configs:
  - targets: ['potapi-service.potapi:1234']

它使用Kubernetes DNS,它为我提供了我用于服务的三个pod中的任何一个的指标。

我想看看每个pod的结果。

我能够使用此配置查看我想要的数据:

- job_name: 'prometheus-potapi-pod'
  static_configs:
  - targets: ['10.1.0.126:1234']

我使用Prometheus中提供的服务发现机制进行了搜索和实验。 不幸的是,我不明白应该如何设置。 如果您不知道它是如何工作的,那么服务发现参考实际上并没有用。

我正在寻找一个例子,其中使用IP号的作业被一些服务发现机制取代。 指定IP足以让我看到我正在寻找的数据是暴露的。

我希望从同一名称空间中的所有内容中获取指标,即potapi

指标始终通过同一端口1234公开。

最后,这些都是这样命名的:

potapi-deployment-754d96f855-lkh4x
potapi-deployment-754d96f855-pslgg
potapi-deployment-754d96f855-z2zj2 

当我做

kubectl describe pod potapi-deployment-754d96f855-pslgg -n potapi

我得到这个描述:

Name:           potapi-deployment-754d96f855-pslgg
Namespace:      potapi
Node:           docker-for-desktop/192.168.65.3
Start Time:     Tue, 07 Aug 2018 14:18:55 +0200
Labels:         app=potapi
  pod-template-hash=3108529411
Annotations:    <none>
Status:         Running
IP:             10.1.0.127
Controlled By:  ReplicaSet/potapi-deployment-754d96f855
Containers:
  potapi:
    Container ID:   docker://72a0bafbda9b82ddfc580d79488a8e3c480d76a6d17c43d7f7d7ab18458c56ee
    Image:          potapi-service
    Image ID:       docker://sha256:d64e94c2dda43c40f641008c122e6664845d73cab109768efa0c3619cb0836bb
    Ports:          4567/TCP, 4568/TCP, 1234/TCP
    Host Ports:     0/TCP, 0/TCP, 0/TCP
    State:          Running
      Started:      Tue, 07 Aug 2018 14:18:57 +0200
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-4fttn (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          True
  PodScheduled   True
Volumes:
  default-token-4fttn:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-4fttn
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
  node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

在给定这些先决条件的情况下,您将如何重写作业定义?

在这里,他们使用example.io/scrape=true (以及类似的注释来指定scrape端口刮擦路径,如果它不是/metrics ),这就是人们实现“自动发现”部分的方式。

如果您应用注解-在舞会配置相关的配置片段-一个Service ,然后将舞会上刮的港口和道路Service ,这意味着你将不得不对统计Service本身,而不是背后的各个端点它。 类似地,如果您标记Pod ,您将收集Pod的指标,但是需要将它们汇总以获得事务状态的交叉Pod视图。 有多种不同的资源类型可以自动发现,包括节点入口 他们都表现得相似。

除非你的Prom实例有严重的CPU或存储问题,否则我绝对不会在配置中枚举scrape目标:我会使用scrape注释,这意味着你可以改变谁被刮,什么端口等没有每次重新配置Prom。

请注意,如果您想按原样使用他们的示例,并且您想要在kubernetes资源YAML中应用这些注释,请确保引用: 'true'值,否则YAML会将其提升为布尔文字,和kubernetes注释只能是字符串值。

从命令行应用注释将正常工作:

kubectl annotate pod -l app=potapi example.io/scrape=true

(顺便说一下,他们在他们的例子中使用了example.io/ ,但是除了它命名为scrape部分以防止它与其他名为scrape东西发生冲突之外没有什么特别之处。所以如果你愿意,可以随意使用你组织的命名空间避免在集群中出现名为example.io/奇怪内容

我最终得到了这个解决方案:

...

- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
  - source_labels: [__address__]
    action: replace
    regex: ([^:]+)(?::\d+)?
    replacement: $1:1234
    target_label: __address__

...

有两个部分。

  • 检查注释prometheus.io/scrape ,其值为'true' 它在第一个source_labels prometheus_io_scrape转化为prometheus.io/scrape可能并不明显

  • 获取地址并添加所需的端口。 它在第二个source_labels 将查询__address__源以获取主机名或IP号。 在这种情况下,使用神秘的正则表达式([^:]+)(?::\\d+)?找到一个ip号([^:]+)(?::\\d+)? 我想要使​​用的端口是'1234',所以我将其硬编码为replacement:结果是__address__现在将包含pod的ip,端口123410.1.0.172:1234格式附加,其中10.1.0.172是找到了ip号码。

在Prometheus中使用此配置,我应该能够找到具有适当注释的pod。

那么注释应该添加到哪里呢? 我最终在我的Kubernetes部署模板描述中添加了它。

完整的部署描述如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: potapi-deployment
  namespace: potapi
  labels:
    app: potapi
spec:
  replicas: 3
  selector:
    matchLabels:
      app: potapi
  template:
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
      labels:
        app: potapi
    spec:
      containers:
      - name: potapi
        image: potapi-service
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 4567
          name: service
        - containerPort: 1234
          name: metrics

有趣的注释添加在template部分中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM