命令行选项

Envoy 由配置文件和一组命令行选项驱动。以下是 Envoy 支持的命令行选项。

-c <path string>, --config-path <path string>

(可选) JSON/YAML/proto3 配置文件 的路径。如果缺少此标志,则需要 --config-yaml。这将被解析为 引导配置 文件。有效的扩展名是 .json.yaml.pb.pb_text,分别表示 JSON、YAML、二进制 proto3文本 proto3 格式。

--config-yaml <yaml string>

(可选) 引导配置的 YAML 字符串。如果也设置了 --config-path,则此 YAML 字符串中的值将覆盖并合并到从 --config-path 加载的引导程序中。因为 YAML 是 JSON 的超集,所以 JSON 字符串也可以传递给 --config-yaml

在命令行上覆盖节点 ID 的示例

./envoy -c bootstrap.yaml --config-yaml "node: {id: 'node1'}"
--mode <string>

(可选) Envoy 的操作模式之一

  • serve: (默认) 验证 JSON 配置,然后正常服务流量。

  • validate: 验证 JSON 配置,然后退出,打印“OK”消息(在这种情况下退出代码为 0)或配置文件生成的任何错误(退出代码为 1)。不会生成网络流量,并且不会执行热重启过程,因此不会干扰机器上的其他 Envoy 进程。

--admin-address-path <path string>

(可选) 管理地址和端口将写入到的输出文件路径。

--local-address-ip-version <string>

(可选) 用于填充服务器本地 IP 地址的 IP 地址版本。此参数会影响各种标头,包括附加到 X-Forwarded-For (XFF) 标头的内容。选项是 v4v6。默认值为 v4

--base-id <integer>

(可选) 为分配共享内存区域时使用的基本 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 的访问权限。

--concurrency <integer>

(可选) 要运行的 工作线程 数量。如果未指定,则默认为机器上的硬件线程数。如果设置为零,Envoy 仍将运行一个工作线程。

-l <string>, --log-level <string>

(可选) 日志级别。非开发人员通常永远不应设置此选项。有关可用日志级别和默认值的帮助文本,请参见帮助文本。

--component-log-level <string>

(可选) 每个组件的逗号分隔日志级别列表。非开发人员通常永远不应设置此选项。例如,如果您希望 upstream 组件以 debug 级别运行,而 connection 组件以 trace 级别运行,您应该将 upstream:debug,connection:trace 传递给此标志。有关组件列表,请参见 /source/common/common/logger.h 中的 ALL_LOGGER_IDS。此选项与 --enable-fine-grain-logging 不兼容。

--cpuset-threads

(可选) 如果未设置 --concurrency,则使用此标志来控制工作线程的数量。如果启用,则分配的 cpuset 大小将用于在基于 Linux 的系统上确定工作线程的数量。否则,工作线程的数量将设置为机器上的硬件线程数量。您可以在 内核文档 中详细了解 cpusets。

--log-path <path string>

(可选) 日志应写入到的输出文件路径。处理 SIGUSR1 时将重新打开此文件。如果未设置此选项,则记录到 stderr。

--log-format <format string>

(可选) 用于布局日志消息元数据的格式字符串。如果未设置此项,将使用默认格式字符串 "[%Y-%m-%d %T.%e][%t][%l][%n] [%g:%#] %v"

当与 --log-format-escaped 结合使用时,可以将记录器配置为以日志查看器可解析的格式记录日志。已知集成在 应用程序日志配置 部分中进行了记录。

支持的格式标志如下(带有示例输出):

%v:

要记录的实际消息(“some user text”)

%_:

要记录的实际消息,但转义了换行符(从(如果使用 %v)“some user textnbelow” 到 “some user text\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:

两位数的年份(“18”)

%Y:

四位数的年份(“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:

ISO 8601 相对于 UTC 的时区偏移量([+-]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 <integer>

(可选) 热重启 纪元。(Envoy 热重启的次数,而不是全新启动的次数)。对于首次启动,默认为 0。此选项告诉 Envoy 是否尝试创建热重启所需的共享内存区域,或者是否打开现有的区域。每次热重启时,都应增加此选项的值。 热重启包装器 设置了 RESTART_EPOCH 环境变量,在大多数情况下,应将此变量传递给此选项。

--enable-fine-grain-logging

(可选) 启用细粒度记录器,并使用文件级日志控制和管理界面上的运行时更新。如果启用,则主要日志宏(包括 ENVOY_LOGENVOY_CONN_LOGENVOY_STREAM_LOGENVOY_FLUSH_LOG)将使用每个文件记录器,并且使用时不再需要 Envoy::Logger::Loggable。管理界面的使用方式类似。有关详细信息,请参阅 管理界面。此选项与 --component-log-level 不兼容。

--socket-path <path string>

(可选) 热重启 的套接字地址的输出文件路径。默认为 “@envoy_domain_socket”,该文件将在抽象命名空间中创建。后缀 _{role}_{id} 将被追加以提供名称。所有想要一起参与热重启的 Envoy 进程必须为此选项使用相同的值。

注意:以“@”开头的路径将在抽象命名空间中创建。

--socket-mode <string>

(可选) 热重启 的套接字文件权限。这必须是有效的八进制文件权限,例如 644。默认值为 600。当 --socket-path 以“@”开头或未设置时,不能使用此标志。

--hot-restart-version

(可选) 输出二进制文件的透明热重启兼容性版本。可以将此版本与 GET /hot_restart_version 管理端点输出进行匹配,以确定新二进制文件和正在运行的二进制文件是否热重启兼容。

--service-cluster <string>

(可选) 定义 Envoy 运行的本地服务集群名称。本地服务集群名称首先来自 Bootstrap 节点 消息的 集群 字段。此 CLI 选项提供了一种指定此值的替代方法,并将覆盖在引导配置中设置的任何值。如果使用以下任何功能,则应设置此选项: statsd健康检查集群验证运行时覆盖目录添加用户代理HTTP 全局速率限制CDS 以及 HTTP 追踪,无论是通过此 CLI 选项还是在引导配置中。

--service-node <string>

(可选) 定义 Envoy 运行的本地服务节点名称。本地服务节点名称首先来自 Bootstrap 节点 消息的 ID 字段。此 CLI 选项提供了一种指定此值的替代方法,并将覆盖在引导配置中设置的任何值。如果使用以下任何功能,则应设置此选项: statsdCDS 以及 HTTP 追踪,无论是通过此 CLI 选项还是在引导配置中。

--service-zone <string>

(可选) 定义 Envoy 运行的本地服务区域。本地服务区域首先来自 Bootstrap 节点 消息的 locality.zone 字段。此 CLI 选项提供了一种指定此值的替代方法,并将覆盖在引导配置中设置的任何值。如果使用发现服务路由,并且发现服务公开了 区域数据,则应设置此选项,无论是通过此 CLI 选项还是在引导配置中。区域的含义取决于上下文,例如,在 AWS 上为 可用区域 (AZ),在 GCP 上为 区域 等。

--file-flush-interval-msec <integer>

(可选) 文件刷新间隔(毫秒)。默认为 10 秒。此设置在文件创建期间使用,用于确定缓冲区刷新到文件的间隔时间。缓冲区将在每次填满或每次间隔时间到期时刷新,以先到者为准。调整此设置在尾部跟踪 访问日志 时很有用,以便获得更即时(或更不即时)的刷新。

--drain-time-s <整数>

(可选) Envoy 在 热重启 期间或当通过 LDS 修改或删除单个监听器时,Envoy 将用于清空连接的时间(秒)。默认为 600 秒(10 分钟)。通常,清空时间应该小于通过 --parent-shutdown-time-s 选项设置的父进程关闭时间。这两个设置的配置方式取决于具体的部署情况。在边缘场景中,可能需要很长的清空时间。在服务到服务的场景中,可能可以使清空时间和关闭时间更短(例如,60 秒/90 秒)。

--drain-strategy <字符串>

(可选) 确定 Envoy 在热重启清空序列期间的行为。在清空序列期间,清空管理器通过在请求完成时终止连接、在 HTTP1 上发送“Connection: CLOSE”以及在 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),

  • 构建时的源代码树状态 - CleanModified

  • 构建模式 - RELEASEDEBUG

  • TLS 库 - BoringSSLBoringSSL-FIPS

--enable-core-dump

(可选) 此标志适用于基于 Linux 的系统,对于所有其他平台而言,它是一个无操作操作。它通过调用 prctl(使用 PR_SET_DUMPABLE 选项)来启用核心转储。当 Envoy 的功能比其基础环境的功能更多时,这对于容器环境在使用功能时很有用,因为内核将禁用核心转储。

--stats-tag

(可选) 此标志为 Envoy 生成的所有统计信息提供通用标签。格式为 tag:value。标签名称仅允许使用字母数字值。对于标签值,允许使用除“.”(点)之外的所有字符。此标志可以重复多次以设置多个通用标签。不允许对同一个标签名设置多个值。