1. 基础用法
查看 Pod 的日志
kubectl logs <pod-name> -n <namespace>
查看 Pod 中指定容器的日志
kubectl logs <pod-name> -c <container-name> -n <namespace>
2. 核心参数详解
参数 | 说明 |
---|---|
-f / --follow | 实时跟踪日志输出(类似 tail -f ) |
--tail=N | 仅显示最后 N 行日志(默认全部显示) |
--since=5m | 显示最近 5 分钟内的日志(支持单位:s/m/h) |
--since-time=2023-10-01T12:00:00Z | 显示指定时间戳之后的日志(ISO 8601 格式) |
--timestamps | 在日志中显示时间戳 |
-p / --previous | 查看已终止容器的日志(如容器崩溃重启前的日志) |
-c / --container | 指定 Pod 中的容器名称(多容器 Pod 必选) |
--all-containers | 查看 Pod 中所有容器的日志(适用于多容器 Pod) |
--prefix | 在日志行前添加 Pod/容器名称前缀(多容器或多 Pod 时清晰区分) |
3. 常见案例
(1) 实时跟踪容器日志
# kubectl logs -f $POD_NAME -n $NAMESPACE
(2) 查看异常退出的容器日志
# kubectl logs $POD_NAME -n $NAMESPACE -p
(3) 按照时间段日志查询(h/m/s之内)
# kubectl logs $POD_NAME -n $NAMESPACE --since=1h
(4) 按照时间戳查询日志
# kubectl logs $POD_NAME -n $NAMESPACE --since-time=2019-09-29T11:00:00
(5) 查看最近100 行日志
kubectl logs --tail=100 <pod-name> -n <namespace>
(6) 多容器 Pod 查看所有容器日志
kubectl logs --all-containers=true <pod-name> -n <namespace>
(7) 导出日志到文件
kubectl logs <pod-name> -n <namespace> > pod.log
4. 高级用法
(1) 通过标签选择器查看日志
# 查看匹配标签 app=nginx 的 Pod 日志(自动选择第一个 Pod)
kubectl logs -l app=nginx -n <namespace> --tail=50
(2) 查看多个 Pod 的日志
# 查看所有匹配标签的 Pod 日志(需安装 stern 工具)
stern "app=nginx" -n <namespace>
# 或使用 kubectl 遍历(需手动处理)
kubectl get pods -l app=nginx -n <namespace> -o name | xargs -I {} kubectl logs {} -n <namespace>
(3) 结合 grep 过滤日志
kubectl logs <pod-name> -n <namespace> | grep "ERROR"
(4) 查看 Init 容器的日志
kubectl logs <pod-name> -c <init-container-name> -n <namespace>
5. 常见问题解决
Q1:Pod 处于 CrashLoopBackOff
状态,如何查看日志?
kubectl logs <pod-name> -n <namespace> --previous
Q2:日志量过大导致 kubectl 无响应?
# 限制日志行数
kubectl logs --tail=1000 <pod-name> -n <namespace>
# 导出到文件后分析
kubectl logs <pod-name> -n <namespace> > pod.log
Q3:Pod 有多个容器,如何快速查看所有日志?
# 方法1:使用 --all-containers
kubectl logs --all-containers=true <pod-name> -n <namespace>
# 方法2:使用 stern 工具(推荐)
stern <pod-name> -n <namespace>
6.日志查看工具扩展
(1) stern:多 Pod 日志聚合工具
# 安装
brew install stern # macOS
choco install stern # Windows
sudo snap install stern # Linux
# 使用:实时跟踪所有匹配标签的 Pod 日志
stern "app=nginx" -n <namespace> --tail 100
(2) kail:高级日志查看工具
# 安装
brew tap johanhaleby/kail && brew install kail
# 使用:按服务名过滤
kail -n <namespace> --svc nginx
7. 最佳实践
-
日志切割与存储:配置集群日志系统(如 Loki、Elasticsearch)持久化存储。
-
结构化日志:应用输出 JSON 格式日志,便于后续分析。
-
敏感信息过滤:避免在日志中打印密码、Token 等敏感数据。