ELKの紹介

1.ELKの紹介

ELKは、3つのオープンソースソフトウェアの略語です。つまり、Elasticsearch、Logstash、Kibanaは、すべてオープンソースソフトウェアです。軽量のログ収集および処理ツール(エージェント)である新しいFileBeatが追加されました。Filebeatは占有するリソースが少なく、さまざまなサーバーでログを収集してLogstashに送信するのに適しています。関係者もこのツールを推奨しています。

Elasticsearchは、データの収集、分析、保存の3つの機能を提供するオープンソースの分散検索エンジンです。その特徴は、分散、ゼロ構成、自動検出、自動インデックスシャーディング、インデックスコピーメカニズム、安らかなスタイルのインターフェイス、複数のデータソース、自動検索ロードなどです。主に、ビジネスパーティによる取得とクエリを容易にするために、ログのインデックス作成と保存を担当します。

Logstashは、主にログを収集、分析、およびフィルタリングするためのツールであり、多数のデータ取得方法をサポートしています。一般的な作業方法はc / sアーキテクチャです。クライアントはログを収集する必要のあるホストにインストールされ、サーバーは各ノードの受信ログをフィルタリングおよび変更し、同時にelasticsearchに送信します。ログの収集、フィルタリング、転送のミドルウェアであり、主にさまざまなビジネスラインのさまざまなログの統合された収集とフィルタリングを担当し、Elasticsearchに転送してさらに処理します。

Kibanaはまた、オープンソースとフリーのツールです。Kibanaは、集計役立つ分析、重要なデータのログを検索することができ、ログ解析フレンドリーなウェブインターフェースでLogstashとElasticSearchを提供することができます。

FilebeatはBeatsの一部です現在、Beatsには4つのツールが含まれています。

  • Packetbeat(ネットワークトラフィックデータの収集)
  • Topbeat(システム、プロセス、およびファイルシステムレベルのCPUおよびメモリ使用量データを収集します)
  • Filebeat(ファイルデータの収集)
  • Winlogbeat(Windowsイベントログデータの収集)

2.ELKアーキテクチャ図

1.アーキテクチャ図1:
ここに画像の説明を挿入します
これは最も単純なELKアーキテクチャです。利点は、構築が簡単で使いやすいことです。欠点は、Logstashが多くのリソースを消費し、実行に高いCPUとメモリを消費することです。さらに、メッセージキューキャッシュがなく、データ損失の隠れた危険性があります。
このアーキテクチャは、関連するログとデータを収集するためにLogstashによってさまざまなノードに配布され、分析とフィルタリングの後、ストレージのためにリモートサーバー上のElasticsearchに送信されます。Elasticsearchは、データをシャードの形式で圧縮して保存し、ユーザーがクエリを実行して操作するためのさまざまなAPIを提供します。ユーザーは、Kibana Webをより直感的に構成して、ログを便利にクエリし、データに基づいてレポートを生成することもできます。

2.アーキテクチャ図2:

ここに画像の説明を挿入します
このアーキテクチャでは、メッセージキューメカニズムが導入されています。各ノードにあるLogstash Agentは、最初にデータ/ログをKafka(またはRedis)に転送し、キュー内のメッセージまたはデータをLogstashに間接的に転送します。Logstashがフィルタリングおよび分析した後、データが転送されます。 Elasticsearchストレージに。最後に、Kibanaはログとデータをユーザーに提示します。Kafka(またはRedis)の導入により、障害のためにリモートLogstashサーバーの実行が停止した場合でも、データの損失を防ぐために、データが最初に保存されます。

3.アーキテクチャ図3:
ここに画像の説明を挿入します
このアーキテクチャコレクション側のlogstashbeats置き換えます。これは、より柔軟性があり、消費するリソースが少なく、よりスケーラブルです。同時に、LogstashクラスターElasticsearchクラスター、大規模なクラスターシステムの運用および保守ログデータの監視とクエリをサポートするように構成できます。

3.Filebeatのしくみ

  • 1. Filebeatは、プロスペクターハーベスターの2つの主要コンポーネントで構成されています。これらの2つのコンポーネントは連携して、指定された出力にファイルの変更を送信します。

ここに画像の説明を挿入します

  • 2.ハーベスター:単一のファイルの内容を読み取る責任があります。各ファイルはハーベスターを起動し、各ハーベスターは各ファイルを1行ずつ読み取り、ファイルの内容を指定された出力に送信します。Harvesterはファイルを開いたり閉じたりする役割を果たします。つまり、Harvesterの実行中は、ファイル記述子が開かれます。収集中にファイルの名前が変更されたり削除されたりした場合、Filebeatは引き続きファイルを読み取ります。したがって、ハーベスターを閉じる前にディスクが解放されることはありません。デフォルトでは、filebeatはclose_inactiveに達するまでファイルを開いたままにします(このオプションをオンにすると、filebeatは指定された時間内に更新されなくなったファイルハンドルを閉じ、時間はハーベスターが最後に読み取った時間から始まりますファイルハンドルがである場合ファイルが閉じられた後、新しいハーベスタが開始されます。ファイルハンドルを閉じる時間はファイルの変更時間に依存しません。このパラメータが適切に構成されていない場合、ログはscan_frequencyパラメーターによって決定され、デフォルトは10秒です。ハーベスターは内部タイムスタンプを使用して、ファイルが最後に収集された時刻を記録します。例:ハーベスターがファイルの最後の行を読み取った後、5mに設定します。 、カウントダウンは5分間開始され、5分以内にファイルに変更がない場合、ファイルハンドルは閉じられます。デフォルトは5m)。

  • 3.プロスペクター:ハーベスターを管理し、すべての読書ソースを見つける責任があります。
    プロスペクターは、/ apps / logs / *ディレクトリにあるすべてのinfo.logファイルを検索し、各ファイルのハーベスターを起動します。プロスペクターは各ファイルをチェックして、Harvesterが開始されているかどうか、開始する必要があるかどうか、またはファイルを無視できるかどうかを確認します。Harvesterが閉じている場合、Prospectorはファイルサイズが変更された場合にのみ検査を実行します。ローカルファイルのみを検出できます。

filebeat.prospectors:
- input_type: log
  paths:
    - /apps/logs/*/info.log
  • 4. Filebeatはファイルステータスをどのように記録しますか:ファイルステータス
    ファイルに記録します(デフォルトは/ var / lib / filebeat / Registryです)。この状態は、Harvesterコレクションファイルのオフセットを記憶できます。ESなどの出力デバイスに接続できない場合、filebeatは送信前に最後の行を記録し、再度接続できるようになると送信を続行します。Filebeatの実行中は、プロスペクターのステータスがメモリに記録されます。Filebeatが再起動すると、レジストリによって記録された状態を使用して再構築し、再起動前の状態を復元します。各プロスペクターは、見つかった各ファイルのステータスを記録します。ファイルごとに、Filebeatは、ファイルが以前に収集されたかどうかを検出するための一意の識別子を格納します。

  • 5. Filebeatは、イベントが少なくとも1回出力されることをどのように保証しますか:
    Filebeatが、データを失うことなく、構成された出力にイベントが少なくとも1回配信されることを保証できる理由は、Filebeatが各イベントの配信ステータスをファイルに保存するためです。 ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????????????????????????????? ?????????????????????????」エクスポータによって確認されない場合、filebeatは応答を受け取るまで送信を試みます。送信中にファイルビートが閉じられた場合、すべてのタイムイベントが閉じる前に確認されるわけではありません。filebeatが閉じられる前に確認された時間は、filebeatが再起動された後に再送信されます。これにより、少なくとも1回は送信されますが、繰り返される場合があります。シャットダウンする前にイベント応答を待機する時間は、shutdown_timeoutパラメーターを設定することで設定できます(デフォルトでは無効になっています)。

4.Logstashのしくみ

1. Logstashイベント処理には、入力→フィルター→出力の3つの段階があります。これは、ログを受信、処理、および転送するためのツールです。サポートシステムログ、ウェブサーバーログ、エラーログ、アプリケーションログは、要するに、スローされる可能性のあるすべてのログタイプを含みます。
ここに画像の説明を挿入します
入力:logstashにデータを入力します。

一般的に使用される入力は次のとおりです。

file:tial -fコマンドと同様に、ファイルシステム内のファイルから読み取ります

syslog:ポート514でシステムログメッセージを監視し、RFC3164標準に従ってそれらを解析します

redis:redisサービスから読み取る

ビート:ファイルビートから読み取る

フィルタ:中間データ処理、データの操作。

一般的に使用されるフィルターは次のとおりです。

grok:任意のテキストデータを解析するGrokは、Logstashの最も重要なプラグインです。その主な機能は、テキスト形式の文字列を特定の構造化データに変換し、正規表現で使用することです。120を超える構文解析文法が組み込まれています。

mutate:フィールドを変換します。たとえば、フィールドの削除、置換、変更、名前の変更などです。

drop:処理せずにいくつかのイベントをドロップします。

clone:イベントをコピーします。このプロセスでフィールドを追加または削除することもできます。

geoip:地理情報を追加します(フロントキバナのグラフィック表示に使用されます)

出力:出力は、logstash処理パイプラインの最後のコンポーネントです。イベントは処理中に複数の出力を受ける可能性がありますが、すべての出力が実行されると、イベントはそのライフサイクルを完了します。

一般的な出力は次のとおりです。

Elasticsearch:データを効率的に保存でき、簡単かつ簡単に検索できます。

file:イベントデータをファイルに保存します。

グラファイト:イベントデータをグラフィックコンポーネントに送信します。これは、グラフィック表示用の一般的なオープンソースストレージコンポーネントです。

コーデック:コーデックはデータストリームに基づくフィルターであり、入力および出力の一部として構成できます。コーデックは、シリアル化されたデータを簡単に分割するのに役立ちます。

いくつかの一般的なコーデック:

json:json形式を使用してデータをエンコード/デコードします。

multiline:複数のイベントから1行にデータを収集します。例:Java例外情報とスタック情報。

おすすめ

転載: blog.csdn.net/qq_43141726/article/details/114583115