管理介面

Envoy 暴露了一個本地管理介面,可以用於查詢和修改伺服器的不同方面

注意

目前形式的管理介面允許執行破壞性操作(例如,關閉伺服器),也可能暴露私人資訊(例如,統計數據、叢集名稱、憑證資訊等)。**至關重要**的是,僅允許透過安全網路存取管理介面。同樣**至關重要**的是,存取管理介面的主機**僅**連接到安全網路(即,避免 CSRF 攻擊)。這涉及到設定適當的防火牆,或者最佳方式是僅允許透過 localhost 存取管理監聽器。這可以使用類似以下的 v2 組態來完成

admin:
  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 序列化的 proto。具有預設值的欄位不會呈現。例如,對於 *\/clusters?format=json*,當其值為 DEFAULT 優先權時,斷路器閾值優先權欄位會被省略,如下所示

{
 "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 首頁。這可以透過在編譯 Envoy 時使用 --define=admin_html=disabled 來停用,在這種情況下會列印錯誤訊息。停用 HTML 模式會減少 Envoy 二進制檔案的大小。

GET /help

列印所有可用選項的文字表格。

GET /certs

以 JSON 格式列出所有已載入的 TLS 憑證,包括檔案名稱、序號、主體替代名稱以及到期前的天數,符合 憑證 proto 定義

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

布林值

主機是否為 Canary

success_rate

雙精度浮點數

請求成功率 (0-100)。如果在 間隔 中沒有足夠的 請求量 來計算它,則為 -1

主機健康狀態

主機由於一或多個不同的失敗健康狀態而處於健康或不健康狀態。如果主機處於健康狀態,則 healthy 輸出將等於 *healthy*。

如果主機不健康,則 healthy 輸出將由以下一或多個字串組成

*\/failed_active_hc*:主機已失敗 作用中健康檢查

*\/failed_eds_health*:主機已被 EDS 標記為不健康。

*\/failed_outlier_check*:主機已失敗離群值偵測檢查。

GET /clusters?format=json

以 JSON 序列化的 proto 轉儲 *\/clusters* 輸出。請參閱 定義 以取得更多資訊。

GET /config_dump

以 JSON 序列化的 proto 訊息形式轉儲目前從各種 Envoy 元件載入的組態。請參閱 回應定義 以取得更多資訊。

警告

組態可能包含 TLS 憑證。在轉儲組態之前,Envoy 會嘗試從它找到的任何憑證中編輯 private_keypassword 欄位。這依賴於組態是強類型 protobuf 訊息。如果您的 Envoy 組態使用已棄用的 config 欄位(類型為 google.protobuf.Struct),請更新為建議的 typed_config 欄位(類型為 google.protobuf.Any),以確保敏感資料被正確編輯。

警告

底層 proto 被標記為 v2alpha,因此其內容(包括 JSON 表示法)不保證穩定。

GET /config_dump?include_eds

轉儲目前載入的組態,包括 EDS。請參閱 回應定義 以取得更多資訊。

GET /config_dump?mask={}

指定您想要傳回的欄位子集。遮罩會被剖析為 ProtobufWkt::FieldMask,並應用於每個頂層轉儲,例如 BootstrapConfigDumpClustersConfigDump。如果同時指定了 resource 和 mask 查詢參數,則此行為會變更。請參閱下文以了解詳細資訊。

GET /config_dump?resource={}

僅轉儲符合指定資源的目前載入組態。該資源必須是頂層組態轉儲之一中的重複欄位,例如 static_listeners,來自 ListenersConfigDump,或 dynamic_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

以 JSON 序列化的 proto 訊息格式傾印各種 Envoy 元件的未就緒目標的目前資訊。請參閱 回應定義 以取得更多資訊。

GET /init_dump?mask={}

當指定 mask 查詢參數時,mask 值是要傾印未就緒目標的所需元件。mask 會被解析為 ProtobufWkt::FieldMask

例如,使用 /init_dump?mask=listener 取得所有接聽器的未就緒目標。

GET /listeners

列出所有已設定的 接聽器。此資訊包含接聽器的名稱以及它們正在接聽的位址。如果將接聽器設定為接聽連接埠 0,則輸出將包含作業系統配置的實際連接埠。

GET /listeners?format=json

以 JSON 序列化的 proto 格式傾印 /listeners 輸出。請參閱 定義 以取得更多資訊。

POST /logging

啟用/停用不同記錄器的記錄層級。

如果使用預設元件記錄器,則記錄器名稱應與元件名稱完全相同。

  • 若要變更所有記錄器的記錄層級,請將查詢參數設定為 level=<desired_level>

  • 若要變更特定記錄器的層級,請將查詢參數設定如下:<logger_name>=<desired_level>

  • 若要一次變更多個記錄層級,請將查詢參數設定為 paths=<logger_name1>:<desired_level1>,<logger_name2>:<desired_level2>

  • 若要列出記錄器,請將 POST 請求傳送至不含查詢參數的 /logging 端點。

如果設定 --enable-fine-grain-logging,則記錄器會由其所屬檔案的路徑表示(確切來說,是由 __FILE__ 決定的路徑),因此記錄器清單會顯示檔案路徑清單,並且應使用特定路徑作為 <logger_name> 來變更記錄層級。

我們也新增了檔案基本名稱、glob *? 對細微記錄器的支援。例如,我們有下列追蹤層級的作用中記錄器。

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 的層級設為 debug。

  • /logging?admin_filter=info 會將 source/server/admin/admin_filter.cc 的層級設為 info,而其他不匹配的記錄器則會是預設追蹤。

  • /logging?paths=source/common*:warning 會將 source/common/event/dispatcher_impl.cc:source/common/network/tcp_listener_impl.cc 的層級設為 warning。其他不匹配的記錄器則會是預設追蹤,例如 admin_filter.cc,即使它已從先前的 post 更新中更新為 info。

  • /logging?paths=???_listener_impl:info 會將 source/common/network/tcp_listener_impl.ccsource/common/network/udp_listener_impl.cc 的層級設為 info。

  • /logging?paths=???_listener_impl:info,tcp_listener_impl:warningsource/common/network/tcp_listener_impl.cc 的層級會是 info,因為第一個匹配會生效。

  • /logging?level=info 會將預設詳細程度層級變更為 info。接下來的更新中所有不匹配的記錄器都會是此預設層級。

GET /memory

以位元組為單位,印出目前的記憶體配置/堆積使用量。在不印出所有 /stats 並篩選以取得記憶體相關統計資訊的情況下,這很有用。

POST /quitquitquit

乾淨地結束伺服器。

POST /reset_counters

將所有計數器重設為零。這在除錯時與 GET /stats 一起使用很有用。請注意,這不會刪除傳送到 statsd 的任何資料。它只會影響 GET /stats 命令的本地輸出。

POST /drain_listeners

排空所有監聽器。

POST /drain_listeners?inboundonly

排空所有入站監聽器。 監聽器中的 traffic_direction 欄位用於判斷監聽器是入站還是出站。

POST /drain_listeners?graceful

在排空監聽器時,請在關閉監聽器之前進入寬限期。此行為和持續時間可透過伺服器選項或 CLI 進行設定 (--drain-time-s--drain-strategy)。

POST /drain_listeners?graceful&skip_exit

在排空監聽器時,請在排空期後不要結束。這必須與 graceful 一起使用。

注意

此操作會直接停止工作程序上匹配的監聽器。一旦停止給定流量方向的監聽器,就不允許在該方向上新增和修改監聽器。

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 protostate 欄位,以瞭解輸出的說明。

GET /stats

依要求輸出所有統計資訊。此命令對於本機除錯非常有用。直方圖會輸出計算出的分位數,即 P0、P25、P50、P75、P90、P99、P99.9 和 P100。每個分位數的輸出格式為 (間隔, 累計),其中間隔值表示自上次刷新以來的摘要。預設情況下,會設定計時器以依照 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、…)。每個值區的輸出格式為 (間隔, 累計) (例如 B0.5(0,0))。即使將它們放入其他值區,也會包含上限以下的所有值。與 usedonlyfilter 相容。

GET /stats?histogram_buckets=disjoint

變更直方圖輸出,以顯示具有上限的不相交值區(例如 B0.5、B1、B5、…)。每個值區的輸出格式為 (間隔, 累計) (例如 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 瀏覽器呈現統計資訊,提供表單欄位以漸進方式修改篩選器、切換僅使用模式、控制顯示的統計資訊類型,以及切換為另一種格式。

如果使用 –define=admin_html=disabled 編譯 Envoy,則會停用此格式

GET /stats?format=active-html

持續呈現統計資訊,顯示依變更頻率排序的前 50 個統計資訊。在此格式中,隱含僅使用模式。您可以漸進方式調整篩選器、類型子集、顯示的統計資訊數量,以及更新之間的間隔。

在使用此模式後,請務必關閉瀏覽器索引標籤,以避免伺服器定期更新統計資訊時對其造成負載。

如果使用 –define=admin_html=disabled 編譯 Envoy,則會停用此格式

GET /stats?format=json

以 JSON 格式輸出 /stats。這可以用於統計資訊的程式化存取。計數器和量計的格式將為一組 (名稱、值) 配對。直方圖將位於「直方圖」元素下,其中包含列出支援分位數的「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 將會觸發以 text/event-stream 格式從 Envoy 傳輸統計資訊的串流,如 Hystrix 儀表板所預期。

如果從瀏覽器或終端機叫用,回應將會顯示為連續串流,並以 Bootstrap stats_flush_interval 定義的間隔傳送。

只有在組態檔案中啟用 Hystrix 接收器時,才會啟用此處理常式,如 這裡 所述。

由於 Envoy 和 Hystrix 的復原機制不同,儀表板中顯示的一些統計資訊必須進行調整

  • 執行緒集區拒絕 - 通常與 Envoy 中所謂的短路類似,並由 upstream_rq_pending_overflow 計算,儘管執行緒集區一詞對 Envoy 來說並不準確。在 Hystrix 和 Envoy 中,結果都是拒絕的請求,不會傳遞到上游。

  • 斷路器狀態 (關閉或開啟) - 由於在 Envoy 中,斷路器是根據佇列中目前連線/請求的數量開啟,因此斷路器沒有睡眠視窗,斷路器開啟/關閉是瞬時的。因此,我們將斷路器狀態設定為「強制關閉」。

  • 短路 (拒絕) - Envoy 中存在這個術語,但指的是因為超過限制 (佇列或連線) 而未傳送的請求,而在 Hystrix 中,指的是因為在某個時間範圍內服務無法使用的回應百分比很高而未傳送的請求。在 Envoy 中,服務無法使用的回應將會導致離群值偵測 - 將節點從負載平衡器集區中移除,但不會因此拒絕請求。因此,此計數器始終設定為「0」。

  • 延遲資訊代表自上次刷新以來的資料。目前無法取得平均延遲。

POST /tap

此端點用於組態作用中 tap 工作階段。只有在已組態有效的 tap 擴充功能,且該擴充功能已組態為接受管理員組態時,此端點才可用。請參閱

POST /reopen_logs

觸發重新開啟所有存取記錄。行為與 SIGUSR1 處理類似。