Seldon:如何使用我自己的 Grafana 和 Prometheus 实例?

Seldon: How to Use My Own Grafana and Prometheus Instances?

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

values.yaml文件中,prometheus config下,我添加了如下注解:

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

接下来,我查看了他们 Github 存储库中的 prometheus-config.yaml,并将配置复制并粘贴到 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 提供给您的实例还没有生产就绪。

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

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

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

kube-prometheus-stack 的工作方式不同。它使用 prometheus operator and CRDs to shape the configuration. This 设计文档描述每个 CRD 的用途。

您需要创建 ServiceMonitor 资源才能为新服务定义抓取规则。 ServiceMonitor 本身应该具有在 serviceMonitorSelector 键下的普罗米修斯资源(另一个 CRD)中定义的标签。在这些情况下很难为您提供一个工作示例,但 this 简短指南应该足以让您了解该怎么做。

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

spec:
  namespaceSelector:
    any: true

ServiceMonitor 极难调试。 我的调试策略是:-

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

        serviceMonitorSelectorNilUsesHelmValues: false
        serviceMonitorSelector: {}
        serviceMonitorNamespaceSelector: {} 
    

    默认的 ServiceMonitor 附加了 Helm 元数据 Prometheus Operator 使用它 filter/choose ServiceMonitors 进行监控。环境 serviceMonitorSelectorNilUsesHelmValues:false 将忽略任何此类 选择。

  2. 如果 ServiceMonitor 在目标中可见但没有目标。:- 在这种情况下,问题出在 ServiceMonitor 和 pods 它正在尝试 scrape.Check 如果您提到的端口是 可访问并且 pods 满足提到的选择器。

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