Logging
以容錯方式從多個伺服器收集日誌
我的主要要求是能夠查看和對多台機器組合的日誌進行簡單搜尋。但是,我希望該解決方案對(核心)系統的其餘部分影響最小。我沒有任何實時性要求,這個過程可以是非同步的。
最初 syslog 似乎是一個不錯的選擇,但如果 syslog 伺服器死了怎麼辦?在最壞的情況下,核心系統的使用者會看到錯誤,在最好的情況下,一些日誌會失去。
所以我開始環顧四周,發現了 Logstash ( http://logstash.net/ )。目前我的想法是:
- 在每台伺服器(執行系統的核心組件)上都有一個 Logstash 代理正在執行
- 代理監控日誌文件並將它們發送到 ElasticSearch 集群
- 還有另一個帶有 Logstash UI 的伺服器
那樣:
- 沒有單點故障
- 即使 ES 集群死了,也只有代理會受到影響——應用程序仍然會愉快地將日誌寫入文件
- 在 ES 回來後,代理將(希望)趕上並發送所有待處理的日誌(Logstash 是否足夠聰明,可以做到這一點?)
你認為這會奏效嗎?或者,也許您可以推薦其他解決方案?
Rsyslog具有您所描述的一些功能,並且該項目還有大量關於可靠消息轉發的文件。
簡而言之,使用 rsyslog,您可以使用RELP協議進行可靠的 syslog 消息轉發,然後您不必擔心消息失去。您還可以選擇配置本地假離線文件,其中 rsyslog 將在遠端伺服器關閉時緩衝消息。一旦遙控器恢復正常,您的代理就會趕上。
您還可以選擇將 rsyslog 配置為寫入關係數據庫,然後您可以根據需要使數據庫成為冗餘(我個人認為 syslog 伺服器更易於集群)。