收集TCP服务的Metrics

本章介绍如何配置istio去自动收集mesh中的TCP服务指标。本章结尾部分,一个新的监控指标可以用mesh去调用TCP服务。

BookInfo应用作为介绍本章的示例应用。

开始之前

  • 在集群中安装istio并部署一个应用。

  • 本章假定BookInfo中的示例应用被部署在default命名空间中。如果部署在不同的命名空间,你需要修改例子中的配置和命令。

  • 安装Prometheus插件,Prometheus用来验证任务是否成功执行。

     kubectl apply -f install/kubernetes/addons/prometheus.yaml
    

    详细内容查看Prometheus

收集新的遥测数据

  1. 创建YAML文件来保存新的metric配置,Istio将自动生成和收集。

    把以下内容保持为tcp_telemetry.yaml文件:

     # Configuration for a metric measuring bytes sent from a server
     # to a client
     apiVersion: "config.istio.io/v1alpha2"
     kind: metric
     metadata:
       name: mongosentbytes
       namespace: default
     spec:
       value: connection.sent.bytes | 0 # uses a TCP-specific attribute
       dimensions:
         source_service: source.service | "unknown"
         source_version: source.labels["version"] | "unknown"
         destination_version: destination.labels["version"] | "unknown"
       monitoredResourceType: '"UNSPECIFIED"'
     ---
     # Configuration for a metric measuring bytes sent from a client
     # to a server
     apiVersion: "config.istio.io/v1alpha2"
     kind: metric
     metadata:
       name: mongoreceivedbytes
       namespace: default
     spec:
       value: connection.received.bytes | 0 # uses a TCP-specific attribute
       dimensions:
         source_service: source.service | "unknown"
         source_version: source.labels["version"] | "unknown"
         destination_version: destination.labels["version"] | "unknown"
       monitoredResourceType: '"UNSPECIFIED"'
     ---
     # Configuration for a Prometheus handler
     apiVersion: "config.istio.io/v1alpha2"
     kind: prometheus
     metadata:
       name: mongohandler
       namespace: default
     spec:
       metrics:
       - name: mongo_sent_bytes # Prometheus metric name
         instance_name: mongosentbytes.metric.default # Mixer instance name (fully-qualified)
         kind: COUNTER
         label_names:
         - source_service
         - source_version
         - destination_version
       - name: mongo_received_bytes # Prometheus metric name
         instance_name: mongoreceivedbytes.metric.default # Mixer instance name (fully-qualified)
         kind: COUNTER
         label_names:
         - source_service
         - source_version
         - destination_version
     ---
     # Rule to send metric instances to a Prometheus handler
     apiVersion: "config.istio.io/v1alpha2"
     kind: rule
     metadata:
       name: mongoprom
       namespace: default
     spec:
       match: context.protocol == "tcp"
              && destination.service == "mongodb.default.svc.cluster.local"
       actions:
       - handler: mongohandler.prometheus
         instances:
         - mongoreceivedbytes.metric
         - mongosentbytes.metric
    
  2. 推送新的配置。

    istioctl create -f tcp_telemetry.yaml
    

    输出类似如下内容:

    Created config metric/default/mongosentbytes at revision 3852843
    Created config metric/default/mongoreceivedbytes at revision 3852844
    Created config prometheus/default/mongohandler at revision 3852845
    Created config rule/default/mongoprom at revision 3852846
    
  3. 设置并使用MongoDB

    1. 安装v2版本的ratings服务。

      如果您启用了自动注入sidecar功能的集群,只需使用kubectl部署服务即可:

       kubectl apply -f samples/bookinfo/kube/bookinfo-ratings-v2.yaml
      

      如果您正在使用手动注入sidecar,请改用以下命令:

       kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo-ratings-v2.yaml)
      

      输出如下内容:

       deployment "ratings-v2" configured
      
    2. 安装mongodb服务:

      如果您启用了自动注入sidecar功能的集群,只需使用kubectl部署服务即可:

       kubectl apply -f samples/bookinfo/kube/bookinfo-db.yaml
      

      如果您正在使用手动注入sidecar,请改用以下命令:

       kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo-db.yaml)
      

      输出如下内容:

       service "mongodb" configured
       deployment "mongodb-v1" configured
      
    3. 添加路由规则将流量发送到ratings服务的v2版本:

    istioctl create -f samples/bookinfo/kube/route-rule-ratings-db.yaml
    

    输出如下内容:

    Created config route-rule//ratings-test-v2 at revision 7216403
    Created config route-rule//reviews-test-ratings-v2 at revision 7216404
    
  4. 把流量发送到示例的应用。

    参照BookInfo中的例子,使用浏览器访问http://$GATEWAY_URL/productpage或者使用如下命令:

    curl http://$GATEWAY_URL/productpage
    
  5. 验证新的监控信息是否产生并被收集

    在Kubernetes环境中,使用如下命令为Prometheus设置端口转发:

    kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &
    

    通过Prometheus UI查看新的监控指标项采集的数据。

    使用提供的链接打开Prometheus UI并查询mongo_received_bytesmetric收集的数据。在Console tab页展示类似以下信息:

     istio_mongo_received_bytes{destination_version="v1",instance="istio-mixer.istio-system:42422",job="istio-mesh",source_service="ratings.default.svc.cluster.local",source_version="v2"}    2317
    

    注意:Istio还收集MongoDB特定协议的统计信息。 例如,从ratings服务发送的所有OP_QUERY信息的值,用以下metric收集:envoy_mongo_mongo_collection_ratings_query_total_counter单击此处执行查询)。

理解TCP遥测收集

在此任务中,您添加了Istio的配置,使Mixer能自动生成mesh内TCP服务的所有流量的metric并收集。

收集指标和日志类似,新配置由instanceshandlerrule组成。 请参阅该任务了解获取metric数据收集的完整说明。

TCP服务的监控数据收集配置仅在instances中有有限几个属性有所不同。

TCP属性

几个特定的TCP属性可以在Istio中启用TCP策略和控制。 这些属性由服务器端的Envoy代理生成,并在连接建立和关闭时转发给Mixer。 另外,上下文属性提供区分httptcp协议的能力。

Attribute Generation Flow for TCP Services in an Istio Mesh.
TCP Attribute Flow

清理

  • 删除新的配置:

    istioctl delete -f tcp_telemetry.yaml
    
  • 删除端口映射:

    killall kubectl
    
  • 如果您不打算继续后面的章节,请参阅BookInfo cleanup的说明关闭应用程序。

进一步阅读

results matching ""

    No results matching ""