微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想使用监控命名空间中现有的 Prometheus 和 Grafana 实例来模拟 seldon-core-analytics 正在做什么。我正在使用普罗米修斯社区掌舵图表并在 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 提供给您的实例尚未准备好生产。

解决方法

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 简短指南应该足以让您了解该怎么做。

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

spec:
  namespaceSelector:
    any: true
,

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 满足提到的选择器。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?