日志对开发和维护的重要性不言而喻。分布式应用中的日志分布在多台机器上,所以我们需要将日志采集到一个地方来集中管理。目前比较常见的日志方案是ElK,主要包括三大组件:Elasticsearch, Logstash和Kibana。这里主要说一下使用logstash收集Docker容器里应用的日志。
容器中应用的日志,其生命周期和容器相同。主要要两个去向:标准输出stdout到主机/var/lib/docker/containers//***-json.log文件中,***是应用在容器中的id;写日志到磁盘文件。
主要有以下两种收集方法:1.对于第一种写在容器里面的日志,其路径中的***是id,应用每次在容器里跑起来其id是不同的,这样不容易确定日志的路径。我们需要将应用的日志输出到固定目录并通过 -V 命令挂载出来到主机磁盘(转化成第二种日志去向),这样我们就可以通过Logstash采集宿主机固定目录的日志。2.另外一种方式我看阿里云也在采用,运行一个日志收集容器。借助docker的Volume功能。在host机器上开辟一个固定目录D;产生日志的容器将日志文件所在目录mount到D目录下的子目录中;收集日志的容器再把目录D mount到自己容器内。分享一下阿里云案例链接:https://yq.aliyun.com/articles/303。