如何从我的Deis应用程序/容器中获取更精确的日志源?

时间:2015-02-10 02:13:28

标签: deis

我有一个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。

我已经倾倒了文档并挖掘了logspoutlogger源代码,但我找不到任何解决方法。我有机会在这里得到一些指示吗?

1 个答案:

答案 0 :(得分:1)

为了获得记录该行的deis容器的名称,我发现的最佳方法是:

  1. 通过netcat将journalctl -f -o short的输出运行到流畅的或logstash tcp侦听器。您可以使用这些工具来总结符合您需求的_SYSTEMD_UNIT字段。
  2. 使用ianblenke/fluentd定义LOG_DOCKER_JSON或分叉并修改自动引导来源docker-ianblenke/fluentd。这使用fluentd-docker插件来跟踪原始docker容器json logs。
  3. 如果您正在使用CoreOS,我会使用此fluentd.cloud-init将我的日志自动提供给TCP 9200上的本地弹性搜索实例。将填写在该项目中查找其他有用的CoreOS cloud-init配置