logging - kubernetes中的集中式应用程序日志记录

标签 logging kubernetes google-cloud-pubsub

我们正在运行基于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中以获取bigdata一年
  • 解析这些日志并将其存储在ELK中7天,以供开发人员分析任何正在运行的问题

  • 我们正在尝试评估以下内容,
  • 由于kubernetes建议为应用程序日志运行sidecar,因此考虑到catalina.out将转到stdout,我们可能最终会运行3个sidecar。我们可以使用堆栈驱动程序来处理日志并将其放入GCS。我们看到的问题是专门用于自动缩放的容器爆炸。另一个问题是将日志从堆栈驱动程序解析到BigQuery或ELK。
  • 将GCS装入容器,然后将其本身写入。问题在于GCS是社区驱动的,而不是生产就绪的。我们仍然必须编写解决方案以再次解析这些日志
  • 使用外部驱动器安装到Minion,将卷安装到容器。每个VM运行1个容器以处理不同管道和方案的日志。这为我们解决了一些问题,例如:缩小规模后日志不会丢失;不会发生容器爆炸;负责任的单个容器来处理不同的管道;根据可用性将日志移至GCS。我们看到的问题是按规模和规模管理附加到每个VM的SSD存储。

  • 任何建议都欢迎。

    编辑

    我们最终在GCP上使用了自定义管道,其中应用程序将日志推送到pub / sub,而数据流则负责聚合和转换信息。

    最佳答案

    您可以使用运行fluentdlogstash之类的单个Sidecar。
    两者都是日志提取工具,可以使用多个插件进行自定义,这使您可以一次路由到所有目的地。
    对于logstash,您甚至可能想要使用filebeat。

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

    使用DaemonSet收集主机上的日志

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

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

    但是,这只会收集您的应用程序生成到stdout的日志。
    要收集其他文件,可以使用here描述的技术:运行一个非常轻量级的sidecar,仅尾随日志文件。

    关于logging - kubernetes中的集中式应用程序日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780517/

    相关文章:

    logging - 从配置文件更改 WebSphere 日志记录级别

    linux - 在 Linux 系统上记录速度错误

    kubernetes - 如何终止 Kubernetes 命名空间?

    docker - Kubernetes - 如何向所有小兵发送请求?

    google-app-engine - Google Pub/Sub 推送消息不适用于启用 IAP 的应用引擎

    google-cloud-platform - Pub/Sub 订购和多区域

    google-cloud-pubsub - GCF 中的 PubSub 死信

    c++ - 多线程应用程序中的独立日志记录

    java - 过滤 Apache Spark Log4J 消息以仅保留包含特定字符串的消息

    kubernetes - 如何删除 Kubernetes 中的 API 资源?