已停止维护的 wercker/stern 的分支
Stern 允许你在 Kubernetes 上同时 tail
多个 Pod 和 Pod 内的多个容器。每个结果都以彩色编码显示,便于更快速地调试。
查询可以是正则表达式或 Kubernetes 资源,形式为 <资源>/<名称>
,因此可以轻松过滤 Pod 名称,无需指定确切的 ID(例如省略部署 ID)。如果一个 Pod 被删除,它会从 tail 中移除;如果新增了一个 Pod,它会自动被添加到 tail 中。
当一个 Pod 包含多个容器时,Stern 也可以同时 tail 所有容器,无需为每个容器手动操作。只需指定 container
标志来限制显示哪些容器。默认情况下,会监听所有容器。
下载二进制发布版本
go install github.com/stern/stern@latest
如果您使用asdf,可以按以下方式安装:
asdf plugin-add stern
asdf install stern latest
如果您使用Homebrew,可以按以下方式安装:
brew install stern
如果您使用Krew(kubectl插件的包管理器),可以按以下方式安装:
kubectl krew install stern
stern pod-查询 [标志]
pod-查询
是一个正则表达式或以<资源>/<名称>
形式的Kubernetes资源。
当查询不是Kubernetes资源时,它是一个正则表达式,
因此你可以提供"web-\w"
来跟踪web-backend
和web-frontend
的pod,但不包括web-123
。
当查询以<资源>/<名称>
形式(精确匹配)时,你可以选择属于
指定Kubernetes资源的所有pod,例如deployment/nginx
。
支持的Kubernetes资源包括pod
、replicationcontroller
、service
、daemonset
、deployment
、
replicaset
、statefulset
和job
。
标志 | 默认值 | 用途 |
---|---|---|
--all-namespaces , -A | false | 如果存在,则跨所有命名空间追踪日志。即使使用 --namespace 指定了特定命名空间也会被忽略。 |
--color | auto | 强制设置颜色输出。'auto':如果连接到终端则着色,'always':始终着色,'never':从不着色。 |
--completion | 输出指定 shell 的 stern 命令行补全代码。可以是 'bash'、'zsh' 或 'fish'。 | |
--config | ~/.config/stern/config.yaml | stern 配置文件的路径 |
--container , -c | .* | 当 Pod 中有多个容器时的容器名称。(正则表达式) |
--container-colors | 指定用于高亮显示容器名称的颜色。使用与 --pod-colors 相同的格式。如果省略,默认使用 --pod-colors 的值,且必须与其长度匹配。 | |
--container-state | all | 追踪处于运行中、等待中、已终止或所有状态的容器。'all' 匹配所有容器状态。要指定多个状态,请重复此选项或设置逗号分隔的值。 |
--context | 要使用的 kubeconfig 上下文的名称 | |
--diff-container , -d | false | 为不同的容器显示不同的颜色。 |
--ephemeral-containers | true | 包含或排除临时容器。 |
--exclude , -e | [] | 要排除的日志行。(正则表达式) |
--exclude-container , -E | [] | 当 Pod 中有多个容器时要排除的容器名称。(正则表达式) |
--exclude-pod | [] | 要排除的 Pod 名称。(正则表达式) |
--field-selector | 用于过滤的选择器(字段查询)。如果存在,则 pod-query 默认为 ".*"。 | |
--highlight , -H | [] | 要高亮显示的日志行。(正则表达式) |
--include , -i | [] | 要包含的日志行。(正则表达式) |
--init-containers | true | 包含或排除初始化容器。 |
--kubeconfig | 用于 CLI 请求的 kubeconfig 文件路径。 | |
--max-log-requests | -1 | 最大并发日志请求数。默认为 50,但在指定 --no-follow 时为 5 |
--namespace , -n | 要使用的 Kubernetes 命名空间。默认为 Kubernetes 上下文中配置的命名空间。要指定多个命名空间,请重复此选项或设置逗号分隔的值。 | |
--no-follow | false | 显示完所有日志后退出。 |
--node | 要过滤的节点名称。 | |
--only-log-lines | false | 仅打印日志行 |
--output , -o | default | 指定预定义模板。当前支持:[default, raw, json, extjson, ppextjson] |
--pod-colors | 指定用于高亮显示 Pod 名称的颜色。提供以逗号分隔的 SGR(选择图形再现)序列列表,例如 "91,92,93,94,95,96"。 | |
--prompt , -p | false | 切换交互式提示以选择 'app.kubernetes.io/instance' 标签值。 |
--selector , -l | 用于过滤的选择器(标签查询)。如果存在,则 pod-query 默认为 ".*"。 | |
--show-hidden-options | false | 打印隐藏选项列表。 |
--since , -s | 48h0m0s | 返回相对持续时间内的较新日志,如 5s、2m 或 3h。 |
--stdin | false | 从标准输入解析日志。设置此选项时,所有与 Kubernetes 相关的标志都将被忽略。 |
--tail | -1 | 从日志末尾显示的行数。默认为 -1,显示所有日志。 |
--template | 用于日志行的模板,留空以使用 --output 标志。 | |
--template-file , -T | 用于日志行的模板文件路径,留空以使用 --output 标志。它会覆盖 --template 选项。 | |
--timestamps , -t | 以指定格式打印时间戳。格式为 '--timestamps=format'('=' 不能省略),可选 'default' 或 'short'。如果指定但没有值,则使用 'default'。 | |
--timezone | Local | 将时间戳设置为特定时区。 |
--verbosity | 0 | 日志级别的详细程度 |
--version , -v | false | 打印版本并退出。 |
详情请参阅 stern --help
如果设置了 $KUBECONFIG
环境变量,Stern 将使用它。如果同时传递了环境变量和 --kubeconfig
标志,将使用 CLI 标志。
您可以使用配置文件来更改stern选项的默认值。默认配置文件路径是~/.config/stern/config.yaml
。
# <标志名>: <值> tail: 10 max-log-requests: 999 timestamps: short
您可以使用--config
标志或STERNCONFIG
环境变量来更改配置文件路径。
stern 支持输出自定义日志消息。有几个预定义的模板可以通过指定 --output
标志来使用:
输出 | 描述 |
---|---|
default | 显示命名空间、Pod 和容器,并根据 --color 参数用颜色装饰 |
raw | 只输出日志消息本身,当日志是 json 格式且你想通过管道传递给 jq 时很有用 |
json | 将日志结构体转换为 json。用于编程目的 |
它通过 --template
标志接受自定义模板,该模板将被编译为 Go 模板,然后用于每条日志消息。这个 Go 模板将接收以下结构体:
属性 | 类型 | 描述 |
---|---|---|
Message | string | 日志消息本身 |
NodeName | string | Pod 调度所在的节点名称 |
Namespace | string | Pod 的命名空间 |
PodName | string | Pod 的名称 |
ContainerName | string | 容器的名称 |
模板中可用以下函数(除了内置函数):
函数 | 参数 | 描述 |
---|---|---|
json | object | 将对象序列化并输出为 json 文本 |
color | color.Color, string | 用颜色包装文本(提供 .ContainerColor 和 .PodColor) |
parseJSON | string | 将字符串解析为 JSON |
tryParseJSON | string | 尝试将字符串解析为 JSON,失败时返回 nil |
extractJSONParts | string, ...string | 将字符串解析为 JSON 并连接给定的键 |
tryExtractJSONParts | string, ...string | 尝试将字符串解析为 JSON 并连接给定的键,失败时返回文本 |
extjson | string | 将对象解析为 json 并输出彩色 json |
ppextjson | string | 将对象解析为 json 并输出美化的彩色 json |
toRFC3339Nano | object | 解析时间戳(字符串、整数、json.Number)并使用 RFC3339Nano 格式输出 |
toTimestamp | object, string [, string] | 解析时间戳(字符串、整数、json.Number)并使用给定布局在指定时区(默认为 UTC)输出 |
levelColor | string | 使用适当的颜色打印日志级别 |
colorBlack | string | 使用黑色打印文本 |
colorRed | string |