自定义 Istio 指标

本任务将向您展示如何自定义 Istio 生成的指标。

Istio 生成各种仪表盘使用的遥测数据,帮助您可视化服务网格。例如,支持 Istio 的仪表盘包括

默认情况下,Istio 定义并生成一组标准指标(例如 requests_total),但您也可以使用 遥测 API 自定义它们并创建新的指标。

开始之前

在您的集群中 安装 Istio 并部署应用程序。或者,您可以在 Istio 安装过程中设置自定义统计信息。

本任务中使用 Bookinfo 示例应用程序作为示例应用程序。有关安装说明,请参阅 部署 Bookinfo 应用程序

启用自定义指标

要自定义遥测指标,例如,将 request_hostdestination_port 维度添加到网关和 Sidecar 在入站和出站方向发出的 requests_total 指标,请使用以下内容

$ cat <<EOF > ./custom_metrics.yaml
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-metrics
spec:
  metrics:
  - providers:
    - name: prometheus
    overrides:
    - match:
        metric: REQUEST_COUNT
      tagOverrides:
        destination_port:
          value: "string(destination.port)"
        request_host:
          value: "request.host"
EOF
$ kubectl apply -f custom_metrics.yaml

验证结果

向服务网格发送流量。对于 Bookinfo 示例,请在您的 Web 浏览器中访问 http://$GATEWAY_URL/productpage 或发出以下命令

$ curl "http://$GATEWAY_URL/productpage"

使用以下命令验证 Istio 是否为您的新维度或修改后的维度生成数据

$ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total

例如,在输出中,找到指标 istio_requests_total 并验证它是否包含您的新维度。

对值使用表达式

指标配置中的值是通用表达式,这意味着您必须在 JSON 中使用双引号括起字符串,例如“‘string value’”。与 Mixer 表达式语言不同,不支持管道 (|) 运算符,但您可以使用 hasin 运算符模拟它,例如

has(request.host) ? request.host : "unknown"

有关更多信息,请参阅 通用表达式语言

Istio 公开了所有标准的 Envoy 属性。对等元数据作为属性 upstream_peer(用于出站)和 downstream_peer(用于入站)提供,并包含以下字段

字段类型
name字符串Pod 的名称。
namespace字符串Pod 运行的命名空间。
labels映射工作负载标签。
owner字符串工作负载所有者。
workload_name字符串工作负载名称。
platform_metadata映射带有前缀键的平台元数据。
istio_version字符串代理的版本标识符。
mesh_id字符串服务网格的唯一标识符。
app_containerslist<string>应用程序容器的短名称列表。
cluster_id字符串此工作负载所属集群的标识符。

例如,用于出站配置的对等方 app 标签的表达式为 upstream_peer.labels['app'].value

清理

要删除 Bookinfo 示例应用程序及其配置,请参阅 Bookinfo 清理

这些信息是否有用?
您有什么改进建议?

感谢您的反馈!