4

我想在监控命名空间中使用我已经存在的 Prometheus 和 Grafana 实例来模拟seldon-core-analytics正在做的事情。我正在使用 prometheus 社区 helm 图表并安装kube-prometheus-stack 在 k8s 上。这是我到目前为止所做的:

values.yaml文件中,在 prometheus 配置下,我添加了以下注释:

annotations:
  prometheus.io/scrape: "true"
  prometheus.io/path: "/prometheus

接下来,我查看了prometheus-config.yaml他们的 Github 存储库中的配置,并将配置复制并粘贴到 configmap 文件中。

此外,创建了一个 ServiceMonitor

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: seldon-servicemonitor-default
  labels:
    seldon-monitor: seldon-default
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app.kubernetes.io/managed-by: seldon-core
  endpoints:
    - interval: 15s
      path: /metrics
      port: http
    - interval: 15s
      path: /prometheus
      port: http
  namespaceSelector:
    matchNames:
      - seldon
      - default
      - monitoring

到目前为止,上述步骤没有错误,但似乎 prometheus 实例无法从我部署在不同命名空间上的模型中抓取指标。我还需要进行哪些其他配置,以便我自己的 Prometheus 和 Grafana 实例可以从我很少部署的模型中收集和可视化指标?该文档并没有真正解释如何在您自己的实例上执行此操作,而且他们提供给您的实例seldon-core-analytics还没有准备好生产。

4

2 回答 2

1

ServiceMonitor 非常难以调试。我的调试策略是:-

  1. 检查 Prometheus 是否正在读取创建的 ServiceMonitor:- 查看 /targets URL。(至少应该有一个处于 0/0 状态的目标)如果没有,这意味着 ServiceMonitor 本身没有被 Prometheus 拾取。我建议在您的 kube-prometheus-stack 配置中查看以下配置。

        serviceMonitorSelectorNilUsesHelmValues: false
        serviceMonitorSelector: {}
        serviceMonitorNamespaceSelector: {} 
    

    默认的 ServiceMonitor 附加了 Helm 元数据,Prometheus Operator 使用它来过滤/选择要监控的 ServiceMonitor。设置 serviceMonitorSelectorNilUsesHelmValues:false将忽略任何此类选择。

  2. 如果 ServiceMonitor 在目标中可见但没有目标。:- 在这种情况下,问题出在 ServiceMonitor 和它试图抓取的 pod 之间。检查您提到的端口是否可访问并且 pod 是否满足提到的选择器。

我的建议是按照这个启动另一个虚拟 ServiceMonitor ,然后一次修改 ServiceMonitor 直到它开始监视seldon-core-analyticsPod

于 2021-02-08T21:40:50.867 回答
1

Prometheus 中的配置seldon-core-analytics相当标准。它基于内置的 Kubernetes 服务发现,并使用注释来查找抓取目标:

annotations:
  prometheus.io/scrape: true
  prometheus.io/path: /metrics
  prometheus.io/scheme: http
  prometheus.io/port: 9100

他们的示例配置prometheus.io/scrape: true中,prometheus 将针对带有注释的pod、服务和端点。其他三个标签用于覆盖每个目标的默认抓取参数。因此,如果您有示例中的配置,则只需将其中一些注释放在 pod 上。

工作方式kube-prometheus-stack不同。它使用prometheus 运算符和 CRD 来塑造配置。设计文档描述了每个 CRD 的用途。

您需要创建ServiceMonitor资源以便为新服务定义抓取规则。ServiceMonitor它本身应该具有在 prometheus 资源(另一个 CRD)下定义的标签serviceMonitorSelector。在这种情况下,很难为您提供一个可行的示例,但这个简短的指南应该足以理解该做什么。

我建议您描述ServiceMonitor您拥有的其中一个 s,然后在matchLabels. 不要更改新对象中的命名空间,prometheus 运算符ServiceMonitor默认不会在其他命名空间中查找 s。要ServiceMonitor在所有命名空间中发现目标,namespaceSelector必须为空:

spec:
  namespaceSelector:
    any: true
于 2021-02-02T20:02:39.753 回答