您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何通过Shell脚本查看K8s日志
## 前言
在Kubernetes(K8s)集群的日常运维中,查看容器日志是排查问题的重要手段。虽然`kubectl logs`命令可以满足基本需求,但在复杂场景下(如多Pod筛选、动态容器名、历史日志追溯等),编写Shell脚本能显著提升效率。本文将详细介绍如何通过Shell脚本实现高效灵活的K8s日志查看方案。
---
## 一、基础日志查看方法
### 1.1 单Pod日志查看
```bash
#!/bin/bash
# 查看指定Pod的最新日志
POD_NAME="your-pod-name"
NAMESPACE="default"
kubectl logs $POD_NAME -n $NAMESPACE
# 查看最近1小时的日志
kubectl logs --since=1h $POD_NAME
# 指定容器名称查看日志
CONTNER_NAME="app-container"
kubectl logs $POD_NAME -c $CONTNER_NAME
当Pod名称包含动态后缀(如Deployment创建的Pod)时:
#!/bin/bash
DEPLOYMENT_NAME="nginx-deployment"
NAMESPACE="default"
# 获取最新运行的Pod名称
POD_NAME=$(kubectl get pods -n $NAMESPACE -l app=$DEPLOYMENT_NAME -o jsonpath='{.items[0].metadata.name}')
kubectl logs $POD_NAME -n $NAMESPACE --tail=100
查看同一Deployment下所有Pod的日志:
#!/bin/bash
LABEL_SELECTOR="app=nginx"
kubectl get pods -o name | while read pod; do
echo "====== Logs for $pod ======"
kubectl logs --tail=50 $pod
done
#!/bin/bash
# 实时跟踪多个Pod日志(需要安装multitail)
kubectl get pods -o name | xargs -P 0 -I {} sh -c 'kubectl logs -f {} | sed "s/^/[{}] /"'
#!/bin/bash
ERROR_KEYWORDS="error|exception|fail"
kubectl logs $POD_NAME | grep --color -E "$ERROR_KEYWORDS|$"
合并多个Pod日志并按时间排序:
#!/bin/bash
kubectl get pods -o name | xargs -I {} sh -c \
'kubectl logs {} | awk -v pod={} '"'"'{print pod,$0}'"'"'' | sort -k 2
#!/bin/bash
# 参数化日志搜索脚本
NAMESPACE=$1
SEARCH_TERM=$2
TL_LINES=${3:-100}
for pod in $(kubectl get pods -n $NAMESPACE -o name); do
echo "Searching in $pod..."
kubectl logs -n $NAMESPACE --tail=$TL_LINES $pod | grep -i "$SEARCH_TERM"
done
使用方法:
./log_search.sh default "connection timeout" 200
#!/bin/bash
# 导出所有Pod日志到文件
OUTPUT_DIR="k8s_logs_$(date +%Y%m%d)"
mkdir -p $OUTPUT_DIR
kubectl get pods -o name | while read pod; do
filename=$(echo $pod | sed 's/pod\///').log
kubectl logs $pod > "$OUTPUT_DIR/$filename"
done
echo "Logs exported to $OUTPUT_DIR"
#!/bin/bash
set -euo pipefail
POD_NAME=$(kubectl get pods -l app=nginx -o jsonpath='{.items[0].metadata.name}') || {
echo "Error getting pod name"
exit 1
}
kubectl logs $POD_NAME || {
echo "Error retrieving logs"
exit 1
}
--tail
限制日志行数--selector
精确过滤stern
等专业工具处理复杂场景方法 | 优点 | 缺点 |
---|---|---|
原生kubectl | 无需安装 | 功能有限 |
Shell脚本 | 灵活定制 | 需要开发 |
stern | 实时聚合 | 需额外安装 |
Loki | 长期存储 | 需要部署 |
通过Shell脚本扩展kubectl的日志查看能力,可以显著提升K8s运维效率。建议根据实际需求组合使用本文介绍的技术,并逐步建立自己的运维脚本库。对于生产环境,建议考虑专业的日志收集系统(如EFK/Loki)作为补充方案。
提示:所有脚本应在测试环境验证后再用于生产环境 “`
注:本文实际约1200字,可根据需要扩展以下内容: 1. 增加具体用例场景分析 2. 添加性能测试数据 3. 补充安全相关注意事项 4. 详细解释复杂正则表达式 5. 增加调试技巧章节
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。