我有一个Deis群集在一个(希望即将成为)生产环境中运行,有很多不同的应用程序使用Dockerfile部署方法。一切都运行正常,但是除非我能获得一些有价值的日志输出,否则将该系统推广到真正的生产环境(即转换DNS)是不可能的。使用标准Deis logging platform,这里是Web命中的一些示例输出(对于上下文有更多输出):
Feb 10 01:46:04 ip-10-21-2-154.ec2.internal systemd[1]: Starting Generate /run/coreos/motd...
Feb 10 01:46:04 ip-10-21-2-154.ec2.internal systemd[1]: Started Generate /run/coreos/motd.
Feb 10 01:46:08 ip-10-21-2-154.ec2.internal docker[1867]: [info] GET /containers/json
Feb 10 01:46:08 ip-10-21-2-154.ec2.internal docker[1867]: [215084df] +job containers()
Feb 10 01:46:08 ip-10-21-2-154.ec2.internal docker[1867]: [215084df] -job containers() = OK (0)
Feb 10 01:46:09 ip-10-21-2-154.ec2.internal sh[1316]: 2015/02/10 01:46:09 set /deis/services/production-web/production-web_v8.cmd.1 -> 10.21.2.154:49409
Feb 10 01:46:12 ip-10-21-2-154.ec2.internal sh[9844]: 2015-02-10 01:46:12.302721 7f213ae14700 0 mon.ip-10-21-2-154.ec2.internal@4(peon).data_health(58) update_stats avail 80% total 102400 MB, used 17621 MB, avail 82542 MB
Feb 10 01:46:18 ip-10-21-2-154.ec2.internal docker[1867]: [info] GET /containers/json
Feb 10 01:46:18 ip-10-21-2-154.ec2.internal docker[1867]: [215084df] +job containers()
Feb 10 01:46:18 ip-10-21-2-154.ec2.internal docker[1867]: [215084df] -job containers() = OK (0)
Feb 10 01:46:19 ip-10-23-1-151.ec2.internal sh[1521]: [INFO] - [10/Feb/2015:01:46:27 +0000] - 10.21.2.179 - - - 200 - "GET / HTTP/1.1" - 4927 - "-" - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36" - "~^production-web\x5C.(?<domain>.+)$" - 10.21.2.154:49409
Feb 10 01:46:19 ip-10-21-2-154.ec2.internal sh[8468]: ===========
Feb 10 01:46:19 ip-10-21-2-154.ec2.internal sh[8468]: HIT TRACKER
Feb 10 01:46:19 ip-10-21-2-154.ec2.internal sh[8468]: SLUG: public/javascripts/bundle.js
Feb 10 01:46:19 ip-10-21-2-154.ec2.internal sh[8468]: ===========
包含很多的平台信息 - 如果只有我可以将其过滤掉,那就太棒了。问题是源为sh
的所有行,但具有不同的PID。这些都是完全不同的容器:
1316
是deis-publisher 9844
是deis-store-monitor 1521
是deis-router 8468
是我的网络应用程序,production-web 我找到这个的唯一方法是ssh到框中并运行ps
。更糟糕的是,如果我同时拥有来自其他容器的任何日志,那么他们将也显示为sh
- 在生产环境中,有几个活动应用程序都记录到同一个流,这种情况显然是站不住脚的。理想的情况是将sh
替换为Docker容器的名称,或者最好是Deis app。
答案 0 :(得分:1)
为了获得记录该行的deis容器的名称,我发现的最佳方法是:
journalctl -f -o short
的输出运行到流畅的或logstash tcp侦听器。您可以使用这些工具来总结符合您需求的_SYSTEMD_UNIT
字段。LOG_DOCKER_JSON
或分叉并修改自动引导来源docker-ianblenke/fluentd。这使用fluentd-docker插件来跟踪原始docker容器json logs。如果您正在使用CoreOS,我会使用此fluentd.cloud-init将我的日志自动提供给TCP 9200上的本地弹性搜索实例。将填写在该项目中查找其他有用的CoreOS cloud-init配置