我试着从我所有的码头集装箱收集日志,然后把它们发送到麋鹿堆叠中。我想使用file节拍来完成这个任务,所以我采用了类似于https://logz.io/blog/docker-logging/中描述的方法。
我的filebeat.yml
filebeat:
inputs:
- paths:
- /var/jenkins_home/jobs/*/branches/*/builds/*/log
document_type: jenkinslog
- type: docker
containers.ids: '*'
document_type: docker
output:
logstash:
hosts: ["logstash:5044"]我的Dockerfile:
FROM docker.elastic.co/beats/filebeat:6.5.2
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml我命令运行这个映像:
docker run --rm --name filebeat_container --volumes-from jenkins_container:ro -v /var/lib/docker:/var/lib/docker --network=ttydinternproject_default filebeatimage我正在将/var/lib/docker文件夹挂载为卷,并且必须是根用户才能访问它,根据这个https://github.com/hashicorp/vagrant/issues/6822#issuecomment-169826764,"/var/lib/docker是用于docker守护进程的,而不是其他任何人“。
肯定有一种更好的方法来让docker容器日志进入file节拍,而不是让filebeat容器运行根用户访问文件夹,显然不应该被访问。是否需要从默认的码头日志记录驱动程序切换到支持的其他驱动程序之一?
发布于 2018-12-19 11:17:43
您可以重新配置Jenkins容器,以便将其日志文件发布到主机目录(使用docker run -v为/var/jenkins_home/jobs树提供一些主机目录;这可能是一个好主意,因为如果您需要更新基本的Jenkins代码,则不希望丢失所有作业历史记录)。然后,您可以使用docker run -v将相同的目录注入File节拍容器,也可以直接在主机上运行File节拍(如果其主要任务是读取主机系统文件.)。
如果您有此选项,并且处于更高效的设置中,则切换日志驱动程序以指向您的logstash也是一个好主意,但这只会收集主进程的stdout和stderr (而不必运行docker logs,数据将显示在您的中央日志服务器上)。但这不会收集佩尔詹金斯的工作日志文件。
我的经验与您引用的Vagrant一致:不要查看/var/lib/docker内部,尤其不要试图将Docker的内部状态安装到Docker容器中。(您可能不会感到内核恐慌。)
https://stackoverflow.com/questions/53845180
复制相似问题