2015-02-23 27 views
2

我有:Erlang disk_log:如何輸出原始文本/ JSON以便與logstash接口?

  1. 與許多二郎的VM傾銷日誌與disk_log
  2. logstash將聚集由disk_log
  3. elasticsearch寫入日誌集羣與logstash一起使用通過在(半日誌進行搜索)即時的。

我的問題是,disk_log的輸出是Erlang的內部格式。我如何連接到logstash?我可以在另一個Erlang VM /進程中解析disk_log輸出文件(它是一個日誌,畢竟只要Erlang虛擬機正在運行,它就會打開),並將其轉儲到原始文本/ JSON中以便logstash ?有什麼問題呢?

回答

2

你有兩個選擇:

  1. 你應該能夠讀取與另一二郎VM文件,而它使用disk_log:chunk/2disk_log:chunk/3仍然是開放的。然後,您可以將條款翻譯爲JSON(例如,使用JiffyJSX)並將它們發送到logstash(例如,通過UDP)。

這個解決方案會很慢,因爲它需要先寫入磁盤然後再讀取。 disk_log通常用於高性能,所以增加這麼多開銷並不合適。

  1. 您可以直接在應用程序中添加通過UDP發送日誌到graylog。這很好,因爲它在磁盤上的開銷要少得多,但是你需要記住在每個地方添加兩種類型的日誌(disk_log和通過UDP的JSON)。

  2. 忘記disk_log並使用lager。當你需要在Erlang中記錄任何東西時,Lager就變成了標準。功能列表令人印象深刻。您可以定義不同的後端。在你的情況下:文件和Graylog。文件後端包含在lager中,您可以找到graylog後端here。即使擁有所有這些力量,它仍然具有很高的性能。

+0

感謝,lager + graylog看起來像是一個勝利者,至少目前爲止 - 我不是真的想要使用Logstash,它看起來像是一個體面的解決方案,我的問題。再次感謝 ! – ionut 2015-02-24 20:56:18