我在$问题上挣扎了一段时间,是时候寻求一些指导了。我们有10多个运行在不同RHEL VM上的容器,这些RHEL VM通过ansible作为systemd服务部署(换句话说,在podman安装的顶部/旁边没有cubernetes或其他容器编排服务)这些容器作为无根容器运行。不幸的是,docker(podman)套接字在VM上不活动(尽管我们可以打开它)。所有虚拟机都安装了filebeat。我们有一个单独部署的ELK堆栈。我在工作中发现:
- podman(此处安装)仅支持k8s-file和journald日志记录(问题#1:最简单的方法是使用json-file logging driver结合docker/podman socket,这在这里无法实现)
- podman套接字属于运行这些无根容器的podman用户,因此其他人实际上看不到它,即使是root也无法看到没有podman套接字的运行容器-我能够解决这个问题(因此root能够列出运行容器),但我不认为这应该是工业标准解决方案
- 切换到journald并使用journalbeat:这可能会起作用,但我不知道这是否可以与容器元数据收集相结合,后者需要能够区分VM日志和容器日志
我正在寻找一个解决方案,为这个设置,将使集中的日志工作在asiest的方式。现在,我将非常感谢一些关于工作概念的提示。
先谢谢你了。
1条答案
按热度按时间56lgkhnf1#
在Filebeat中有一个journald input,因此您不需要单独部署Journaldbeat(已弃用)。
journald本身支持日志中的结构化数据(您可以运行
journalctl -o json
来查看日志中的字段)。因此,如果journald日志驱动程序将容器元数据传递给journald,那么Filebeat产生的事件将包含像container.{id,name,image.tag}
这样的字段(假设它遵循与Docker journald log driver相同的字段命名)。或者,如果它使用自定义命名约定,则Filebeat将生成具有journald.custom.*
等字段的事件。下面是运行
journalctl -o json | jq -S .
时podman日志在我的机器上的样子此外,在使用Filebeat日志输入时,您可能希望应用一个过滤器,以便仅从podman摄取数据。这将产生与
journalctl _COMM=conmon
相同的数据。