本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

选择器和抓取配置

Rancher-Istio 自 Rancher v2.12.0 起已被弃用;请转向 SUSE 应用程序集合 版本的 Istio,以获得增强的安全性(包含在 SUSE Rancher Prime 订阅中)。 详细信息可以在 此公告 中找到。

监控应用程序设置了`prometheus.prometheusSpec.ignoreNamespaceSelectors=false`,这使得默认情况下可以跨所有名称空间进行监控。

这确保您可以查看在具有`istio-injection=enabled`标签的名称空间中部署的资源的流量、指标和图表。

如果您希望将Prometheus限制为特定名称空间,请设置`prometheus.prometheusSpec.ignoreNamespaceSelectors=true`。一旦您这样做,您必须执行一些额外的配置以继续监控您的资源。

通过将ignoreNamespaceSelectors设置为True来限制监控到特定名称空间

要将监控限制为特定名称空间,您需要编辑`ignoreNamespaceSelectors` Helm图表选项。您将在安装或升级监控Helm图表时配置此选项:

  1. 在安装或升级监控Helm图表时,编辑values.yml并设置prometheus.prometheusSpec.ignoreNamespaceSelectors=true

  2. 完成安装或升级。

*结果:*Prometheus将被限制在特定名称空间,这意味着需要设置以下配置之一以继续在各种仪表板中查看数据。

启用Prometheus检测其他名称空间中的资源

在`prometheus.prometheusSpec.ignoreNamespaceSelectors=true`时,有两种不同的方法可以启用Prometheus检测其他名称空间中的资源:

  • *监控特定名称空间:*在您想要抓取目标的名称空间中添加服务监视器或Pod监视器。

  • *跨名称空间监控:*向您的rancher-monitoring实例添加一个`additionalScrapeConfig`以抓取所有名称空间中的所有目标。

监控特定名称空间:创建服务监视器或Pod监视器

此选项允许您定义希望在特定名称空间中监控的特定服务或Pod。

可用性权衡在于,您必须为每个名称空间创建服务监视器或 Pod 监视器,因为您无法跨名称空间进行监视。

前提条件:

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

  1. 单击 ☰ > 集群管理

  2. 前往您创建的集群并点击 探索

  3. 在顶部导航栏中,打开 kubectl 外壳。

  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 注入。

结果: <your namespace> 可以被 prometheus 抓取。

Istio 代理的示例服务监视器
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: envoy-stats-monitor
  namespace: istio-system
  labels:
    monitoring: istio-proxies
spec:
  selector:
    matchExpressions:
    - {key: istio-prometheus-ignore, operator: DoesNotExist}
  namespaceSelector:
    any: true
  jobLabel: envoy-stats
  endpoints:
  - path: /stats/prometheus
    targetPort: 15090
    interval: 15s
    relabelings:
    - sourceLabels: [__meta_kubernetes_pod_container_port_name]
      action: keep
      regex: '.*-envoy-prom'
    - action: labeldrop
      regex: "__meta_kubernetes_pod_label_(.+)"
    - sourceLabels: [__meta_kubernetes_namespace]
      action: replace
      targetLabel: namespace
    - sourceLabels: [__meta_kubernetes_pod_name]
      action: replace
      targetLabel: pod_name

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

这通过为 Prometheus 提供额外的抓取配置来启用跨名称空间监控。

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

  1. 在安装或升级监控 Helm 图表时,编辑 values.yml 并将 prometheus.prometheusSpec.additionalScrapeConfigs 数组设置为下面提供的 附加抓取配置

  2. 完成安装或升级。

*结果:*所有带有 istio-injection=enabled 标签的名称空间将被 prometheus 抓取。

附加抓取配置
- job_name: 'istio/envoy-stats'
  scrape_interval: 15s
  metrics_path: /stats/prometheus
  kubernetes_sd_configs:
    - role: pod
  relabel_configs:
    - source_labels: [__meta_kubernetes_pod_container_port_name]
      action: keep
      regex: '.*-envoy-prom'
    - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
      action: replace
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: $1:15090
      target_label: __address__
    - action: labelmap
      regex: __meta_kubernetes_pod_label_(.+)
    - source_labels: [__meta_kubernetes_namespace]
      action: replace
      target_label: namespace
    - source_labels: [__meta_kubernetes_pod_name]
      action: replace
      target_label: pod_name