选择器和抓取配置

Monitoring 应用设置了 prometheus.prometheusSpec.ignoreNamespaceSelectors=false,即在默认情况下跨所有命名空间进行监控。

这样,你可以查看部署在具有 istio-injection=enabled 标签的命名空间中的资源的流量、指标和图。

如果你想将 Prometheus 限制为特定的命名空间,请设置 prometheus.prometheusSpec.ignoreNamespaceSelectors=true。完成此操作后,你需要添加其他配置来继续监控你的资源。

通过将 ignoreNamespaceSelectors 设置为 True 来限制对特定命名空间的监控

要限制对特定命名空间的监控,你需要编辑 ignoreNamespaceSelectors Helm Chart 选项。你可以在安装或升级 Monitoring Helm Chart 时配置此选项:

  1. 安装或升级 Monitoring Helm Chart 时,编辑 values.yml 并设置 prometheus.prometheusSpec.ignoreNamespaceSelectors=true
  2. 完成安装或升级。

结果:Prometheus 将仅用于特定命名空间。换言之,你需要设置以下配置之一才能继续在各种仪表板中查看数据。

让 Prometheus 检测其他命名空间中的资源

如果设置了 prometheus.prometheusSpec.ignoreNamespaceSelectors=true,则有两种方法让 Prometheus 检测其他命名空间中的资源:

  • 监控特定的命名空间:在命名空间中添加一个 ServiceMonitor 或 PodMonitor 以及要抓取的目标。
  • 跨命名空间监控:将 additionalScrapeConfig 添加到你的 rancher-monitoring 实例,从而抓取所有命名空间中的所有目标。

监控特定命名空间:创建 ServiceMonitor 或 PodMonitor

此选项用于定义在特定命名空间中要监控的服务或 pod。

可用性权衡指的是,由于你无法跨命名空间进行监控,因此你必须为每个命名空间创建 ServiceMonitor 或 PodMonitor。

选择器和抓取配置 - 图1先决条件:

<your namespace> 定义 ServiceMonitor 或 PodMonitor。下面提供了一个 ServiceMonitor 示例。

  1. 点击 ☰ > 集群管理
  2. 选择你创建的集群,并点击 Explore
  3. 在顶部导航栏中,打开 kubectl shell。
  4. 如果 ServiceMonitor 或 PodMonitor 文件存储在本地集群中,请运行 kubectl create -f <name of service/pod monitor file>.yaml
  5. 如果 ServiceMonitor 或 PodMonitor 没有存储在本地,请运行 cat<< EOF | kubectl apply -f -,将文件内容粘贴到终端,然后运行 ​​EOF 来完成命令。
  6. 运行 kubectl label namespace <your namespace> istio-injection=enabled 来启用 Envoy sidecar 注入。

结果:Prometheus 可以抓取 <your namespace>

Istio 代理的 ServiceMonitor 示例

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: ServiceMonitor
  3. metadata:
  4. name: envoy-stats-monitor
  5. namespace: istio-system
  6. labels:
  7. monitoring: istio-proxies
  8. spec:
  9. selector:
  10. matchExpressions:
  11. - {key: istio-prometheus-ignore, operator: DoesNotExist}
  12. namespaceSelector:
  13. any: true
  14. jobLabel: envoy-stats
  15. endpoints:
  16. - path: /stats/prometheus
  17. targetPort: 15090
  18. interval: 15s
  19. relabelings:
  20. - sourceLabels: [__meta_kubernetes_pod_container_port_name]
  21. action: keep
  22. regex: '.*-envoy-prom'
  23. - action: labeldrop
  24. regex: "__meta_kubernetes_pod_label_(.+)"
  25. - sourceLabels: [__meta_kubernetes_namespace]
  26. action: replace
  27. targetLabel: namespace
  28. - sourceLabels: [__meta_kubernetes_pod_name]
  29. action: replace
  30. targetLabel: pod_name

跨命名空间监控:将 ignoreNamespaceSelectors 设置为 False

此设置为 Prometheus 提供额外的抓取配置来实现跨命名空间监控。

可用性权衡指的是 Prometheus 的所有 additionalScrapeConfigs 都维护在一个 Secret 中。如果在安装 Istio 之前已经使用 additionalScrapeConfigs 部署了监控,升级可能会变得困难。

  1. 安装或升级 Monitoring Helm Chart 时,编辑 values.yml 并将 prometheus.prometheusSpec.additionalScrapeConfigs 数组设置为下方的其它抓取配置
  2. 完成安装或升级。

结果:Promethe 会抓取所有带有 istio-injection=enabled 标签的命名空间。

其它抓取配置

  1. - job_name: 'istio/envoy-stats'
  2. scrape_interval: 15s
  3. metrics_path: /stats/prometheus
  4. kubernetes_sd_configs:
  5. - role: pod
  6. relabel_configs:
  7. - source_labels: [__meta_kubernetes_pod_container_port_name]
  8. action: keep
  9. regex: '.*-envoy-prom'
  10. - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
  11. action: replace
  12. regex: ([^:]+)(?::\d+)?;(\d+)
  13. replacement: $1:15090
  14. target_label: __address__
  15. - action: labelmap
  16. regex: __meta_kubernetes_pod_label_(.+)
  17. - source_labels: [__meta_kubernetes_namespace]
  18. action: replace
  19. target_label: namespace
  20. - source_labels: [__meta_kubernetes_pod_name]
  21. action: replace
  22. target_label: pod_name