命令列選項
Envoy 的運作方式由組態檔以及一組命令列選項驅動。以下是 Envoy 支援的命令列選項。
- -c <路徑 字串>, --config-path <路徑 字串>
(選用)JSON/YAML/proto3 組態檔的路徑。如果缺少此旗標,則必須使用
--config-yaml
。這將被解析為引導組態檔。有效的副檔名為.json
、.yaml
、.pb
和.pb_text
,分別表示 JSON、YAML、二進制 proto3 和 文字 proto3 格式。
- --config-yaml <yaml 字串>
(選用)引導組態的 YAML 字串。如果同時設定
--config-path
,則此 YAML 字串中的值將覆寫並合併從--config-path
載入的引導組態。由於 YAML 是 JSON 的超集,因此也可以將 JSON 字串傳遞給--config-yaml
。在命令列上覆寫節點 ID 的範例
./envoy -c bootstrap.yaml --config-yaml "node: {id: 'node1'}"
- --mode <字串>
(選用)Envoy 的其中一種操作模式
serve
:(預設)驗證 JSON 組態,然後正常提供流量。validate
:驗證 JSON 組態,然後結束,印出「OK」訊息(在此情況下,結束代碼為 0)或組態檔產生的任何錯誤(結束代碼為 1)。不會產生網路流量,也不會執行熱重啟程序,因此機器上其他 Envoy 程序不會受到干擾。
- --admin-address-path <路徑 字串>
(選用)將寫入管理位址和連接埠的輸出檔案路徑。
- --local-address-ip-version <字串>
(選用)用於填入伺服器本機 IP 位址的 IP 位址版本。此參數會影響各種標頭,包括附加至 X-Forwarded-For (XFF) 標頭的內容。選項為
v4
或v6
。預設值為v4
。
- --base-id <整數>
(選用)配置共用記憶體區域時要使用的基本 ID。Envoy 在熱重啟期間會使用共用記憶體區域。大多數使用者永遠不需要設定此選項。但是,如果需要在同一台機器上多次執行 Envoy,則每個執行的 Envoy 都需要一個唯一的基本 ID,以便共用記憶體區域不會衝突。
- --use-dynamic-base-id
(選用)選擇未使用基本 ID 以在配置共用記憶體區域時使用。但是,最好使用
--base-id
使用預先選取的值。如果啟用此選項,它會取代--base-id
值。當--restart-epoch
的值不為零時,不得使用此旗標。相反地,對於後續的熱重啟,請使用選取的基本 ID 設定--base-id
選項。請參閱--base-id-path
。
- --skip-hot-restart-on-no-parent
(選用)與
--restart-epoch
結合使用,此旗標允許失敗的熱重啟回復到正常的啟動行為。如果此旗標為 false,如果父實例已終止,則子實例也會在啟動期間終止。這只會影響父實例在新實例初始化之前終止的情況 - 在建立跨程序通訊後,如果父實例意外終止,仍會因為通訊失敗而導致子實例終止。
- --skip-hot-restart-parent-stats
(選用)與
--restart-epoch
結合使用,此旗標允許熱重啟繼續進行,而不會複製父實例中的統計資料。傳輸統計資料可能是一項耗費資源的操作;略過它可防止主執行緒因這項工作而超載,或可能大幅增加記憶體負載。如果未使用熱重啟,則無效。
- --base-id-path <path_string>
(選用)將基本 ID 寫入指定的路徑。雖然此選項與
--base-id
相容,但其預期用途是提供對--use-dynamic-base-id
選取的動態基本 ID 的存取。
- -l <字串>, --log-level <字串>
(選用)記錄層級。非開發人員通常不應設定此選項。請參閱可用的記錄層級和預設值的說明文字。
- --component-log-level <字串>
(選用)每個元件的記錄層級的逗號分隔清單。非開發人員通常不應設定此選項。例如,如果您希望
upstream
元件以debug
層級執行,而connection
元件以trace
層級執行,您應該將upstream:debug,connection:trace
傳遞給此旗標。請參閱/source/common/common/logger.h中的ALL_LOGGER_IDS
以取得元件清單。此選項與--enable-fine-grain-logging
不相容。
- --cpuset-threads
(選用) 如果未設定
--concurrency
,則此標誌用於控制工作執行緒的數量。如果啟用,則在基於 Linux 的系統上,將使用分配的 cpuset 大小來確定工作執行緒的數量。否則,工作執行緒的數量將設定為機器上的硬體執行緒數量。您可以在 核心文件中閱讀更多關於 cpusets 的資訊。
- --log-path <路徑 字串>
(選用) 應寫入日誌的輸出檔案路徑。處理 SIGUSR1 時,將重新開啟此檔案。如果未設定,則將日誌記錄到 stderr。
- --log-format <格式 字串>
(選用) 用於配置日誌訊息元數據的格式字串。如果未設定,則使用預設格式字串
"[%Y-%m-%d %T.%e][%t][%l][%n] [%g:%#] %v"
。當與
--log-format-escaped
結合使用時,可以將記錄器配置為以可由日誌檢視器解析的格式記錄日誌。已知整合記錄在 應用程式日誌記錄配置 章節中。支援的格式標誌(帶有範例輸出)如下:
- %v:
要記錄的實際訊息(「一些使用者文字」)
- %_:
要記錄的實際訊息,但帶有跳脫換行符號(如果使用
%v
),從「一些使用者文字nbelow」到「一些使用者文字\nbelow」)- %j:
要記錄的實際訊息,以 JSON 跳脫字串表示 (https://tools.ietf.org/html/rfc7159#page-8)。
- %t:
執行緒 ID(「1232」)
- %P:
程序 ID(「3456」)
- %n:
記錄器的名稱(「filter」)
- %l:
訊息的日誌層級(「debug」、「info」等)
- %L:
訊息的簡短日誌層級(「D」、「I」等)
- %a:
縮寫的星期幾名稱(「Tue」)
- %A:
完整的星期幾名稱(「Tuesday」)
- %b:
縮寫的月份名稱(「Mar」)
- %B:
完整的月份名稱(「March」)
- %c:
日期和時間表示法(「Tue Mar 27 15:25:06 2018」)
- %C:
以 2 位數字表示的年份(「18」)
- %Y:
以 4 位數字表示的年份(「2018」)
- %D, %x:
簡短的 MM/DD/YY 日期(「03/27/18」)
- %m:
月份 01-12(「03」)
- %d:
月份中的日期 01-31(「27」)
- %H:
24 小時格式的小時 00-23(「15」)
- %I:
12 小時格式的小時 01-12(「03」)
- %M:
分鐘 00-59(「25」)
- %S:
秒 00-59(「06」)
- %e:
目前秒的毫秒部分 000-999(「008」)
- %f:
目前秒的微秒部分 000000-999999(「008789」)
- %F:
目前秒的奈秒部分 000000000-999999999(「008789123」)
- %p:
上午/下午(「AM」)
- %r:
12 小時制時鐘(「03:25:06 PM」)
- %R:
24 小時 HH:MM 時間,相當於 %H:%M(「15:25」)
- %T, %X:
ISO 8601 時間格式 (HH:MM:SS),相當於 %H:%M:%S(「13:25:06」)
- %z:
時區中相對於 UTC 的 ISO 8601 偏移 ([+/-]HH:MM)(「-07:00」)
- %%:
百分比符號(「%」)
- %@:
來源檔案和行(「my_file.cc:123」)
- %s:
來源檔案的基本名稱(「my_file.cc」)
- %g:
來源檔案的完整相對路徑(「/some/dir/my_file.cc」)
- %#:
來源行(「123」)
- %!:
來源函式(「myFunc」)
- --log-format-escaped
(選用) 此標誌啟用應用程式日誌清理,以跳脫 C 樣式跳脫序列。這可以用來防止單一日誌行跨越多行基礎日誌。這會清理此清單中的所有跳脫序列。請注意,每一行的最終 EOL 字元將不會被跳脫,以保留行格式。
- --restart-epoch <整數>
(選用) 熱重新啟動 epoch。(Envoy 熱重新啟動而不是全新啟動的次數)。首次啟動時預設為 0。此選項會告知 Envoy 是否嘗試建立熱重新啟動所需的共享記憶體區域,或是否開啟現有的共享記憶體區域。每次發生熱重新啟動時,都應遞增此選項。熱重新啟動包裝函式 會設定 *RESTART_EPOCH* 環境變數,在大多數情況下,應將該變數傳遞至此選項。
- --enable-fine-grain-logging
(選用) 啟用細粒度記錄器,其中包含檔案層級日誌控制,以及管理介面上的執行階段更新。如果啟用,則主要的日誌巨集(包括
ENVOY_LOG
、ENVOY_CONN_LOG
、ENVOY_STREAM_LOG
和ENVOY_FLUSH_LOG
)將使用每個檔案的記錄器,而使用方式不再需要Envoy::Logger::Loggable
。管理介面的使用方式與此類似。如需更多詳細資訊,請參閱管理介面。此選項與--component-log-level
不相容。
- --socket-path <路徑 字串>
(選用) 熱重新啟動的 socket 位址輸出檔案路徑。預設為「@envoy_domain_socket」,它將在抽象命名空間中建立。後綴 _{role}_{id} 會附加到名稱中。所有想要一起參與熱重新啟動的 envoy 程序都必須使用此選項的相同值。
注意:以「@」開頭的路徑將在抽象命名空間中建立。
- --socket-mode <字串>
(選用) 熱重新啟動的 socket 檔案權限。這必須是有效的八進位檔案權限,例如 644。預設值為 600。當
--socket-path
以「@」開頭或未設定時,可能不會使用此標誌。
- --hot-restart-version
(選用) 為二進位輸出不透明的熱重新啟動相容性版本。可以將此版本與
GET /hot_restart_version
管理端點的輸出進行比對,以確定新的二進位和正在執行的二進位是否具有熱重新啟動相容性。
- --service-cluster <字串>
(選用) 定義 Envoy 執行所在的本機服務叢集名稱。本機服務叢集名稱首先來自 Bootstrap 節點 訊息的 叢集欄位。此 CLI 選項提供指定此值的替代方法,並且會覆寫在啟動配置中設定的任何值。如果使用下列任何功能,則應設定此選項:statsd、健康狀態檢查叢集驗證、執行階段覆寫目錄、新增使用者代理程式、HTTP 全域速率限制、CDS,以及HTTP 追蹤,無論是透過此 CLI 選項還是在啟動配置中設定。
- --service-node <字串>
(選填) 定義 Envoy 運行的本機服務節點名稱。本機服務節點名稱會優先從 Bootstrap 節點 訊息的 id 欄位取得。此 CLI 選項提供指定此值的替代方法,並會覆寫在啟動組態中設定的任何值。如果使用下列任何功能,則應設定此值:statsd、CDS 和 HTTP 追蹤,無論是透過此 CLI 選項或是在啟動組態中設定。
- --service-zone <字串>
(選填) 定義 Envoy 運行的本機服務區域。本機服務區域會優先從 Bootstrap 節點 訊息的 locality.zone 欄位取得。此 CLI 選項提供指定此值的替代方法,並會覆寫在啟動組態中設定的任何值。如果使用探索服務路由,且探索服務公開 區域資料,則應設定此值,無論是透過此 CLI 選項或是在啟動組態中設定。區域的意義取決於上下文,例如 AWS 上的 可用區域 (AZ)、GCP 上的 區域 等。
- --file-flush-interval-msec <整數>
(選填) 檔案刷寫間隔(毫秒)。預設為 10 秒。此設定在建立檔案時使用,以決定緩衝區刷寫至檔案的間隔時間。緩衝區會在每次填滿時或每次間隔時間到期時刷寫,以先發生者為準。調整此設定在追蹤 存取記錄 時很有用,以便獲得更即時(或較少)的刷寫。
- --drain-time-s <整數>
(選填) Envoy 在 熱重新啟動 期間或透過 LDS 修改或移除個別接聽器時,將排空連線的時間(秒)。預設為 600 秒(10 分鐘)。一般而言,排空時間應小於透過
--parent-shutdown-time-s
選項設定的父系關機時間。兩個設定的配置方式取決於特定的部署。在邊緣情境中,可能需要非常長的排空時間。在服務對服務情境中,有可能使排空和關機時間短得多(例如,60 秒/90 秒)。
- --drain-strategy <字串>
(選填) 決定 Envoy 在熱重新啟動排空序列期間的行為。在排空序列期間,排空管理員會鼓勵透過終止請求完成時的連線、在 HTTP1 上傳送「連線:關閉」以及在 HTTP2 上傳送 GOAWAY 來排空。
gradual
:(預設) 隨著排空時間的經過,鼓勵排空的請求百分比增加到 100%。immediate
:當排空序列開始時,會立即鼓勵所有請求排空。
- --parent-shutdown-time-s <整數>
(選填) Envoy 在熱重新啟動期間關閉父程序之前等待的時間(秒)。如需更多資訊,請參閱 熱重新啟動概觀。預設為 900 秒(15 分鐘)。
- --disable-hot-restart
(選填) 此旗標會針對已啟用熱重新啟動的版本停用 Envoy 熱重新啟動。預設會啟用熱重新啟動。
- --enable-mutex-tracing
(選填) 此旗標會啟用互斥鎖競爭統計資料 (MutexStats) 以及競爭端點 (
GET /contention
) 的收集。預設不會啟用互斥鎖追蹤,因為它會對已經遇到互斥鎖競爭的 Envoy 產生輕微的效能損失。
- --allow-unknown-fields
(選填)
--allow-unknown-static-fields
的已淘汰別名。
- --allow-unknown-static-fields
(選填) 此旗標會停用對未知欄位的 protobuf 組態驗證。預設會啟用驗證。對於大多數部署,應使用預設值,以確保預先捕獲組態錯誤,並將 Envoy 設定為預期的方式。系統會記錄任何未知欄位第一次使用的警告,並將這些發生次數計入 server.static_unknown_fields 統計資料中。
- --reject-unknown-dynamic-fields
(選填) 此旗標會停用動態組態中未知欄位的 protobuf 組態驗證。預設會將此旗標設定為 false,停用超出啟動程式的欄位驗證。這允許將較新的 xDS 組態傳遞至較舊的 Envoy。當不想要此行為時,可以將其設定為 true 以進行嚴格的動態檢查,但預設值對於大多數 Envoy 部署應該是理想的。系統會記錄任何未知欄位第一次使用的警告,並將這些發生次數計入 server.dynamic_unknown_fields 統計資料中。
- --ignore-unknown-dynamic-fields
(選填) 此旗標會停用動態組態中未知欄位的 protobuf 組態驗證。與將
--reject-unknown-dynamic-fields
設定為 false 不同,為了提高組態處理速度,它不會記錄警告或計算未知欄位的發生次數。如果將--reject-unknown-dynamic-fields
設定為 true,則此旗標無效。注意
除了不記錄警告或計算未知欄位的發生次數之外,設定此選項也會停用已淘汰欄位以及工作中訊息和欄位的計數和警告。強烈建議不要在至少一部分機群(預備、金絲雀等)上設定此選項,以便監控未知、已淘汰或工作中使用的情況。
- --disable-extensions <擴充功能 清單>
(選填) 此旗標會停用提供的逗號分隔擴充功能名稱清單。靜態或動態組態無法使用已停用的擴充功能,但它們仍然會連結到 Envoy,並且可能會執行啟動程式碼或具有其他執行時間影響。擴充功能名稱是透過將擴充功能類別和名稱與正斜線聯結建立的,例如
envoy.grpc_credentials/envoy.grpc_credentials.file_based_metadata
。
- --version
(選填) 此旗標用於顯示 Envoy 版本和組建資訊,例如
c93f9f6c1e5adddd10a3e3646c7e049c649ae177/1.9.0-dev/Clean/RELEASE/BoringSSL-FIPS
。它由五個以斜線分隔的欄位組成
來源修訂 - 組建 Envoy 的 git 提交,
版本號碼 - 版本 (例如
1.9.0
) 或開發組建 (例如1.9.0-dev
),組建時來源樹的狀態 -
Clean
或Modified
,組建模式 -
RELEASE
或DEBUG
,TLS 程式庫 -
BoringSSL
或BoringSSL-FIPS
。
- --enable-core-dump
(選用) 此標誌適用於基於 Linux 的系統,在所有其他平台上則無效。它透過使用 PR_SET_DUMPABLE 選項呼叫 prctl 來啟用核心傾印。當 Envoy 的功能比其基礎環境多時,鑑於核心傾印會被核心停用,這在容器環境中使用功能時非常有用。
- --stats-tag
(選用) 此標誌為 Envoy 產生的所有統計資料提供通用標籤。格式為
tag:value
。標籤名稱僅允許使用字母數字值。對於標籤值,除 ' . ' (點) 以外的所有字元都允許使用。此標誌可以重複多次以設定多個通用標籤。不允許為同一個標籤名稱設定多個值。