添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Attention

当前形式的管理界面不仅允许执行破坏性操作(例如,关闭服务器),而且还可能公开私有信息(例如,统计信息、集群名称、证书信息等)。 至关重要的是 ,仅允许通过安全网络访问管理界面。将访问管理界面的主机 连接到安全网络也很 重要 (即,避免 CSRF 攻击)。 这涉及设置适当的防火墙,或者最好只允许通过本地主机访问管理监听器。可以使用以下 v2 配置来完成此操作:

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

将来,其他安全选项将添加到管理接口。在 issue 中跟踪了这项工作。

所有变更都必须作为 HTTP POST 操作发送。通过 GET 请求变更时,该请求无效,并返回 HTTP 400(无效请求)响应。

对带有 ?format=json 的端点,它将转储数据作为 JSON 序列化原型。具有默认值的字段不会渲染。例如 /clusters?format=json, 当其值为 DEFAULT priority 时,将断路器阈值优先级字段,如下所示:

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

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

    • 有关安装了检测器的 异常检测 的信息。目前, 会展示 平均成功率弹出阈值。 如果最后一次 :ref/interval<envoy_v3_api_field_config.cluster.v3.OutlierDetection.interval> 中没有足够的数据来计算它们,那么这两个值都可能为 -1

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

    • 各主机统计
      主机健康状态

      主机由于一个或多个不同的失败健康状态而处于是健康或者不健康状态。如果主机健康,则 healthy 属于将等同于 健康

      如果主机是不健康的,则 healthy 输出由一个或者多个如下字符串组成:

      /failed_active_hc: 主机无法通过 活动健康检查

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

      /failed_outlier_check: 主机未完成异常值检测检查。

      Warning

      配置可以包括 TLS 证书。 转储配置前,Envoy 将尝试编辑找到的任何证书的 private_keypassword 字段。这取决于配置是否为强类型 protobuf 消息。 如果 Envoy 配置使用已弃用的 config 字段(类型 google.protobuf.Struct),请更新为建议的 typed_config 字段(类型 google.protobuf.Any)以确保正确编辑敏感数据。

      Warning

      基础原型被标记为 v2alpha,因此不能保证其内容(包括 JSON 表示形式)是稳定的。

      GET /config_dump?include_eds

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

      GET /config_dump?mask={}

      指定要返回的字段的子集。掩码被解析为 ProtobufWkt::FieldMask 并应用于每个顶级转储,例如 BootstrapConfigDumpClustersConfigDump。如果同时指定了资源和掩码查询参数, 则此行为将更改。详情请见下文。

      GET /config_dump?resource={}

      仅转储与指定资源匹配的已加载的配置。资源必须是顶级配置转储之一中的重复字段,例如 ListenersConfigDump 中的 static_listeners, 或者 ClustersConfigDump 中的 dynamic_active_clusters。 如果需要非重复字段,请使用上面的掩码查询参数。如果只需要重复资源的字段的子集,请按照以下两个说明使用。

      GET /config_dump?resource={}&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 配置输出文件。

      POST /healthcheck/fail

      入站健康检查失败。这需要使用 HTTP 健康检查过滤器。 这对于在关闭服务器或完全重新启动之前排空服务器很有用。无论过滤器的配置方式如何(通过等),调用此命令通常都会使健康检查请求失败。

      POST /healthcheck/ok

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

      GET /hot_restart_version

      See --hot-restart-version.

      GET /init_dump

      将各种 Envoy 组件未就绪目标的当前信息转储为 JSON 序列化的原始消息。 有关更多信息,见 响应定义

      GET /init_dump?mask={}

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

      例如,通过 /init_dump?mask=listener 获取为所有监听器中未就绪的目标。

      GET /listeners

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

      GET /listeners?format=json

      /listeners 输出转储到 JSON 序列化的原型中。详细信息见 定义

      POST /logging

      在特定的记录器或者所有记录器上启用/禁用不同的日志记录级别。

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

    • 要修改特定记录器的级别,将查询参数设置为 <logger_name>=<期望级别>。

    • 要列出所有的记录器,发送 POST 请求到 /logging 断点,而不带查询参数。

    • 通常仅在开发期间使用。设置为 –enable-fine-grain-logging 后, 记录器由其所属文件的路径表示(具体来说,由 __FILE__ 确定的路径), 因此记录器列表将显示一个文件路径列表,并且特定路径应用作 <logger_name > 来更改日志级别。

      POST /drain_listeners?graceful

      排空监听器时,在关闭监听器前进入一个优雅的排空期。这种行为和持续时间可通过服务器选项或者 CLI(--drain-time-s and --drain-strategy)来配置。

      Attention

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

      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 原型 中对输出的解释。

      GET /ready

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

      示例输出:

      查看 ServerInfo protostat 字段的输出说明。

      GET /stats

      根据需要输出所有统计信息。此命令对本地调试非常有用。直方图将输出计算的分位数,即 P0、P25、P50、P75、P90、P99、P99.9 和 P100. 每个分位数的输出将采用(间隔,累计值)的形式,其中间隔值代表自上次刷新间隔依赖的摘要,累计值代表自 Envoy 实例启动依赖的摘要。 直方图输出中的“未记录的值”标识尚未使用值进行更新。 有关更多信息,见 这里

      GET /stats?usedonly

      输出 Envoy 已更新的统计信息(计数器至少增加一次、计量器至少改变一次、直方图至少增加一次)。

      GET /stats?filter=regex

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

      GET /stats?format=json

      以 JSON 格式输出 /stats。这可以用于以编程的方式访问统计信息。计数器和计量器将采用一组(名称,值)对的形式。 直方图将在元素“histograms”下,该元素包含“supported_quantiles”(列出支持的分位数) 和一个 computed_quantiles 数组,该数组具有每个直方图的已计算分位数。

      如果在间隔内直方图未更新,则所有分位数的输出都将为空。

      实例直方图输出如下:

      "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}

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

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

      GET /stats/recentlookups

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

      启用后,此端点将发出最近被 Envoy 以字符串形式访问的指标名。理想情况下,仅在启动过程中或通过 xDS 接收新配置时, 才应将字符串转换为 StatName、计数器、计量器和直方图。这是因为当将统计信息作为字符串查找时,它们必须讲全局符号表锁定。 在启动过程中这是可以接受的,但是在高核心数计算机上响应的用户请求,由于互斥锁争用,这可能会导致性能问题。

      该管理端点需要 Envoy 使用 –use-fake-symbol-table 0 选项启动。

      更多详细信息见 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

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

      Attention

      使用 /runtime_modify 端点时要小心。变更会立即生效。 至关重要的是,管理接口必须是被 正确保护的

      GET /hystrix_event_stream

      该端点旨在用作 Hystrix 仪表盘 的流源。 到此端点的 GET 请求会触发来自 Envoy text/event-stream 格式的统计数据流,如 Hystrix 仪表板所期望的那样。

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

      仅当在配置文件中启用 Hystrix 接收器时,才启用此处理器,如 这里 记录的那样。

      由于 Envoy 和 Hystrix 的弹性机制不同,因此必须调整仪表板中显示的某些统计信息:

    • 线程池拒绝 - 通常类似于 Envoy 中的断路,并由 upstream_rq_pending_overflow 进行计数, 尽管术语线程池不适用于 Envoy。在 Hystrix 和 Envoy 中,结果都是被拒绝的请求没有传递到上游。

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

    • ** 短接(拒绝)** - 该属于存在于 Envoy 中,但指的是由于超出限制(队列或者连接)而未返送的请求,而在 Hystrix 中, 指的是在某个时间范围内,由于服务不可用响应的百分比很高而未发送的请求。在 Envoy 中,服务不可用响应将导致“异常检测” - 从负载均衡器池中移除该节点,但最终不会拒绝请求。因此,这个计数器始终设置为 ‘0’。

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