管理界面

Envoy 公开了一个本地管理界面,可用于查询和修改服务器的不同方面

注意

当前形式的管理界面既允许执行破坏性操作(例如,关闭服务器),也可能公开私人信息(例如,统计数据、集群名称、证书信息等)。至关重要的是,只有通过安全网络才能访问管理界面。同时,至关重要的是,访问管理界面的主机连接到安全网络(即,避免 CSRF 攻击)。这涉及设置适当的防火墙,或最优地仅允许通过 localhost 访问管理侦听器。这可以通过类似于以下内容的 v2 配置来完成

admin:
  profile_path: /tmp/envoy.prof
  address:
    socket_address: { address: 127.0.0.1, port_value: 9901 }

将来将在管理界面中添加更多安全选项。此工作在 此处 问题中进行跟踪。

所有变异必须以 HTTP POST 操作形式发送。当通过 GET 请求变异时,请求不会有任何效果,并且会返回 HTTP 400(无效请求)响应。

注意

对于带有?format=json 的端点,它将数据作为 JSON 序列化协议进行转储。具有默认值的字段不会被渲染。例如,对于/clusters?format=json,当电路断路器阈值优先级字段的值为 默认优先级 时,它将被省略,如下所示

{
 "thresholds": [
  {
   "max_connections": 1,
   "max_pending_requests": 1024,
   "max_requests": 1024,
   "max_retries": 1
  },
  {
   "priority": "HIGH",
   "max_connections": 1,
   "max_pending_requests": 1024,
   "max_requests": 1024,
   "max_retries": 1
  }
 ]
}
GET /

渲染一个带有链接到所有可用选项表的 HTML 主页。这可以通过使用 --define=admin_html=disabled 编译 Envoy 来禁用,在这种情况下会打印一条错误消息。禁用 HTML 模式会减小 Envoy 二进制文件的大小。

GET /help

打印所有可用选项的文本表格。

GET /certs

列出所有加载的 TLS 证书,包括文件名、序列号、主体备用名称和到期时间,以符合 证书协议定义 的 JSON 格式。

GET /clusters

列出所有配置的 集群管理器 集群。此信息包括每个集群中所有发现的上游主机,以及每个主机的统计数据。这对于调试服务发现问题非常有用。

集群管理器信息
  • version_info 字符串 – 最后加载的 CDS 更新的版本信息字符串。如果 Envoy 没有设置 CDS,则输出将显示为 version_info::static

集群范围信息
  • 所有优先级设置的 电路断路器 设置。

  • 有关 异常值检测 的信息(如果安装了检测器)。目前,会显示 平均成功率弹出阈值。如果在最后一次 间隔 内没有足够的数据来计算它们,则这两个值都可能是 -1

  • added_via_api 标志 – 如果集群是通过静态配置添加的,则为 false,如果它是通过 CDS api 添加的,则为 true

每个主机统计数据

名称

类型

描述

cx_total

计数器

总连接数

cx_active

计量器

总活动连接数

cx_connect_fail

计数器

总连接失败次数

rq_total

计数器

总请求数

rq_timeout

计数器

总超时请求数

rq_success

计数器

总请求数(非 5xx 响应)

rq_error

计数器

总请求数(5xx 响应)

rq_active

计量器

总活动请求数

healthy

字符串

主机的健康状态。见下文

weight

整数

负载均衡权重(1-100)

zone

字符串

服务区域

canary

布尔值

主机是否为金丝雀

success_rate

双精度

请求成功率(0-100)。如果在 请求量 内没有足够的数据来计算它,则为 -1

主机健康状态

主机由于一种或多种不同的健康检查失败状态而处于健康或不健康状态。如果主机处于健康状态,则 healthy 输出将等于healthy

如果主机不处于健康状态,则 healthy 输出将由以下一个或多个字符串组成

/failed_active_hc:主机已通过 活动健康检查 失败。

/failed_eds_health:主机被 EDS 标记为不健康。

/failed_outlier_check:主机已通过异常值检测检查失败。

GET /clusters?format=json

/clusters 输出作为 JSON 序列化协议转储。有关更多信息,请参见 定义

GET /config_dump

将当前从各种 Envoy 组件加载的配置作为 JSON 序列化协议消息转储。有关更多信息,请参见 响应定义

警告

配置可能包括 TLS 证书。在转储配置之前,Envoy 会尝试从它找到的任何证书中删除 private_keypassword 字段。这依赖于配置是强类型协议缓冲区消息。如果您的 Envoy 配置使用弃用的 config 字段(类型为 google.protobuf.Struct),请更新到推荐的 typed_config 字段(类型为 google.protobuf.Any),以确保敏感数据被正确删除。

警告

底层协议被标记为 v2alpha,因此其内容(包括 JSON 表示)不保证稳定。

GET /config_dump?include_eds

转储当前加载的配置,包括 EDS。有关更多信息,请参见 响应定义

GET /config_dump?mask={}

指定您想要返回的字段子集。掩码被解析为 ProtobufWkt::FieldMask,并应用于每个顶级转储,例如 BootstrapConfigDumpClustersConfigDump。如果同时指定了资源和掩码查询参数,则此行为会发生改变。有关详细信息,请参见下文。

GET /config_dump?resource={}

仅转储与指定资源匹配的当前加载的配置。资源必须是顶级配置转储(例如 static_listeners 来自 ListenersConfigDumpdynamic_active_clusters 来自 ClustersConfigDump)中的一个重复字段。如果您需要非重复字段,请使用上面记录的掩码查询参数。如果您只想从重复资源中获取字段子集,请同时使用它们,如下所述。

GET /config_dump?name_regex={}

仅转储当前加载的且名称匹配指定正则表达式的配置。可与 resourcemask 查询参数一起使用。

例如,/config_dump?name_regex=.*substring.* 将返回所有名称字段与给定正则表达式匹配的资源类型。

对于每个资源,匹配的名称字段为

对于 ECDS 配置转储,匹配的名称字段是相应的过滤器名称,存储在

GET /config_dump?resource={}&mask={}

当同时指定了 resource 和 mask 查询参数时,mask 将应用于所需重复字段中的每个元素,以便仅返回字段的子集。mask 被解析为 ProtobufWkt::FieldMask

例如,使用 /config_dump?resource=dynamic_active_clusters&mask=cluster.name 获取所有活动动态集群的名称。

GET /contention

以 JSON 格式转储当前 Envoy 互斥锁争用统计信息 (MutexStats),如果启用了互斥锁跟踪。见 --enable-mutex-tracing.

POST /cpuprofiler

启用或禁用 CPU 分析器。需要使用 gperftools 编译。输出文件可以通过 admin.profile_path 配置。

POST /heapprofiler

启用或禁用堆分析器。需要使用 gperftools 编译。输出文件可以通过 admin.profile_path 配置。

GET /heap_dump

转储当前 Envoy 进程的堆分析。输出内容是 pprof 工具可解析的二进制文件。需要使用 tcmalloc(默认)编译。

POST /allocprofiler

启用或禁用分配分析器。输出内容是 pprof 工具可解析的二进制文件。需要使用 tcmalloc(默认)编译。

POST /healthcheck/fail

使入站健康检查失败。这需要使用 HTTP 健康检查过滤器。这对于在关闭服务器或执行完整重启之前排出服务器很有用。调用此命令将普遍使健康检查请求失败,无论过滤器如何配置(通过等)。

POST /healthcheck/ok

抵消 POST /healthcheck/fail 的影响。这需要使用 HTTP 健康检查过滤器.

GET /hot_restart_version

--hot-restart-version.

GET /init_dump

转储当前各种 Envoy 组件的未就绪目标信息,以 JSON 序列化的协议消息形式。有关详细信息,请参见 响应定义.

GET /init_dump?mask={}

当指定了 mask 查询参数时,mask 值是所需组件以转储未就绪目标。mask 被解析为 ProtobufWkt::FieldMask

例如,使用 /init_dump?mask=listener 获取所有侦听器的未就绪目标。

GET /listeners

列出所有配置的 侦听器。此信息包括侦听器名称以及它们正在侦听的地址。如果侦听器配置为侦听端口 0,则输出将包含由操作系统分配的实际端口。

GET /listeners?format=json

以 JSON 序列化的协议消息形式转储 /listeners 输出。有关详细信息,请参见 定义.

POST /logging

启用/禁用不同日志记录器的日志记录级别。

如果使用默认组件日志记录器,日志记录器名称应与组件名称完全一致。

  • 要更改所有日志记录器的日志记录级别,请将查询参数设置为 level=<desired_level>

  • 要更改特定日志记录器的级别,请按以下方式设置查询参数:<logger_name>=<desired_level>

  • 要一次更改多个日志记录级别,请将查询参数设置为 paths=<logger_name1>:<desired_level1>,<logger_name2>:<desired_level2>

  • 要列出日志记录器,请向 /logging 终结点发送 POST 请求,不带查询参数。

如果设置了 --enable-fine-grain-logging,日志记录器由其所属文件的路径表示(更具体地说,是由 __FILE__ 确定的路径),因此日志记录器列表将显示文件路径列表,并且应使用特定路径作为 <logger_name> 来更改日志级别。

我们还添加了文件基本名称、通配符 *? 支持以用于细粒度日志记录器。例如,我们有以下处于跟踪级别的活动日志记录器。

source/server/admin/admin_filter.cc: 0
source/common/event/dispatcher_impl.cc: 0
source/common/network/tcp_listener_impl.cc: 0
source/common/network/udp_listener_impl.cc: 0
  • /logging?paths=source/common/event/dispatcher_impl.cc:debug 将使 source/common/event/dispatcher_impl.cc 的级别为调试。

  • /logging?admin_filter=info 将使 source/server/admin/admin_filter.cc 的级别为信息,其他不匹配的日志记录器将是默认的跟踪。

  • /logging?paths=source/common*:warning 将使 source/common/event/dispatcher_impl.cc:source/common/network/tcp_listener_impl.cc 的级别为警告。其他不匹配的日志记录器将是默认的跟踪,例如 admin_filter.cc,即使它已从先前的发布更新更新为信息。

  • /logging?paths=???_listener_impl:info 将使 source/common/network/tcp_listener_impl.ccsource/common/network/udp_listener_impl.cc 的级别为信息。

  • /logging?paths=???_listener_impl:info,tcp_listener_impl:warningsource/common/network/tcp_listener_impl.cc 的级别将是信息,因为第一次匹配将生效。

  • /logging?level=info 将将默认详细程度级别更改为信息。以下更新中所有不匹配的日志记录器都将是此默认级别。

GET /memory

以字节为单位打印当前内存分配/堆使用情况。在打印所有 /stats 并进行过滤以获取与内存相关的统计信息时很有用。

POST /quitquitquit

干净地退出服务器。

POST /reset_counters

将所有计数器重置为零。这与 GET /stats 一起使用在调试期间很有用。请注意,这不会丢弃发送到 statsd 的任何数据。它只影响 GET /stats 命令的本地输出。

POST /drain_listeners

排出 所有侦听器。

POST /drain_listeners?inboundonly

排出 所有入站侦听器。 traffic_direction 字段位于 Listener 中,用于确定侦听器是入站还是出站。

POST /drain_listeners?graceful

在排空监听器时,在关闭监听器之前进入一个平滑排空阶段。此行为和持续时间可以通过服务器选项或 CLI 配置 (--drain-time-s--drain-strategy )。

POST /drain_listeners?graceful&skip_exit

在排空监听器时,排空阶段结束后不要退出。这必须与 graceful 一起使用。

注意

此操作直接在 worker 上停止匹配的监听器。一旦给定流量方向上的监听器停止,就不允许在该方向上添加或修改监听器。

GET /server_info

输出包含有关正在运行的服务器的信息的 JSON 消息。

示例输出如下

{
  "version": "b050513e840aa939a01f89b07c162f00ab3150eb/1.9.0-dev/Modified/DEBUG",
  "state": "LIVE",
  "command_line_options": {
    "base_id": "0",
    "concurrency": 8,
    "config_path": "config.yaml",
    "config_yaml": "",
    "allow_unknown_static_fields": false,
    "admin_address_path": "",
    "local_address_ip_version": "v4",
    "log_level": "info",
    "component_log_level": "",
    "log_format": "[%Y-%m-%d %T.%e][%t][%l][%n] %v",
    "log_path": "",
    "hot_restart_version": false,
    "service_cluster": "",
    "service_node": "",
    "service_zone": "",
    "mode": "Serve",
    "disable_hot_restart": false,
    "enable_mutex_tracing": false,
    "restart_epoch": 0,
    "file_flush_interval": "10s",
    "drain_time": "600s",
    "parent_shutdown_time": "900s",
    "cpuset_threads": false
  },
  "uptime_current_epoch": "6s",
  "uptime_all_epochs": "6s",
  "node": {
    "id": "node1",
    "cluster": "cluster1",
    "user_agent_name": "envoy",
    "user_agent_build_version": {
      "version": {
        "major_number": 1,
        "minor_number": 15,
        "patch": 0
      }
    },
    "metadata": {},
    "extensions": [],
    "client_features": [],
    "listening_addresses": []
  }
}

有关输出的说明,请参见 ServerInfo proto

GET /ready

输出一个字符串和错误代码,反映服务器的状态。LIVE 状态返回 200,其他状态返回 503。这可以用作就绪性检查。

示例输出

LIVE

有关输出的说明,请参见 ServerInfo proto 中的 state 字段。

GET /stats

按需输出所有统计信息。此命令对于本地调试非常有用。直方图将输出计算的分位数,即 P0、P25、P50、P75、P90、P99、P99.9 和 P100。每个分位数的输出格式为 (interval,cumulative),其中 interval 值表示自上次刷新以来的摘要。默认情况下,会设置一个计时器,以 stats_flush_interval 定义的间隔进行刷新,默认值为 5 秒。如果指定了 stats_flush_on_admin,则在查询此端点时会刷新统计信息,并且不会使用计时器。累积值表示自 Envoy 实例启动以来的摘要。“直方图输出中没有记录的值”表示它尚未更新为值。有关更多信息,请参见 此处

GET /stats?usedonly

输出 Envoy 已更新的统计信息(计数器至少增加一次,指标至少更改一次,直方图至少添加一次)。

仅输出内部标记为隐藏的统计信息。

隐藏的统计信息将与非隐藏的统计信息一起显示。

隐藏的统计信息将从输出中排除。这是默认行为。

GET /stats?filter=regex

将返回的统计信息过滤为名称与正则表达式 regex 匹配的统计信息。与 usedonly 兼容。默认情况下执行部分匹配,因此 /stats?filter=server 将返回所有包含单词 server 的统计信息。可以使用行首和行尾锚点指定全字符串匹配。(例如,/stats?filter=^server.concurrency$

默认情况下,正则表达式使用 Google RE2 引擎进行评估。

GET /stats?histogram_buckets=cumulative

更改直方图输出,以显示具有上限的累积桶(例如 B0.5、B1、B5、…)。每个桶的输出格式为 (interval,cumulative)(例如 B0.5(0,0))。即使值被放入其他桶中,所有低于上限的值都包含在内。与 usedonlyfilter 兼容。

GET /stats?histogram_buckets=disjoint

更改直方图输出,以显示具有上限的不相交桶(例如 B0.5、B1、B5、…)。每个桶的输出格式为 (interval,cumulative)(例如 B0.5(0,0))。桶不包含来自具有更小上限的其他桶的值;前一个桶的上限充当下限。与 usedonlyfilter 兼容。

GET /stats?histogram_buckets=detailed

将直方图显示为百分位数汇总数据和原始桶数据。

示例输出 .. code-block:: text

http.admin.downstream_rq_time

totals=1,0.25:25, 2,0.25:9 intervals=1,0.25:2, 2,0.25:3 summary=P0(1,1) P25(1.0625,1.034) P50(2.0166,1.068) P75(2.058,2.005) P90(2.083,2.06) P95(2.091,2.08) P99(2.09,2.09) P99.5(2.099,2.098) P99.9(2.099,2.099) P100(2.1,2.1)

每个桶显示为 lower_bound,width:count。在上面的示例中,有两个桶。totals 包含自二进制文件启动以来的累积数据点。intervals 显示自上次统计信息刷新以来的新数据点。

usedonlyfilter 兼容。

GET /stats?format=html

使用 HTML 为 Web 浏览器呈现统计信息,提供表单字段来递增地修改过滤器、切换仅使用模式、控制显示的统计信息类型,以及切换到另一种格式。

如果 Envoy 使用 –define=admin_html=disabled 编译,则此格式将被禁用。

GET /stats?format=active-html

连续呈现统计信息,显示按更改频率排序的前 50 个统计信息。在此格式中,隐含仅使用模式。您可以递增地调整过滤器、类型子集、显示的统计信息数量以及更新之间的间隔。

使用此模式后,请务必关闭浏览器选项卡,以避免在定期更新统计信息时对服务器施加周期性负载。

如果 Envoy 使用 –define=admin_html=disabled 编译,则此格式将被禁用。

GET /stats?format=json

以 JSON 格式输出 /stats。这可用于以编程方式访问统计信息。计数器和指标将采用一组 (name,value) 对的形式。直方图将在元素 “histograms” 下,其中包含 “supported_quantiles”,它列出了支持的分位数,以及一个 computed_quantiles 数组,其中包含每个直方图的计算分位数。

如果直方图在某个间隔内未更新,则输出将为所有分位数返回 null。

示例直方图输出

{
  "histograms": {
    "supported_quantiles": [
      0, 25, 50, 75, 90, 95, 99, 99.9, 100
    ],
    "computed_quantiles": [
      {
        "name": "cluster.external_auth_cluster.upstream_cx_length_ms",
        "values": [
          {"interval": 0, "cumulative": 0},
          {"interval": 0, "cumulative": 0},
          {"interval": 1.0435787, "cumulative": 1.0435787},
          {"interval": 1.0941565, "cumulative": 1.0941565},
          {"interval": 2.0860023, "cumulative": 2.0860023},
          {"interval": 3.0665233, "cumulative": 3.0665233},
          {"interval": 6.046609, "cumulative": 6.046609},
          {"interval": 229.57333,"cumulative": 229.57333},
          {"interval": 260,"cumulative": 260}
        ]
      },
      {
        "name": "http.admin.downstream_rq_time",
        "values": [
          {"interval": null, "cumulative": 0},
          {"interval": null, "cumulative": 0},
          {"interval": null, "cumulative": 1.0435787},
          {"interval": null, "cumulative": 1.0941565},
          {"interval": null, "cumulative": 2.0860023},
          {"interval": null, "cumulative": 3.0665233},
          {"interval": null, "cumulative": 6.046609},
          {"interval": null, "cumulative": 229.57333},
          {"interval": null, "cumulative": 260}
        ]
      }
    ]
  }
}
GET /stats?format=json&usedonly

以 JSON 格式输出 Envoy 已更新的统计信息(计数器至少增加一次,指标至少更改一次,直方图至少添加一次)。

GET /stats?format=json&histogram_buckets=cumulative

更改直方图输出,以显示具有上限的累积桶。即使值被放入其他桶中,所有低于上限的值都包含在内。与 usedonlyfilter 兼容。

示例直方图输出

{
  "histograms": [
    {
      "name": "example_histogram",
      "buckets": [
        {"upper_bound": 1, "interval": 0, "cumulative": 0},
        {"upper_bound": 2, "interval": 0, "cumulative": 1},
        {"upper_bound": 3, "interval": 1, "cumulative": 3},
        {"upper_bound": 4, "interval": 1, "cumulative": 3}
      ]
    },
    {
      "name": "other_example_histogram",
      "buckets": [
        {"upper_bound": 0.5, "interval": 0, "cumulative": 0},
        {"upper_bound": 1, "interval": 0, "cumulative": 0},
        {"upper_bound": 5, "interval": 0, "cumulative": 0},
        {"upper_bound": 10, "interval": 0, "cumulative": 0},
        {"upper_bound": 25, "interval": 0, "cumulative": 0},
        {"upper_bound": 50, "interval": 0, "cumulative": 0},
        {"upper_bound": 100, "interval": 0, "cumulative": 0},
        {"upper_bound": 250, "interval": 0, "cumulative": 0},
        {"upper_bound": 500, "interval": 0, "cumulative": 0},
        {"upper_bound": 1000, "interval": 0, "cumulative": 0},
        {"upper_bound": 2500, "interval": 0, "cumulative": 100},
        {"upper_bound": 5000, "interval": 0, "cumulative": 300},
        {"upper_bound": 10000, "interval": 0, "cumulative": 600},
        {"upper_bound": 30000, "interval": 0, "cumulative": 600},
        {"upper_bound": 60000, "interval": 0, "cumulative": 600},
        {"upper_bound": 300000, "interval": 0, "cumulative": 600},
        {"upper_bound": 600000, "interval": 0, "cumulative": 600},
        {"upper_bound": 1800000, "interval": 0, "cumulative": 600},
        {"upper_bound": 3600000, "interval": 0, "cumulative": 600}
      ]
    }
  ]
}
GET /stats?format=json&histogram_buckets=disjoint

更改直方图输出,以显示具有上限的不相交桶。桶不包含来自具有更小上限的其他桶的值;前一个桶的上限充当下限。与 usedonlyfilter 兼容。

示例直方图输出

{
  "histograms": [
    {
      "name": "example_histogram",
      "buckets": [
        {"upper_bound": 1, "interval": 0, "cumulative": 0},
        {"upper_bound": 2, "interval": 0, "cumulative": 1},
        {"upper_bound": 3, "interval": 1, "cumulative": 2},
        {"upper_bound": 4, "interval": 0, "cumulative": 0}
      ]
    },
    {
      "name": "other_example_histogram",
      "buckets": [
        {"upper_bound": 0.5, "interval": 0, "cumulative": 0},
        {"upper_bound": 1, "interval": 0, "cumulative": 0},
        {"upper_bound": 5, "interval": 0, "cumulative": 0},
        {"upper_bound": 10, "interval": 0, "cumulative": 0},
        {"upper_bound": 25, "interval": 0, "cumulative": 0},
        {"upper_bound": 50, "interval": 0, "cumulative": 0},
        {"upper_bound": 100, "interval": 0, "cumulative": 0},
        {"upper_bound": 250, "interval": 0, "cumulative": 0},
        {"upper_bound": 500, "interval": 0, "cumulative": 0},
        {"upper_bound": 1000, "interval": 0, "cumulative": 0},
        {"upper_bound": 2500, "interval": 0, "cumulative": 100},
        {"upper_bound": 5000, "interval": 0, "cumulative": 200},
        {"upper_bound": 10000, "interval": 0, "cumulative": 0},
        {"upper_bound": 30000, "interval": 0, "cumulative": 0},
        {"upper_bound": 60000, "interval": 0, "cumulative": 0},
        {"upper_bound": 300000, "interval": 0, "cumulative": 0},
        {"upper_bound": 600000, "interval": 0, "cumulative": 0},
        {"upper_bound": 1800000, "interval": 0, "cumulative": 0},
        {"upper_bound": 3600000, "interval": 0, "cumulative": 0}
      ]
    }
  ]
}
GET /stats?format=json&histogram_buckets=detailed

将直方图显示为百分位数汇总数据。.

示例输出

{
  "stats": [
    {
      "histograms": {
        "supported_percentiles": [0, 25, 50, 75, 90, 95, 99, 99.5, 99.9, 100],
        "details": [
          {
            "name": "http.admin.downstream_rq_time",
            "percentiles": [
              { "interval": null, "cumulative": 1 },
              { "interval": null, "cumulative": 1.0351851851851852 },
              { "interval": null "cumulative": 1.0703703703703704 },
              { "interval": null, "cumulative": 2.0136363636363637 },
              { "interval": null "cumulative": 2.0654545454545454 },
              { "interval": null "cumulative": 2.0827272727272725 },
              { "interval": null "cumulative": 2.0965454545454545 },
              { "interval": null, "cumulative": 2.098272727272727 },
              { "interval": null, "cumulative": 2.0996545454545457 },
              { "interval": null "cumulative": 2.1 }
            ],
            "totals": [
              { "lower_bound": 1, "width": 0.25, "count": 25 },
              { "lower_bound": 2, "width": 0.25, "count": 9 }
            ],
            "intervals": [
              { "lower_bound": 1, "width": 0.25, "count": 2 },
              { "lower_bound": 2, "width": 0.25, "count": 3 }
            ],
          },
        ]
      }
    }
  ]
}

usedonlyfilter 兼容。

GET /stats?format=prometheus

或者,

GET /stats/prometheus

Prometheus v0.0.4 格式输出 /stats。这可用于与 Prometheus 服务器集成。

GET /stats?format=prometheus&usedonly

您可以选择传递 usedonly URL 查询参数,以仅获取 Envoy 已更新的统计信息(计数器至少增加一次,指标至少更改一次,直方图至少添加一次)。

GET /stats?format=prometheus&text_readouts

可选的 text_readouts 查询参数用于获取所有统计信息,包括文本读出。文本读出统计信息以指标格式返回。这些指标的值始终为 0。每个指标记录都有一个名为 text_value 的附加标签,其中包含文本读出的值。

警告

Prometheus 中,每个唯一的键值标签对组合都代表一个新的时间序列,这会显著增加存储的数据量。文本读出统计信息会在文本读出统计信息的值每次变化时创建一个新的标签值,这可能会产生无限数量的时间序列。

GET /stats?format=prometheus&histogram_buckets=summary

可选的 histogram_buckets 查询参数用于控制直方图指标的报告方式。如果未设置,则直方图将作为“histogram” Prometheus 指标类型报告,但如果设置为 summary,也可以用于发出 Prometheus “summary” 指标。每个发出的摘要都涵盖了最后一个 stats_flush_interval 的间隔。

示例直方图输出

# TYPE envoy_server_initialization_time_ms histogram
envoy_server_initialization_time_ms_bucket{le="0.5"} 0
envoy_server_initialization_time_ms_bucket{le="1"} 0
envoy_server_initialization_time_ms_bucket{le="5"} 0
envoy_server_initialization_time_ms_bucket{le="10"} 0
envoy_server_initialization_time_ms_bucket{le="25"} 0
envoy_server_initialization_time_ms_bucket{le="50"} 0
envoy_server_initialization_time_ms_bucket{le="100"} 0
envoy_server_initialization_time_ms_bucket{le="250"} 1
envoy_server_initialization_time_ms_bucket{le="500"} 1
envoy_server_initialization_time_ms_bucket{le="1000"} 1
envoy_server_initialization_time_ms_bucket{le="2500"} 1
envoy_server_initialization_time_ms_bucket{le="5000"} 1
envoy_server_initialization_time_ms_bucket{le="10000"} 1
envoy_server_initialization_time_ms_bucket{le="30000"} 1
envoy_server_initialization_time_ms_bucket{le="60000"} 1
envoy_server_initialization_time_ms_bucket{le="300000"} 1
envoy_server_initialization_time_ms_bucket{le="600000"} 1
envoy_server_initialization_time_ms_bucket{le="1800000"} 1
envoy_server_initialization_time_ms_bucket{le="3600000"} 1
envoy_server_initialization_time_ms_bucket{le="+Inf"} 1
envoy_server_initialization_time_ms_sum{} 115.000000000000014210854715202
envoy_server_initialization_time_ms_count{} 1

示例摘要输出

# TYPE envoy_server_initialization_time_ms summary
envoy_server_initialization_time_ms{quantile="0"} 110.00000000000001
envoy_server_initialization_time_ms{quantile="0.25"} 112.50000000000001
envoy_server_initialization_time_ms{quantile="0.5"} 115.00000000000001
envoy_server_initialization_time_ms{quantile="0.75"} 117.50000000000001
envoy_server_initialization_time_ms{quantile="0.9"} 119.00000000000001
envoy_server_initialization_time_ms{quantile="0.95"} 119.50000000000001
envoy_server_initialization_time_ms{quantile="0.99"} 119.90000000000002
envoy_server_initialization_time_ms{quantile="0.995"} 119.95000000000002
envoy_server_initialization_time_ms{quantile="0.999"} 119.99000000000001
envoy_server_initialization_time_ms{quantile="1"} 120.00000000000001
envoy_server_initialization_time_ms_sum{} 115.000000000000014210854715202
envoy_server_initialization_time_ms_count{} 1
GET /stats/recentlookups

此端点帮助 Envoy 开发人员调试统计系统中的潜在争用问题。最初,只累积 StatName 查找的计数,而不是正在查找的特定名称。为了查看特定最近请求,必须通过 POST 到 /stats/recentlookups/enable 来启用该功能。每个查找可能会有大约 40-100 纳秒的额外开销。

启用后,此端点会发出一个表格,其中包含 Envoy 最近以字符串形式访问的统计名称。理想情况下,字符串应该只在启动期间或通过 xDS 接收新配置时由 Envoy 代码转换为 StatNames、计数器、测量值和直方图。这是因为当统计信息作为字符串查找时,它们必须获取全局符号表锁。在启动期间这是可以接受的,但在高核心数机器上的用户请求响应中,由于互斥锁争用,这会导致性能问题。

有关更多详细信息,请参阅 source/docs/stats.md

还要注意,实际的互斥锁争用可以通过 GET /contention 进行跟踪。

POST /stats/recentlookups/enable

打开统计名称最近查找的收集,从而启用 /stats/recentlookups

有关更多详细信息,请参阅 source/docs/stats.md

POST /stats/recentlookups/disable

关闭统计名称最近查找的收集,从而禁用 /stats/recentlookups。它还会清除查找列表。但是,作为统计信息 server.stats_recent_lookups 可见的总计数不会被清除,并且会继续累积。

有关更多详细信息,请参阅 source/docs/stats.md

POST /stats/recentlookups/clear

清除所有未完成的查找和计数。这会清除所有最近查找数据以及计数,但如果已启用,收集将继续进行。

有关更多详细信息,请参阅 source/docs/stats.md

GET /runtime

按需以 JSON 格式输出所有运行时值。有关如何配置和使用这些值的更多信息,请参见 此处。输出包括活动运行时覆盖层列表以及每个键的层值堆栈。空字符串表示没有值,并且堆栈中的最终活动值也包含在单独的键中。示例输出

{
  "layers": [
    "disk",
    "override",
    "admin",
  ],
  "entries": {
    "my_key": {
      "layer_values": [
        "my_disk_value",
        "",
        ""
      ],
      "final_value": "my_disk_value"
    },
    "my_second_key": {
      "layer_values": [
        "my_second_disk_value",
        "my_disk_override_value",
        "my_admin_override_value"
      ],
      "final_value": "my_admin_override_value"
    }
  }
}
POST /runtime_modify?key1=value1&key2=value2&keyN=valueN

添加或修改运行时值,如查询参数中传递的。要删除先前添加的键,请使用空字符串作为值。请注意,删除仅适用于通过此端点添加的覆盖;从磁盘加载的值可以通过覆盖进行修改,但不能删除。

注意

谨慎使用 /runtime_modify 端点。更改实际上是立即生效的。**至关重要**的是,管理界面必须 得到妥善保护.

GET /hystrix_event_stream

此端点旨在用作 Hystrix 仪表盘 的流源。对该端点进行 GET 操作将触发来自 Envoy 的统计信息流,以 text/event-stream 格式,如 Hystrix 仪表盘所预期的那样。

如果从浏览器或终端调用,则响应将显示为连续流,以 Bootstrap stats_flush_interval 定义的间隔发送。

此处理程序仅在配置文件中启用 Hystrix 接收器时启用,如 此处 所述。

由于 Envoy 和 Hystrix 的弹性机制不同,因此仪表盘中显示的一些统计信息必须进行调整。

  • 线程池拒绝 - 通常类似于 Envoy 中称为短路的内容,并由 upstream_rq_pending_overflow 计数,尽管线程池这个术语对于 Envoy 并不准确。在 Hystrix 和 Envoy 中,结果都是被拒绝的请求,这些请求不会传递到上游。

  • 断路器状态(关闭或打开) - 由于在 Envoy 中,断路器是根据当前队列中的连接/请求数量打开的,因此没有断路器的休眠窗口,断路器打开/关闭是瞬时的。因此,我们将断路器状态设置为“强制关闭”。

  • 短路(拒绝) - 该术语存在于 Envoy 中,但指的是由于超过了限制(队列或连接)而未发送的请求,而在 Hystrix 中,它指的是由于在一段时间内服务不可用响应的百分比很高而未发送的请求。在 Envoy 中,服务不可用响应会导致异常检测 - 从负载均衡器池中移除节点,但不会因此而拒绝请求。因此,此计数器始终设置为“0”。

  • 延迟信息表示自上次刷新以来的数据。目前没有平均延迟信息。

POST /tap

此端点用于配置活动窃听会话。它只有在配置了有效的窃听扩展并且该扩展配置为接受管理配置时才可用。请参阅

POST /reopen_logs

触发重新打开所有访问日志。行为类似于 SIGUSR1 处理。