如何用单条命令批量保存Kubernetes Pod日志并传入Python脚本检测
批量导出Pod日志(仅实现需求1)
导出到独立日志文件
for pod in $(kubectl get pods -n ho-it-sst4-i-ie-enf -o name | grep 'ipt-prodcat-db-kp' | sed 's/pod\///'); do kubectl logs $pod -n ho-it-sst4-i-ie-enf > ${pod}.log; done
命令会自动拉取指定命名空间下所有前缀匹配的Pod,逐个导出日志到以Pod名命名的.log文件中,无需手动输入Pod名称。
合并导出到单个日志文件
for pod in $(kubectl get pods -n ho-it-sst4-i-ie-enf -o name | grep 'ipt-prodcat-db-kp' | sed 's/pod\///'); do kubectl logs $pod -n ho-it-sst4-i-ie-enf >> all_pod_logs.log; done
使用>>追加写入,所有Pod日志会统一存入all_pod_logs.log。
单条命令同时完成日志导出+Python脚本检测(实现两个需求)
保留日志文件方案
log_files=(); for pod in $(kubectl get pods -n ho-it-sst4-i-ie-enf -o name | grep 'ipt-prodcat-db-kp' | sed 's/pod\///'); do kubectl logs $pod -n ho-it-sst4-i-ie-enf > ${pod}.log; log_files+=("${pod}.log"); done; python CheckLogs.py "${log_files[@]}"
导出日志的同时会把所有生成的日志文件名存入数组,导出完成后自动全部传入CheckLogs.py执行检测。
无中间文件方案(无需留存日志)
如果目标Pod配置了统一的标签(例如app=ipt-prodcat-db-kp,替换为实际使用的标签即可),可以直接把日志流通过管道传给Python脚本,无需生成中间文件:
kubectl logs -n ho-it-sst4-i-ie-enf -l app=ipt-prodcat-db-kp --prefix | python CheckLogs.py /dev/stdin
--prefix参数会在每一行日志前加上所属Pod名称,方便脚本识别日志来源,只需修改Python脚本支持读取标准输入内容即可使用。
内容的提问来源于stack exchange,提问作者marcz2007
相关产品推荐
相关产品推荐

