私は、複数のアプリケーションノードに分散しているWebサービスへの要求と応答を記録するログシステムを構築しています。私はMongoDBをリポジトリとして使用し、x個のリクエストの後にリアルタイムで、またはより現実的にDBにログをダンプすることを考えていました。このアプリケーションはかなり大量に設計されており、Perlで構築されています。誰もこれをやっている経験がありますか?推薦?それとも、これはノーですか?MongoDBのログ
答えて
これは、2つのアプリケーションサーバーで実行されるWebアプリケーションでこれを実行しました。 mongodbへの書き込みはデフォルトでは非ブロック化されています(javaドライバはあなたの要求をただちに返し、私はそれがperlと同じだと仮定しますが、より良い点を確認します)。ユーザーがログを記録するのを待つ必要があります。
いくつかの失敗シナリオでは、いくつかのログが失われる可能性があるという欠点があります(たとえば、mongoがデータを取得する前にアプリケーションが失敗する)。
多くの企業がMongoDBを使ってログを保存しているのを見てきました。そのスキーマ・フリーネスは、スキーマが時々変更される傾向があるアプリケーション・ログにとっては本当に柔軟性があります。また、そのCapped Collection機能は、古いデータを自動的にパージして、データをメモリに収めるため、非常に便利です。
人は通常のグループ化またはMapReduceでログを集計しますが、それほど高速ではありません。特にMongoDBのMapReduceは単一のスレッド内でしか動作せず、JavaScriptの実行オーバーヘッドは膨大です。 New aggregation frameworkはこの問題を解決する可能性があります。
もう1つ懸念事項は、書き込みスルーが高いことです。 MongoDBの挿入はデフォルトでfire-and-forgetスタイルですが、多くのinsertコマンドを呼び出すと書き込みロックの競合が大きくなります。これは、アプリケーションのパフォーマンスに影響を与え、読者が格納されたログを集約/フィルタするのを防ぎます。
,Logstash、またはFlumeのようなログコレクタフレームワークを使用している可能性があります。これらのデーモンはすべてのアプリケーションノードで起動され、appプロセスからログを取得します。
彼らは、ログをバッファリングし、非同期書き込みをバッチで行うので、それはアプリケーションから直接書くよりも多くの方が効率的ださMongoDBの/ PostgreSQLの/などのような他のシステムにデータを書き出します。このリンクでは、PerlプログラムからFluentdにログを出力する方法について説明します。アプリのいくつかの興味深いアイデアを
お持ちでない場合は、私がGraylog2をチェックアウトをお勧めします。彼らはMongoDBとElasticsearchの組み合わせをかなり効果的に使います。強力な検索エンジンをミックスに追加すると、興味深いクエリと分析オプションが得られます。
参考資料として、ログ処理ツールとテクニック専用のElasticsearch pageがあります。
処理前にログエントリをキューに入れる予定がある場合は(これが私の推奨する)Kestrelをメッセージキューオプションとして推奨します。これはGaug.esが使用しているもので、最近私はそれをペースで入れています。 Javaアプリケーションです。これは非常に高速で素早く、便利にMemcacheプロトコルを話します。これは、水平方向に拡大するのに最適な方法です。メモリキャッシュは、速度と耐久性のバランスを考慮して、ジャーナルファイルにバックアップされます。
私はLog::Dispatch::MongoDBでいくつかのアプリケーションでそれを使用しています。魅力のように動作します!
# Declaration
use Log::Dispatch;
use Log::Dispatch::MongoDB;
use Log::Dispatch::Screen;
use Moose;
has log => (is => 'ro', isa => 'Log::Dispatch', default => sub { Log::Dispatch->new }, lazy => 1)
...
# Configuration
$self->log->add(
Log::Dispatch::Screen->new(
min_level => 'debug',
name => 'screen',
newline => 1,
)
);
$self->log->add(
Log::Dispatch::MongoDB->new(
collection => MongoDB::Connection->new(
host => $self->config->mongodb
)->saveme->log,
min_level => 'debug',
name => 'crawler',
)
);
...
# The logging facility
$self->log->log(
level => 'info',
message => 'Crawler finished',
info => {
origin => $self->origin,
country => $self->country,
counter => $self->counter,
start => $self->start,
finish => time,
}
);
そして、ここcapped collectionからサンプルレコードです:
{
"_id" : ObjectId("50c453421329307e4f000007"),
"info" : {
"country" : "sa",
"finish" : NumberLong(1355043650),
"origin" : "onedayonly_sa",
"counter" : NumberLong(2),
"start" : NumberLong(1355043646)
},
"level" : "info",
"name" : "crawler",
"message" : "Crawler finished"
}
- 1. mongodbログ
- 2. mongodbログの読み方は?
- 3. 春のデータMongoDBの接続ログ
- 4. winston-mongodb、express-winston、winstonでのログ
- 5. MongoDB Javaドライバのログを設定する
- 6. SpringブートでMongoDBクエリをログする
- 7. 複数のユーザーのログをMongoDBに保存する
- 8. 遅いクエリのみをログに記録するmongodb
- 9. MongoDBのログ出力を説明してください
- 10. MongoDbを使ったlog4jとログの保存に関するベストプラクティス
- 11. MongoDB(C#ドライバを使用)、ログはありますか?
- 12. Laravel5のログ解析のログ
- 13. クライアントからMongoDBログに任意のログデータを追加するには?
- 14. MongoDBログをローテーションする必要があるのはなぜですか?
- 15. Pythonのログ:INFO、DEBUGログが
- 16. ログ内でのログの繰り返しのログ4j
- 17. ログ4同じネットのログがない
- 18. hazelcastログをlog4j2ログにリダイレクト
- 19. はPM2ログとPM2ログ
- 20. ログ
- 21. ログ
- 22. JSONデバッグの:CSVへのJSON我々はログにJSONが含まれているのMongoDBログを取得したsyslog-ngのサーバーを持っている
- 23. install.packages()のログ
- 24. Telnetセッションのログ
- 25. アプリケーションサーバのログ
- 26. PyEPLログのヘルプ
- 27. gitのログ
- 28. ログ7zのアーカイブ
- 29. クラスタアプリケーションのasyncioログ
- 30. Program.cs内のログ
グレート。リアルタイムのログ記録を行っていますか?どのように負荷が集中しているのですか? – MadHacker