何十億ものサーバ、モバイル端末、ネットワークデバイスがデータ技術時代に大量のログを毎日生成しています。集中ログ処理は、ライフサイクル全体のログ使用を効果的にサポートします。ログ処理の最初のステップは、デバイスから収集したログをクラウドに保存することです。
3つのログコレクタ
logstash
- LogStash はオープンソースコミュニティーの ELK スタックで、文字 “L”で表されます。これは積極的な役割を果たし、エコシステムの多くのプラグインをサポートします。
- LogStash は JRuby に基づいて実装され、JVM 上のさまざまなプラットフォームで実行されます。
- そのモジュール式設計は高いスケーラビリティと操作性を提供します。
fluentd
- Fluentd はオープンソースコミュニティーで人気の高いログコレクタです。これは td-agent として市販されており、Treasure Data によって管理されています。このドキュメントでは td-agent が評価されています。
- Fluentd は CRuby に基づいて実装され、C言語を使用してパフォーマンスに不可欠なコンポーネントを再実装することで、優れたパフォーマンスを実現します。
- Fluentd は簡潔な設計を特長とし、データ転送に信頼性の高いパイプラインを提供します。
- Fluentd は LogStash と比較してプラグインの数を減らしています。
logtail
- Logtail は Alibaba Cloud Log Service のプロデューサーです。これは Alibaba によって 3 年以上にわたり大規模データ分野に広く適用されています。
- Logtail は C++ 言語を使用して実装され、安定性、リソース制御機能、および管理性を向上させるために多大な努力を払って高性能を提供します。
- LogStash と Fluentd のコミュニティサポートと比較して、Logtail は機能の多様性の低いログ収集に特化しています。
機能の比較
機能 | LogStash | Fluentd | Logtail |
---|---|---|---|
ログリーディング | ポーリング | ポーリング | イベント発生 |
ファイルのローテーション | サポート | サポート | サポート |
フェールオーバー(ローカルチェックポイント) | サポート | サポート | サポート |
一般的なログ解析 | Grok解析(正規表現に基づく) | 正規表現に基づく構文解析 | 正規表現に基づく構文解析 |
特定のログタイプ | 区切り文字、キー値、JSON、およびその他の主流フォーマットのサポート | 区切り文字、キー値、JSON、およびその他の主流フォーマットのサポート | 区切り文字、キー値、JSON、およびその他の主流フォーマットのサポート |
送信前のデータ圧縮 | プラグインでサポート | プラグインでサポート | LZ4 |
データフィルタ | サポート | サポート | サポート |
バッファベースのデータ転送 | プラグインでサポート | プラグインでサポート | サポート |
転送例外処理 | プラグインでサポート | プラグインでサポート | サポート |
ランタイム環境 | JVM環境依存性を持つJRuby実装 | Ruby環境に依存するCRubyとC実装 | 特別な要件のないC++実装 |
スレッドサポート | マルチスレッドのサポート | マルチスレッドのGIL制約 | マルチスレッドのサポート |
ホットアップグレード | 未サポート | 未サポート | サポート |
集中構成管理 | 未サポート | 未サポート | サポート |
実行状態の自己検出 | 未サポート | 未サポート | CPU /メモリのしきい値保護のサポート |
ログファイルの収集 - パフォーマンスの比較
ログサンプル:以下は14個の構造化フィールドを持つ365バイトのNginxアクセスログです。
次のテストでは、さまざまなシミュレートされた出力で繰り返しログをファイルに書き込みます。各ログの時間フィールドは、ログが書き込まれたときのシステム時間に設定され、残りの13個のフィールドはすべてのログで同じになります。
シミュレートされたシナリオでのログ解析プロセスは、書き込み操作によって生成されたネットワークトラフィックが比較的高いデータ圧縮率のために減少することを除いて、実際の状態と同じです。
ログスタッシュ
LogStash 2.0.0はgrokを通してログを解析し、解析されたログをKafka(プラグインを組み込み、Gzip圧縮を可能にする)に書き込みます。
ログ解析設定:
grok {
patterns_dir=>"/home/admin/workspace/survey/logstash/patterns"
match=>{ "message"=>"%{IPORHOST:ip} %{USERNAME:rt} - \[%{HTTPDATE:time}\] \"%{WORD:method} %{DATA:url}\" %{NUMBER:status} %{NUMBER:size} \"%{DATA:ref}\" \"%{DATA:agent}\" \"%{DATA:cookie_unb}\" \"%{DATA:cookie_cookie2}\" \"%{DATA:monitor_traceid}\" %{WORD:cell} %{WORD:ups} %{BASE10NUM:remote_port}" }
remove_field=>["message"]
}
試験結果:
書き込みTPS | 書き込みトラフィック(KB /秒) | CPU使用率(%) | メモリ使用量(MB) |
---|---|---|---|
500 | 178.22 | 22.4 | 427 |
1000 | 356.45 | 46.6 | 431 |
5000 | 1782.23 | 221.1 | 440 |
10000 | 3564.45 | 483.7 | 450 |
fluentd
td-agent-2.2.1は正規表現に基づいてログを解析し、解析されたログをKafka(サードパーティのプラグインfluent-plugin-kafkaを持ち、Gzip圧縮を可能にする)に書き込みます。
ログ解析設定:
<source>
type tail
format /^(?<ip>\S+)\s(?<rt>\d+)\s-\s\[(?<time>[^\]]*)\]\s"(?<url>[^\"]+)"\s(?<status>\d+)\s(?<size>\d+)\s"(?<ref>[^\"]+)"\s"(?<agent>[^\"]+)"\s"(?<cookie_unb>\d+)"\s"(?<cookie_cookie2>\w+)"\s"(?
<monitor_traceid>\w+)"\s(?<cell>\w+)\s(?<ups>\w+)\s(?<remote_port>\d+).*$/
time_format %d/%b/%Y:%H:%M:%S %z
path /home/admin/workspace/temp/mock_log/access.log
pos_file /home/admin/workspace/temp/mock_log/nginx_access.pos
tag nginx.access
</source>
試験結果:
書き込みTPS | 書き込みトラフィック(KB /秒) | CPU使用率(%) | メモリ使用量(MB) |
---|---|---|---|
500 | 178.22 | 13.5 | 61 |
1000 | 356.45 | 23.4 | 61 |
5000 | 1782.23 | 94.3 | 103 |
注意: Fluentdの1つのプロセスでは、GILの制約のために1つのCPUコアしか使用されません。マルチプロセスプラグインは、より高いログスループットをサポートするために使用できます。
logtail
Logtail 0.9.4は、正規表現に基づいてログ構造を実行し、LZ4で圧縮されたデータをHTTP経由でログサービスに書き込みます。batch_sizeは4,000に設定されています。
ログ解析設定:
logRegex : (\S+)\s(\d+)\s-\s\[([^]]+)]\s"([^"]+)"\s(\d+)\s(\d+)\s"([^"]+)"\s"([^"]+)"\s"(\d+)"\s"(\w+)"\s"(\w+)"\s(\w+)\s(\w+)\s(\d+).*
keys : ip,rt,time,url,status,size,ref,agent,cookie_unb,cookie_cookie2,monitor_traceid,cell,ups,remote_port
timeformat : %d/%b/%Y:%H:%M:%S
試験結果:
書き込みTPS | 書き込みトラフィック(KB /秒) | CPU使用率(%) | メモリ使用量(MB) |
---|---|---|---|
500 | 178.22 | 1.7 | 13 |
1000 | 356.45 | 3 | 15 |
5000 | 1782.23 | 15.3 | 23 |
10000 | 3564.45 | 31.6 | 25 |
シングルコア処理能力の比較
結論
LogStash、Fluentd、およびLogtailには、次の機能があります。
- LogStashは一般的なログタイプ、多様なプラグイン、柔軟なカスタマイズをサポートしますが、パフォーマンスは比較的低く、JVMのためにメモリ使用量が高くなりがちです。
- Fluentdは一般的なログタイプと多くのプラグインをサポートしており、優れたパフォーマンスを発揮します。
- Logtailは、マシンのCPUとメモリリソースを最小限占有し、パフォーマンススループットが向上し、共通のログ収集シナリオを完全にサポートします。ただし、プラグインのサポートはなく、LogStashおよびFluentdよりも低い柔軟性とスケーラビリティを提供します。