8.3.4 配置Istio收集指标

接下来介绍如何配置Istio,对网格内服务的遥测数据进行自动收集,并创建一个新的指标,当网格内的服务被调用时触发收集过程。假定Mixer使用的是默认配置(--conf igDefaultNamespace=istio-system),如果使用的是不同的值,需要根据实际情况对文中提及的配置和命令进行变更。配量步骤如下:

1)新建一个YAML文件,用来配置新的指标以及数据流,Istio将会进行自动生成和收集的工作。以文件名new_telemetry.yaml保存下面的代码:


# 指标 instance 的配置
apiVersion: "config.istio.io/v1alpha2"
kind: metric
metadata:
  name: myrequestcount
  namespace: istio-system
spec:
  value: "1" # 每次请求计数加一
  dimensions:
    source_service: source.service | "unknown"
    source_version: source.labels["version"] | "unknown"
    destination_service: destination.service | "unknown"
    destination_version: destination.labels["version"] | "unknown"
    response_code: response.code | 200
  monitored_resource_type: '"UNSPECIFIED"'
---
# prometheus handler 的配置
apiVersion: "config.istio.io/v1alpha2"
kind: prometheus
metadata:
  name: myrequestcounthandler
  namespace: istio-system
spec:
  metrics:
  - name: my_request_count # Prometheus 指标名称
    instance_name: myrequestcount.metric.istio-system # Mixer Instance 名称(全限定名称)
    kind: COUNTER
    label_names:
    - source_service
    - source_version
    - destination_service
    - destination_version
    - response_code
---
# 将指标 Instance 发送给 prometheus handler 的 rule 对象
apiVersion: "config.istio.io/v1alpha2"
kind: rule
metadata:
  name: myrequestcountrule
  namespace: istio-system
spec:
  actions:
  - handler: myrequestcounthandler.prometheus
    instances:
    - myrequestcount.metric
---

2)把新配置推送给集群,如下所示:


$ kubectl create -f new_telemetry.yaml
metric.config.istio.io/myrequestcount created
prometheus.config.istio.io/myrequestcounthandler created
rule.config.istio.io/requestcountrule created