Envoy状态统计:

    Envoy运行过程中会生成大量的统计数据, 这些统计数据大体可以分为三类

    下游: 与传入Envoy的连接相关的统计信息, 主要由侦听器、 HTTP连接管理器和TCP代理过滤器等生成;

    上游: 与离开Envoy的连接相关的统计信息, 主要由连接池、 路由器过滤器和TCP代理过滤器等生成;

    Envoy服务器: 记录了Envoy服务器实例的工作细节, 例如服务器正常运行时间或分配的内存量等;

    Envoy统计的数据类型主要有三类, 数据类型均为无符号整数

    Counter: 累加型的计数器数据, 单调递增, 例如total requests等;

    Gauge: 常规的指标数据, 可增可降, 例如current active requests等;

    Histogram: 柱状图数据, 主要用于统计一些数据的分布情况, 用于计算在一定范围内的分布情况, 同时还提供了度量指标值的总和, 例如upstream request time;

    几乎所有的统计数据都可以通过admin接口的/stats获取到


status相关配置:

stats的配置参数位于Bootstrap配置文件的顶级配置段

{
...
"stats_sinks": [], # stats_sink列表;
"stats_config": "{...}", # stats内部处理机制;
"stats_flush_interval": "{...}", # stats数据刷写至sinks的频率, 出于性能考虑, Envoy仅周期性刷写counters和gauges, 默认时长为5000ms;
...
}

        stats_sinks为Envoy的可选配置, 统计数据默认没有配置任何暴露机制, 但需要存储长期的指标数据则应该手动定制此配置。

stats_sinks:
- name: ... # 要初始化的Sink的名称, 名称必须匹配于Envoy支持的sink; 内建的有envoy.statsd、 envoy.dog_statsd、
# envoy.metrics_service和envoy.stat_sinks.hystrix四个; 它们的功用类似于Prometheus的exporter;
  config|typed_config: {...} # Sink的配置, config或typed_config二者仅能选其一; 不同Sink的配置方式不同, 下面给出的参数是为statd专用;
    address: {...} # StatsdSink服务的访问端点, 也可以使用下面的tcp_cluster_name指定为配置在Envoy上的Sink服务器组成集群;
    tcp_cluster_name: ... # StatsdSink集群的名称, 与address互斥;
    prefix: ... # StatsdSink的自定义前缀, 可选参数;

        Envoy的统计信息由规范字符串表示法进行标识, 这些字符串的动态部分可被剥离标签(tag), 并可由用户通过tag specifier进行配置;

        config.metrics.v2.StatsConfig

        config.metrics.v2.TagSpecifier


Metrics with Prometheus StatsD Exporter and Grafana:

image.png