3.3.6 Envoy的Admin API

为了更多地了解Envoy的功能,首先要熟悉Envoy的Admin API。Admin API使我们能够深入了解代理Envoy的行为方式,访问其指标以及其配置。让我们从curl proxy:15000/stats开始吧,如下所示:


$  docker run -it --rm --link proxy tutum/curl \
curl -X GET http://proxy:15000/stats

响应应该是一长串的监听器,显示集群和服务器本身的统计信息和度量标准。使用grep只显示带有retry的统计信息,如下所示:


$  docker run -it --rm --link proxy tutum/curl \
curl -X GET http://proxy:15000/stats | grep retry

cluster.httpbin_service.retry_or_shadow_abandoned: 0
cluster.httpbin_service.upstream_rq_retry: 0
cluster.httpbin_service.upstream_rq_retry_overflow: 0
cluster.httpbin_service.upstream_rq_retry_success: 0

如果直接调用Admin API,即直接访问根路径/,则应该能看到可以调用的其他端点的列表,如图3-7所示。

图3-7 Admin API

这些暴露的端点列表包括以下内容:

·/certs返回机器上的证书信息,例如返回如下内容:


{
  "ca_cert": "Certificate Path: /etc/certs/root-cert.pem, Serial Number: 547687120
d5008dd56f56cab95350cc4, Days until Expiration: 359",
  "cert_chain": "Certificate Path: /etc/certs/cert-chain.pem, Serial Number: b998
daa1938bd1765127ede73749e390, Days until Expiration: 88"
}

·/clusters返回上游集群状态信息,例如返回如下内容:


zipkin::default_priority::max_connections::1024
zipkin::default_priority::max_pending_requests::1024
zipkin::default_priority::max_requests::1024
zipkin::default_priority::max_retries::3
zipkin::high_priority::max_connections::1024

·/config_dump输出当前的Envoy配置,例如返回如下内容:


configs 
listeners {…}
clusters  {…}
bootstrap {…}
routes  {…}

·/cpuprof iler开启/关闭CPU prof iler,例如通过设置如下参数进行开启或关闭:?enable=。

·/healthcheck/fail导致服务器运行状况检查失败。

·/healthcheck/ok使服务器通过运行状况检查。

·/help:打印出管理命令列表。

·/hot_restart_version返回热重启兼容版本,例如:10.200.16384.256.options=capacity=16384,num_slots=8209 hash=228984379728933363 size=4882536。

·/listeners:返回监听器地址,例如:["0.0.0.0:15090","172.16.2.152:9080",....]

·/logging查询/更改日志级别,例如返回如下内容:


usage: /logging?<name>=<level> (change single level)
usage: /logging?level=<level> (change all levels)
levels: trace debug info warning error critical off

·/quitquitquit指退出服务。

·/reset_counters将计数器重置。

·/runtime返回运行时值,例如返回如下内容:


{
  "layers": [
    "admin"
  ],
  "entries": {}
}

·/runtime_modify修改运行时值,其用法如下所示:


usage: /runtime_modify?key1=value1&key2=value2&keyN=valueN
use an empty value to remove a previously added override

·/server_info返回服务器版本/状态信息,例如返回如下内容:envoy 0/1.8.0-dev//RELEASE live 95647 183339 2

·/stats返回服务器状态统计信息,例如返回如下内容:


cluster.BlackHoleCluster.bind_errors: 0
cluster.BlackHoleCluster.lb_healthy_panic: 0
cluster.BlackHoleCluster.lb_local_cluster_not_ok: 0
cluster.BlackHoleCluster.lb_recalculate_zone_structures: 0
cluster.BlackHoleCluster.lb_subsets_active: 0
cluster.BlackHoleCluster.lb_subsets_created: 0
cluster.BlackHoleCluster.lb_subsets_fallback: 0

·/stats/prometheus返回prometheus格式的服务器状态统计信息,例如返回如下内容:


# TYPE envoy_listener_downstream_cx_destroy counter
envoy_listener_downstream_cx_destroy{listener_address="0.0.0.0_8060"} 0
`# TYPE envoy_listener_downstream_cx_total counter
envoy_listener_downstream_cx_total{listener_address="0.0.0.0_8060"} 0
`# TYPE envoy_listener_http_downstream_rq counter
envoy_listener_http_downstream_rq{response_code_class="5xx",http_conn_manager_listener_prefix="0.0.0.0_8060",listener_address="0.0.0.0_8060"} 0
envoy_listener_http_downstream_rq{response_code_class="4xx",http_conn_manager_listener_prefix="0.0.0.0_8060",listener_address="0.0.0.0_8060"} 0