【问题标题】:Parse stdout of containers in Openshift在 Openshift 中解析容器的标准输出
【发布时间】:2020-02-14 13:32:47
【问题描述】:

对于 Openshift/Kubernetes,我有点菜鸟,所以我希望我能很好地解释我的用例。

我有一个小“程序”的 Docker 映像,可以概括如下:它尾随 -f 一个日志文件,当找到与配置中指定的正则表达式匹配的内容时,它会向某人发送电子邮件。比如监控应用程序的生产日志,如果应用程序日志中打印了一个堆栈跟踪,则向 Ops 团队发送一封电子邮件。

当我的应用程序日志是通过运行在主机上的 Weblogic 应用程序上的 Java EE 生成的,或者由另一个 docker 容器生成但保存到绑定安装的文件系统的日志时,这可以正常工作,因此可以由“监控”容器。

现在我需要部署这个镜像来监控在 Openshift 中运行的 2-3 个微服务。这些微服务记录到标准输出,我没有权限将 root 拥有的路径(如 /var/lib/docker/containers/[container-id]/[container-id]-json.log)挂载到“监控”容器.

解析微服务日志的最佳方法是什么?例如,我可以更改他们的 logback 配置,让他们记录到 stdout 和 emptyDir 卷,并使用微服务+卷+监控容器创建一个 Pod。

谢谢大家的建议, 罗伯托

【问题讨论】:

    标签: docker kubernetes openshift


    【解决方案1】:

    Docker 作为日志聚合器有 fluentd。但是,您不能只使用 openshift 的 ansible 安装程序安装 fluentd(请参阅deploying-efk)。您可以手动在 docker 主机上安装 fluentd 日志记录驱动程序(请参阅fluentd-logging-driver)。 There关于 docker 主机配置的“入门”。 然后你可以使用任何output plugin 来存储日志

    【讨论】:

    • 亲爱的 Oligzeev,我过去确实研究过它,因为 afaik 已经安装了 Elasticsearch、Fluentd 和 Kibana 堆栈,至少在生产中。这些“模块”由另一个团队维护,所以除了 Kibana UI 之外,我无法真正访问这些模块。我想我需要询问管理 Fluentd 转发给 ES 和 Kibana 的团队是否也可以使用他们的 fluentd 通过 Fluentd 的 use_file 配置来收集文件?
    • 您可以将您的 java 应用程序与 elastic 集成(从架构的角度来看是首选)或要求将输出插件添加到 fluentd 以将消息转发到您的存储(文件、数据库等)
    • 后者似乎可行,我对 docker 日志记录驱动程序不太了解的是,如果我可以使用多个,我使用默认的 json-file 与 syslog 驱动程序进行了一些测试,但是它最终记录到 json 文件或 syslog-ng 服务器,而不是两者,所以我怀疑我无法在不破坏其他流(平台所有者管理的 Fluend/ES/Kibana)的情况下更改日志记录驱动程序。
    • 您不应该配置其他日志记录驱动程序(如果 EFK 已经存在),因为您可以使用额外的 output_plugins 在 fluentd 端转发日志
    【解决方案2】:

    如何将日志转发到我的文件系统上的单个文件?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多