在 bluemix Kibana 中正确解析我的容器日志

Correctly parsing my container logs in bluemix Kibana

我在 bluemix 中使用容器,我通过在环境变量中提及我的日志路径将我的自定义应用程序日志转发到 Kibana。现在我可以在 Bluemix Kibana 仪表板中看到我的日志。

但问题是它没有解析我的日志,我的自定义日志中的所有信息都显示在消息字段中。我想在不同的列中看到不同的信息,以便我可以进行所有的过滤和搜索,例如我想从我的自定义日志中选择模块名称、日志级别、时间戳等。现在这些字段在 Kibana 中变为空,整行显示在消息字段中。

现在我有什么选择?是否必须在每个容器实例中启动 logstash 代理,或者我只需要在某处提及我的日志模式?还有其他选择吗?

任何好的链接和信息也将不胜感激。

您可以使用 logstash,但正如您所提到的,您有多个容器,因此不建议在所有容器上安装 logstash 代理,然后将数据发送到托管 Elasticsearch 和 Kibana 的中央服务器。

您可以使用以下工具:-

  • 使用 Filebeat(将其安装在所有容器上)- 它是一个轻量级数据传送器
  • 将 Filebeat 数据发送到 Logstash(将托管 Elasticsearch 和 Kibana 的中央服务器)
  • 创建 Logstash 配置文件以解析数据并将输出发送到 Elasticsearch。 (这将利用 Logstash 的 grok 过滤器将数据 parse/process 放入字段中)。
  • 使用 Kibana 可视化来自 Elasticsearch Index 的数据。

如果您使用的是 IBM Bluemix Container Service,则无法将自定义过滤器添加到现有日志中 service/crawler 请参阅 Monitoring and logging IBM Bluemix Container Service

为了使日志在 Kibana 仪表板中更有意义,您可以记录 JSON 格式的输出,这允许使用 IBM 容器服务更好地过滤,这在此处描述 Test Driving Built-in Monitoring and Logging in IBM Containers

"The net result of this is that, if your app emits JSON formatted logs, they will be properly parsed and indexed in Elastic Search, which can then be queried."

如果这还不够,您需要在此处描述的容器中添加 logstash 记录器 Sending logs to Bluemix using Logstash agent

最后,您还可以部署自己的 ELK 堆栈。