web-dev-qa-db-ja.com

新旧のイベントからの統計の集計

CDNログをGraphiteにフィードし、そこにある集計数(さまざまなHTTPステータスコードのレート、平均応答サイズ、平均キャッシュヒット率など)をフィードしたいと思います。

ただし、ログがアップロードされるのはたまにしかなく、場合によっては故障-時々、午後のログがアップロードされて処理されてから数時間後の夕方に朝のログがアップロードされることがあります。 。また、CDNには(明らかに)複数のサーバーとデータセンターがあるため、異なるログで重複期間をカバーできます。

つまり、新しいログを処理するときにアグリゲーションを拡張できるようにするには、アグリゲーターは以前の統計のallへのアクセスを維持する必要があります。

何が-もしあれば-それをすることができますか?そして、logstashにフィードするように設定するにはどうすればよいですか?ありがとう!

1
Mikhail T.

ご存知のように、これは複雑な問題です。あなたはあなたの質問で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データセットに基づいてデータベース内の集計/要約を生成できます。次に、必要に応じて完全詳細ログを削除します。

要するに、方法:

  1. Logstashを使用してファイルを取り込みます。
  2. フィルタリングを利用して、CDNログファイルからフィールドを抽出します。
  3. 使用 date {} filter ログのタイムスタンプをイベントのタイムスタンプにプルします。
  4. データを何か(弾性、グラファイト、またはその他の時系列データベース)にエクスポートします
  5. 表示ツールは、リアルタイムの集計を使用しますqueries少なくとも短期間のデータについては、消費者にデータを表示します。
  6. 一定期間後、おそらく数日後、スクリプトまたはその他の自動化されたプロセスが集計を生成し、それらをデータストアに入力します。
  7. さらに時間が経つと、フル解像度のデータが削除され、集計データのみが残ります。
2
sysadmin1138