我有兴趣获取名称中包含“ test”但使用json和jq的多个Pod的日志。第一步是找出包含该特定字符串的名称-在我的情况下为“ test”:
let elements: [(Int?, Int?)] = [(1, 2), (2, 1), (3, nil), (nil, 3), (5, 6), (6, 5)]
let result = elements.filter { $0.0 != nil } as! [(Int, Int?)]
我在Stackoverflow上有人的帮助下得到了这个答案。
现在,我想找出获取包含“测试”名称的每个pod的日志的命令。我想要类似以下命令的内容,但是不幸的是,这种方式不起作用,因为我猜第一个命令将所有Pod一次返回多行:
kubectl get pods -n test -o json | jq '.items[] | select(.metadata.name|test("test"))| .metadata.name'
是否可以通过这种方式获取一些额外的参数来使日志正常工作?
谢谢。
答案 0 :(得分:2)
使用循环获取所有pod的日志,请尝试以下操作:
mysqldump
答案 1 :(得分:2)
总结您拥有的所有选项
@Kun答案是有效的解决方案,可为您提供所有日志输出。 +1。使用他的解决方案,您将实现所需的功能,但我个人会考虑将日志重定向到文件以方便使用。日志可能很大(很可能会很大)-您应该可以选择单独查看它们。
为此,您可以使用@Eduardo提示并安装kubelogs
这是一个bash脚本,使用您当前的kubectl上下文来 交互式选择名称空间和多个Pod以下载日志 从。它基本上为所有容器循环运行kubectl日志, 将日志重定向到本地文件。
有时候您可能希望实时观看日志-在这种情况下,kubetail是个不错的选择
Bash脚本,使您能够汇总(尾部/跟随)来自以下位置的日志 将多个豆荚合并为一个流。这与运行“ kubectl”相同 日志-f“,但用于多个Pod。
还有一种针对更高级需求的付费解决方案(如果出于某种原因您不使用ELK):SolarWinds Papertrail
SolarWinds®Papertrail™是一种云托管的日志管理解决方案, 使您可以从中央位置跟踪日志。使用 Papertrail,您可以查看整个系统中的实时日志事件 Kubernetes群集在单个浏览器窗口中。
当日志事件从Kubernetes发送到Papertrail时,Papertrail 记录日志的内容及其时间戳和原始窗格。 您可以使用以下方式在浏览器中连续查看这些日志: Papertrail事件查看器,Papertrail CLI客户端或 Papertrail HTTP API。 Papertrail默认显示所有日志,但是您可以 使用灵活的方式将这些限制为特定的pod,节点或部署 搜索语法。
这是一篇很棒的文章,如果您出于某些原因想要尝试使用它,该如何使用: How to “Live Tail” Kubernetes Logs