CDNログをGraphiteにフィードし、そこにある集計数(さまざまなHTTPステータスコードのレート、平均応答サイズ、平均キャッシュヒット率など)をフィードしたいと思います。
ただし、ログがアップロードされるのはたまにしかなく、場合によっては故障-時々、午後のログがアップロードされて処理されてから数時間後の夕方に朝のログがアップロードされることがあります。 。また、CDNには(明らかに)複数のサーバーとデータセンターがあるため、異なるログで重複期間をカバーできます。
つまり、新しいログを処理するときにアグリゲーションを拡張できるようにするには、アグリゲーターは以前の統計のallへのアクセスを維持する必要があります。
何が-もしあれば-それをすることができますか?そして、logstashにフィードするように設定するにはどうすればよいですか?ありがとう!
ご存知のように、これは複雑な問題です。あなたはあなたの質問でLogstashにタグを付けたので、私はあなたがそれを持っていると仮定します。
ログの取り込みは、Logstashが行うことです。 a file {}
input plugin そのためだけに:
input {
file {
path => [ '/opt/export/cdn_logs/*.csv'
tags => [ 'cdnlogs' ]
}
}
そして a csv {}
filter CSVデータの取り込みを容易にします。
filter {
if 'cdnlogs' in [tags] {
csv {
source => "message"
columns => [
'cdndate',
'Host_server',
[...]
'response_time' ]
}
}
}
CSVデータがない場合、おそらくそれらの行はかなり正常に見えるApache形式であり、すべてが失われることはありません。あなたはおそらくgrokと一緒に時間を過ごす必要があるでしょう。それはそれ自身のものです。
タイムスタンプを保持するように注意し、 statsd を使用しない限り、日付の順序付けはそれほど問題になりません。これは明らかにしない保持します。まだ行っていない場合、Logstashはログファイル内の日付を取得して、イベントの日付/タイムスタンプにすることができます。
filter {
date {
match => [ "cdndate", "ISO8601" ]
}
}
これにより、ログラインの日付/時刻スタンプがイベントのタイムスタンプとして取得されます。かっこいい、それを何か役に立つものにするために。
Logstashのストックデータストアは elasticsearch で、Elastic(会社)はInfluxDBやOpenTSDBなどの専用ツールと同じくらい良い時系列データストアに請求しようと忙しくしています。私の経験では、専用のものの方がパフォーマンスが優れている可能性があります。これらはすべて、正しく入力したと仮定すると、順序が正しくないイベントを正しい順序で格納できるため、後のクエリで新しい情報を吸収できます。
graphite {}
Logstashからの出力はタイムスタンプを保持します。これにより、必要に応じて、そのバッキングストアとしてグラファイトを使用できます。
influxdb {}
およびopentsdb {}
出力プラグインが存在し、データを真の時系列データベースに取り込みます。
そこから、短期データ(説明から数日)の集計/要約をクエリ時に実行する必要があります。 grafana のようなツールは、これらのデータストアのいくつかを前面に出し、表示を容易にします。ログの到着のリスクゾーンを過ぎたら、後のETLプロセスを実行して、completeデータセットに基づいてデータベース内の集計/要約を生成できます。次に、必要に応じて完全詳細ログを削除します。
要するに、方法:
date {}
filter ログのタイムスタンプをイベントのタイムスタンプにプルします。