如何将 PHP 应用日志直接发送到 ELK 服务?

How to send PHP app logs directly to ELK service?

根据documentation,有两种方法可以将日志信息发送到 SwisscomDev ELK 服务。

  1. 通过 STDOUT 的标准方式:每个到 stdout 的输出都发送到 Logstash
  2. 直接发送到 Logstash

询问方式2。这是如何实现的,特别是预期的输入如何?

我们在基于 PHP buildpack 的应用程序中使用 Monolog,并且使用它的 stdout_handler 工作正常。

我正在尝试 GelfHandler(连接被拒绝)、SyslogUdPHandler(没有错误,但没有结果),两者都配置为使用 VCAPServices logstashHostlogstashPort 作为 API 端点/主机将日志发送到。

绑定有效,环境变量已设置,但我不知道如何从我们的应用程序发送 SwisscomDev ELK 服务 Logstash API 端点兼容日志信息。

Logstash 配置有 tcp input, which is reachable via logstashHost:logstashPort. The tcp input is configured with its default codec, which is the line codec (source code; not the plain codec as stated in the documentation).

日志事件的有效载荷应编码为JSON,以便Elasticsearch 自动识别这些字段。如果是这种情况,整个日志事件将转发给 Elasticsearch,无需进一步处理。 如果有效负载不是 JSON,则整个日志行将在字段 message.

中结束

对于您使用 Monolog 的用例,我建议您使用 SocketHandler (pointing it to logstashHost:logstashPort) in combination with the LogstashFormatter,它将处理 JSON 编码,日志事件被行分隔。