【发布时间】:2019-07-10 22:20:29
【问题描述】:
我们正在运行基于 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 建议为应用程序日志运行 sidecar,考虑到 catalina.out 将转到标准输出,我们最终可能会运行 3 个 sidecar。我们可以使用 Stack-driver 处理日志并将它们放到 GCS 中。我们看到的问题是容器爆炸,特别是自动缩放。其他问题是将日志从 stackdriver 解析到 BigQuery 或 ELK。
- 在容器中安装 GCS 并自行写入。问题是 GCS 是社区驱动的,而不是生产就绪。我们仍然需要编写解决方案来再次解析这些日志
- 使用外部驱动器挂载到 Minion 并将卷挂载到容器。每个 VM 运行 1 个容器以处理不同管道和场景的日志。这为我们解决了一些问题,例如:缩减规模时日志不会丢失,没有容器爆炸,单个负责任的容器来处理不同的管道,根据可用性将日志移动到 GCS。我们看到的问题是在扩展和缩减时管理连接到每个 VM 的 SSD 存储。
欢迎提出任何建议。
编辑
我们最终在 GCP 上使用自定义管道,其中应用程序将日志推送到发布/订阅,而数据流负责聚合和转换信息。
【问题讨论】:
标签: logging kubernetes google-cloud-pubsub