十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Cilium Envoy Proxy 日志级别管理:cilium-dbg envoy admin logging 命令族实战指南

Cilium Envoy Proxy 日志级别管理:cilium-dbg envoy admin logging 命令族实战指南 Cilium Envoy Proxy 日志级别管理cilium-dbg envoy admin logging 命令族实战指南【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/ciliumcilium-dbg envoy admin logging命令族让运维与开发人员无需进入容器或直接调用 Envoy Admin API即可通过 Cilium 自带的 CLI 查看并调整内置 Envoy Proxy 的日志级别是排查 L7 代理链路问题的第一站工具。本文以cilium-dbg envoy admin logging list命令为核心完整讲解其语法、选项、输出含义与底层实现并延伸覆盖set global、set loggers等配套命令帮助你在 Cilium 数据面出现代理异常时快速定位与调优日志。命令定位Cilium 中的 Envoy 管理通道Cilium 内置了 Envoy Proxy 用于 L7 策略执行如 HTTP 协议感知的 NetworkPolicy 与 CiliumNetworkPolicy。运维上Envoy 自身暴露了一套 Admin InterfaceHTTP 管理接口用于查看配置、统计、证书与调整日志级别。Cilium 的cilium-dbg envoy admin命令族将这套管理能力封装为本地 CLI隶属于cilium-dbg envoyManage Envoy Proxy之下cilium-dbg envoy admin其子命令覆盖了 Envoy Admin Interface 的核心操作面从命令参考文档 cilium-dbg_envoy_admin.md 可以看到完整清单certs列出已配置的 TLS 证书clusters列出已配置的集群config查看 Envoy 配置转储config dumplisteners列出已配置的监听器logging查看并修改 Envoy Proxy 日志级别本文主角metrics列出 Prometheus 统计信息serverinfo查看 Envoy 服务器信息在源码层面cilium-dbg/cmd/envoy_admin.go定义了EnvoyAdminCmdUse 为adminShort 描述为 Access Envoy Admin Interface并在init()中挂载到EnvoyCmd之下cilium-dbg/cmd/envoy_admin_logging.go再通过EnvoyAdminCmd.AddCommand(EnvoyAdminLoggingCmd)注册logging子命令形成完整的命令树。logging list查看 Envoy 全部 logger 的当前日志级别命令语法与选项logging list用于列出 Envoy Proxy 中所有 logger日志记录器当前的日志级别命令格式与完整选项如下cilium-dbg envoy admin logging list [flags]专属选项只有一个-h, --help help for list-h/--help用于查看该子命令自身的帮助信息。其余可用的选项均继承自父命令cilium-dbg根命令的全局参数来自 cilium-dbg_envoy_admin_logging_list.md选项默认值说明--config string$HOME/.cilium.yaml指定 CLI 配置文件路径-D, --debug关闭开启调试消息输出-H, --host string由环境决定服务器端 API 的 URI连接到运行中的 cilium-agent--log-driver strings—日志输出端点例如syslog--log-opt map—日志驱动选项例如formatjson命令行为从源码 cilium-dbg/cmd/envoy_admin_logging.go 可以看到list的实现非常直接它不接收任何位置参数Args: cobra.NoArgs多余参数会被直接拒绝执行时创建 Envoy admin 客户端并调用ListLoggingLevels()Run: func(cmd *cobra.Command, args []string) { envoyAdminClient : newEnvoyAdminClient() loggingLevels, err : envoyAdminClient.ListLoggingLevels() if err ! nil { Fatalf(failed to get logging levels: %s\n, err) } cmd.Println(loggingLevels) },底层通过 HTTP POST 请求 Envoy Admin Interface 的logging端点见 cilium-dbg/cmd/envoy_adminclient.gofunc (a *envoyAdminClient) ListLoggingLevels() (string, error) { path : logging return a.post(path) }实际使用示例直接执行即可列出当前所有 logger 及其级别cilium-dbg envoy admin logging list典型输出类似每行一个 logger 的名称: 当前级别admin: info assert: info aws: info backtrace: info client: info config: info ... upstream: info配套命令动态调整日志级别logging命令组包含两个分支list查看与set修改。set之下又细分为global与loggers两个子命令命令树结构如下cilium-dbg envoy admin logging ├── list └── set ├── global level └── loggers logger_namelevel...全局调整set global将 Envoy 中所有 logger 的日志级别一次性统一修改cilium-dbg envoy admin logging set global level [flags]命令参考见 cilium-dbg_envoy_admin_logging_set_global.md。level为 Envoy 的标准日志级别例如debug、info、warning、error、critical等级别从详细到严格排列。源码中该命令使用Args: cobra.ExactArgs(1)即必须且只能传入一个级别参数随后调用SetLoggingLevelForAllLoggers(args[0])。其底层实现向 Envoy Admin 的logging端点追加?level查询参数后执行 POSTfunc (a *envoyAdminClient) SetLoggingLevelForAllLoggers(level string) (string, error) { path : logging?level level return a.post(path) }即实际请求等价于POST /logging?leveldebug这是 Envoy Admin Interface 原生支持的操作。典型用法示例# 将所有 Envoy logger 调整为 debug便于全面抓取代理细节 cilium-dbg envoy admin logging set global debug # 排查结束后恢复为 info cilium-dbg envoy admin logging set global info定向调整set loggers只调整指定 logger 的级别避免全局放大日志带来的噪声cilium-dbg envoy admin logging set loggers logger_namelevel... [flags]命令参考见 cilium-dbg_envoy_admin_logging_set_loggers.md。参数采用logger名级别的键值对形式可同时传入多个例如cilium-dbg envoy admin logging set loggers routerdebug httpdebug源码中该命令使用Args: cobra.MinimumNArgs(1)强制要求至少一个参数随后遍历参数按拆分为键值对写入 maploggingLevels : map[string]string{} for _, arg : range args { s : strings.Split(arg, ) if len(s) 2 { loggingLevels[s[0]] s[1] } }有一个值得注意的约束解析后的 map 中如果出现名为level的键即你传入了levelxxx命令会直接报错并提示改用set globalif _, globalKeyExists : loggingLevels[level]; globalKeyExists { Fatalf(please use logger set global to change the global log level\n) }这是因为 Envoy Admin 的logging接口把全局级别参数放在?level查询参数中而set loggers走的是另一条?paths查询参数通道两者语义不同源码刻意做了隔离以避免误用。定向调整最终通过SetLoggingLevelForLoggers把键值对序列化为逗号分隔的paths参数func (a *envoyAdminClient) SetLoggingLevelForLoggers(loggingLevels map[string]string) (string, error) { path : logging if len(loggingLevels) 0 { path path ?paths for k, v : range loggingLevels { path path k : v , } } return a.post(path) }即实际请求等价于POST /logging?pathsrouter:debug,http:debug,。底层原理通过 Unix Domain Socket 直连 Envoycilium-dbg是运行在宿主机或节点上的 CLI它如何触达 Envoy答案在 cilium-dbg/cmd/envoy_adminclient.go 中。客户端固定使用一个本地 Unix Domain Socket 与 Envoy 的管理接口通信const envoySocketDirPath /var/run/cilium/envoy/sockets/ func newEnvoyAdminClient() *envoyAdminClient { return envoyAdminClient{ // Needs to be provided to envoy (received as :authority) - even though we Dial to a Unix domain socket. adminURL: fmt.Sprintf(http://%s/, envoy-admin), unixPath: filepath.Join(envoySocketDirPath, admin.sock), } }关键细节有两个Socket 路径/var/run/cilium/envoy/sockets/admin.sock这是 cilium-agent 为 Envoy Admin Interface 创建的本地 socketHost 头虽然实际连接走的是 Unix socket但 HTTP 请求的:authorityHost仍被设置为envoy-admin以满足 Envoy 对请求头的要求。客户端通过自定义DialContext将 HTTP 传输层绑定到 Unix socketnet.Dial(unix, a.unixPath)从而以普通 HTTP 客户端的方式调用 Envoy Admin 的 REST 端点。这一点意味着cilium-dbg envoy admin logging系列命令依赖 cilium-agent 正常运行的节点环境如果 agent 未启动、socket 不存在命令会以failed to get logging levels之类的错误失败。实践建议与适用边界排障流程当 L7 策略或代理链路行为异常时先logging list观察当前级别通常为info再用set global debug全局放大日志抓取细节最后通过set loggers仅对相关 logger如router、http、upstream、envoy相关组件保持定向 debug减少噪音。恢复现场调试结束后应通过set global将级别恢复为info或warning避免高密度日志拖慢 Envoy 并撑大日志存储。参数约束list不接受任何位置参数set global必须恰好一个参数set loggers至少一个namelevel参数且不得使用level作为 logger 名。环境依赖本组命令在 Documentation/cmdref/cilium-dbg_envoy_admin_logging.md 中描述为 List and change logging levels of Envoy Proxy其可用性以目标节点上运行着 Envoy 代理与 admin socket 为前提仅启用了纯 eBPF 数据面而未启用 L7 代理的场景下相关日志管理能力可能不适用。小结cilium-dbg envoy admin logging命令族把 Envoy Admin Interface 的日志管理能力无缝接入了 Cilium 的原生 CLIlogging list一览所有 logger 的当前级别set global一键全局切换set loggers按 logger 定向调节。结合其 Unix Domain Socket 直连的底层设计你可以安全、快速地完成代理日志的查看与调优让 L7 数据面的问题排查从“盲猜”变为“可视”。如需深入了解该命令族的完整帮助可查阅仓库内的命令参考文档 cilium-dbg_envoy_admin_logging.md 及其子命令文档或直接阅读实现源码 cilium-dbg/cmd/envoy_admin_logging.go 与 cilium-dbg/cmd/envoy_adminclient.go。【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表