在kubernetes中集中应用程序日志记录

时间:2017-06-27 12:38:12

标签: logging kubernetes

我们正在运行基于java的微服务,我们有以下场景

  • 应用程序将debug.log文件写入/opt/tomcat/logs/debuglog/debug.log,日志文件大小为1GB /小时
  • Tomcat写catalina.out,localhost_access_log和localhost.log以及所有这些日志的大小为1GB /小时

问题是如何在集中和分析大量日志时解决这个问题。我们正在运行此应用程序的20个实例。我们有平板文件150GB的日志。以下是问题,

  • 根据我们的SLA将日志存储在GCS中3年
  • 解析这些日志并将其存储在BQ for bigdata中1年
  • 解析这些日志并将其存储在ELK中7天,以便开发人员分析任何正在运行的问题

我们正在尝试评估以下内容,

  • 由于kubernetes建议为应用程序日志运行sidecars,我们最终可能会考虑catalina.out将运行3个sidecars到stdout。我们可以使用Stack-driver处理日志并将它们放到GCS中。我们看到的问题是容器爆炸,特别是自动缩放。其他问题是将日志从stackdriver解析为BigQuery或ELK。
  • 将GCS装入容器并自行写入。问题是GCS是社区驱动的,而不是生产就绪。我们仍然需要编写解决方案来再次解析这些日志
  • 使用外部驱动器安装到Minion并将卷安装到容器。每个VM运行1个容器以处理不同管道和方案的日志。这为我们解决了一些问题:缩小时不会丢失日志,没有容器爆炸,单个负责任的容器处理不同的管道,根据可用性将日志移动到GCS。我们看到的问题是在升级和缩小时管理连接到每个VM的SSD存储。

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

您可以使用运行类似fluentdlogstash的单边车。 两者都是日志提取工具,可以使用多个插件进行自定义,这些插件允许您一次路由到所有目的地。 在logstash的情况下,您甚至可能想要使用filebeat。

此外,流利的人似乎有official plugin from Google that does most of what you want

使用DaemonSets收集主机上的日志

这是in this k8s blog post about cluster-level loggingthis blog post in the fluentd blog所述的程序。

我们的想法是运行一个DaemonSet(一组在集群中的每个节点上运行的pod),用于安装容器日志文件所在的主机路径。

但是,这只会收集应用程序生成的日志到stdout。 要收集其他文件,您可以使用here描述的技术:运行非常轻量级的边车,只需添加日志文件。