【问题标题】:Seldon: How to Use My Own Grafana and Prometheus Instances?Seldon:如何使用我自己的 Grafana 和 Prometheus 实例?
【发布时间】:2021-01-30 06:16:32
【问题描述】:

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

values.yaml文件的prometheus配置下,我添加了如下注解:

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 提供给您的实例还没有生产就绪。

【问题讨论】:

    标签: kubernetes prometheus grafana seldon seldon-core


    【解决方案1】:

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

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

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

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

    spec:
      namespaceSelector:
        any: true
    

    【讨论】:

    • 谢谢@anemyte。你提供的参考资料我已经看过了。我尝试使用服务监视器,但仍然没有将很少的部署作为目标。我已使用服务监视器文件编辑了我的原始评论。
    • @RileyHun 似乎是合法的。到目前为止你检查了什么? Web UI 中的 Prometheus 配置/目标?有什么和谢顿有关的吗?如果 CRD 出现问题,Prometheus 操作员日志可能会包含一些有价值的信息。最后,一些 CRD(尤其不确定)可能会在其状态中显示一些提示(可通过 kubectl describe 获得)。
    • @aneymyte - 我只检查了 Prometheus UI 并查看了状态下的目标。也许它与 RBAC 授权有关?浏览这篇文章:medium.com/kubernetes-tutorials/…
    • @RileyHun 我看到 RBAC 角色和绑定在 helm 图表中定义,但我不知道您的集群中有什么 :)。我建议您删除并重新创建 ServiceMonitor。在这样做的同时捕获 prometheus 和 operator 的日志。 CRD 可能存在一些问题,可能是错误或警告。另外,检查 UI 中的 prometheus 配置。它在“状态”下可用。你能看到与 seldon 或其 ServiceMonitor 相关的东西吗?最后,为了确定一下,您的 seldon 模型是否有一个 Service 对象?
    • 是的,seldon 模型有一个服务对象。已经定义了 RBAC 角色?我错过了。我打算再创造一个。已经删除了我的 ServiceMonitor。
    【解决方案2】:

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

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

          serviceMonitorSelectorNilUsesHelmValues: false
          serviceMonitorSelector: {}
          serviceMonitorNamespaceSelector: {} 
      

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      相关资源
      最近更新 更多