在 Knative 中收集指标¶
Knative 支持不同的流行工具来收集指标
Grafana 仪表盘可用于直接使用 Prometheus 收集的指标。
您还可以设置 OpenTelemetry 收集器以接收来自 Knative 组件的指标,并将它们分发到支持 OpenTelemetry 的其他指标提供者。
警告
您不能同时使用 OpenTelemetry 收集器和 Prometheus。默认指标后端是 Prometheus。您需要从 config-observability ConfigMap 中删除 metrics.backend-destination
和 metrics.request-metrics-backend-destination
键以启用 Prometheus 指标。
关于 Prometheus 堆栈¶
Prometheus 是一个开源工具,用于收集、聚合时间序列指标和警报。它也可以用于抓取下面演示的 OpenTelemetry 收集器,当使用 Prometheus 时。
Grafana 是一个用于数据分析和可视化的开源平台,使用户能够为来自各种数据源的指标创建可定制的仪表盘。
Prometheus 堆栈 是一个预先配置的 Kubernetes 清单、Grafana 仪表盘和 Prometheus 规则集合,结合使用 Prometheus Operator 提供端到端的 Kubernetes 集群监控。
设置 Prometheus 堆栈¶
-
使用 Helm 安装 Prometheus 堆栈
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack -n default -f values.yaml # values.yaml contains at minimum the configuration below
注意
您需要确保 helm 图表具有以下配置值,否则 ServiceMonitors/Podmonitors 将无法正常工作。
kube-state-metrics: metricLabelsAllowlist: - pods=[*] - deployments=[app.kubernetes.io/name,app.kubernetes.io/component,app.kubernetes.io/instance] prometheus: prometheusSpec: serviceMonitorSelectorNilUsesHelmValues: false podMonitorSelectorNilUsesHelmValues: false
-
将 ServiceMonitors/PodMonitors 应用于从 Knative 收集指标。
kubectl apply -f https://raw.githubusercontent.com/knative-extensions/monitoring/main/servicemonitor.yaml
本地访问 Prometheus 实例¶
默认情况下,Prometheus 实例仅在名为 prometheus-kube-prometheus-prometheus
的私有服务上公开。
要在网络浏览器中访问控制台
-
输入以下命令
kubectl port-forward -n default svc/prometheus-kube-prometheus-prometheus 9090:9090
-
通过
https://127.0.0.1:9090
在浏览器中访问控制台。
本地访问 Grafana 实例¶
默认情况下,Grafana 实例仅在名为 prometheus-grafana
的私有服务上公开。
要在网络浏览器中访问仪表盘
-
输入以下命令
kubectl port-forward -n default svc/prometheus-grafana 3000:80
-
通过
https://127.0.0.1:3000
在浏览器中访问仪表盘。 -
使用默认凭据登录
username: admin password: prom-operator
导入 Grafana 仪表盘¶
-
Grafana 仪表盘可以从
monitoring
存储库 导入。 -
如果您使用 Grafana Helm 图表,并且启用了仪表盘侧边栏,则可以通过应用以下 ConfigMap 来加载仪表盘。
kubectl apply -f https://raw.githubusercontent.com/knative-extensions/monitoring/main/grafana/dashboards.yaml
注意
您需要确保 helm 图表具有以下配置值,否则仪表盘加载将无法正常工作。
如果您有现有的 ConfigMap 并且仪表盘加载不起作用,请在grafana: sidecar: dashboards: enabled: true searchNamespace: ALL
searchNamespace: ALL
声明后将labelValue: true
属性添加到 helm 图表中。
关于 OpenTelemetry¶
OpenTelemetry 是一个 CNCF 可观察性框架,用于云原生软件,它提供了一组工具、API 和 SDK。
您可以使用 OpenTelemetry 来检测、生成、收集和导出遥测数据。此数据包括指标、日志和跟踪,您可以分析这些数据以了解 Knative 组件的性能和行为。
OpenTelemetry 使您能够轻松地将指标导出到多个监控服务,而无需重新构建或重新配置 Knative 二进制文件。
了解收集器¶
收集器提供了一个位置,各种 Knative 组件可以将指标推送到该位置,以便由监控服务保留和收集。
在以下示例中,您可以使用 ConfigMap 和 Deployment 配置单个收集器实例。
提示
对于更复杂的部署,您可以使用 OpenTelemetry Operator 自动执行其中一些步骤。
注意
https://github.com/knative-extensions/monitoring/tree/main/grafana 上的 Grafana 仪表盘不适用于从 OpenTelemetry 收集器抓取的指标。
设置收集器¶
-
通过输入以下命令创建收集器运行的命名空间
下一步使用kubectl create namespace metrics
metrics
命名空间创建收集器。 -
通过输入以下命令创建 Deployment、Service 和 ConfigMap 以用于收集器
kubectl apply -f https://raw.githubusercontent.com/knative/docs/main/docs/serving/observability/metrics/collector.yaml
-
通过输入以下命令更新 Knative Serving 和 Eventing 命名空间中的
config-observability
ConfigMapskubectl patch --namespace knative-serving configmap/config-observability \ --type merge \ --patch '{"data":{"metrics.backend-destination":"opencensus","metrics.request-metrics-backend-destination":"opencensus","metrics.opencensus-address":"otel-collector.metrics:55678"}}' kubectl patch --namespace knative-eventing configmap/config-observability \ --type merge \ --patch '{"data":{"metrics.backend-destination":"opencensus","metrics.opencensus-address":"otel-collector.metrics:55678"}}'
验证收集器设置¶
-
您可以通过加载收集器上的 Prometheus 导出端口来检查指标是否正在转发,输入以下命令
kubectl port-forward --namespace metrics deployment/otel-collector 8889
-
获取
https://127.0.0.1:8889/metrics
以查看导出的指标。