Erlang disk_log:如何输出原始文本/ JSON以与logstash连接?

时间:2015-02-23 23:14:29

标签: elasticsearch erlang logstash

我有:

  1. 一个群集,其中有许多Erlang VM使用disk_log转储日志
  2. logstash将聚合disk_log
  3. 写入的日志
  4. elasticsearch与logstash一起用于(半)实时搜索日志。
  5. 我的问题是disk_log的输出是Erlang的内部格式。如何与logstash接口?我是否可以解析另一个Erlang VM /进程中的di​​sk_log输出文件,当它仍在被写入时(它毕竟是日志,只要Erlang VM正在运行它就会打开)并将其转储为原始文本/ logstash的JSON?有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您有几种选择:

  1. 您应该可以使用其他Erlang VM读取该文件,但仍然可以使用disk_log:chunk/2disk_log:chunk/3打开该文件。然后,您可以将这些术语翻译为JSON(例如使用JiffyJSX)并将它们发送到logstash(例如通过UDP)。
  2. 这个解决方案会很慢,因为它需要先写入磁盘然后再从中读取。 disk_log通常用于高性能,因此添加这么多开销并不是正确的。

    1. 您可以直接在应用程序中通过UDP添加将日志发送到graylog。这很好,因为它在磁盘上的开销要少得多,但你需要记住在每个地方都添加两种类型的日志(disk_log和JSON通过UDP)。

    2. 忘记disk_log并使用lager。当您需要在Erlang中记录任何内容时,Lager成为标准。功能列表令人印象深刻。您可以定义不同的后端。在你的情况下:文件和graylog。文件后端包含在lager中,你可以找到graylog后端here。即使拥有所有这些力量,它仍然具有很高的性能。