ELKログ分析プラットフォームのご紹介
ELK は、それぞれ Elasticsearch、Logstash、Kibana の 3 つのオープン ソース ソフトウェアの略称です。以上、ElasticsearchとKibanaについて説明しました。Logstash は主にログを収集、分析、フィルタリングするためのツールです。大量のデータを使用するシナリオに適しています。通常は c/s モードを採用します。クライアント エンドはログを収集する必要があるホストにインストールされ、サーバー側は各ノードのログを受信し、フィルタリングや変更などの操作を実行して、データ分析のために Elasticsearch に送信します。
完全な集中ログ システムには、次の主な機能が含まれている必要があります。
- 収集 - 複数のソースからログ データを収集する機能
- 送信 - ログデータを中央システムに安定して送信可能
- ストレージ - ログデータの保存方法
- 分析 - UI分析をサポートできます
- 警告 - エラー報告、監視メカニズムを提供できます。
ELK は、オープンソース ソフトウェアである完全なソリューション セットを提供し、相互に連携して使用され、完全に接続され、さまざまな場面でのアプリケーションに効率的に対応し、現在主流のログ分析プラットフォームです。
ELK 導入アーキテクチャ パターン
シンプルなアーキテクチャ
これは最も単純な ELK デプロイメント アーキテクチャ メソッドであり、Logstash は各ノード上の関連するログとデータを収集し、分析とフィルタリング後に保存するためにリモート サーバー上の Elasticsearch に送信します。Logstash の利点は、構築が簡単で使いやすいことですが、欠点は、大量のリソースを消費し、強い依存関係があり、メッセージ キュー キャッシュがなく、データ損失の潜在的な危険性があることです。
メッセージキューのアーキテクチャ
キュー アーキテクチャには KAFKA メッセージ キューが導入されており、過剰な Logstash リソースの消費と各収集ノードでのデータ損失の問題が解決されます。各ターミナル ノードの Logstash エージェントは最初にデータ/ログを Kafka に渡し、次にメッセージ キューがデータを渡します。 Logstash へ フィルタリングと分析の後、Logstash はデータをストレージのために Elasticsearch に渡し、Kibana はログとデータをユーザーに提示します。
ビートアーキテクチャー
このアーキテクチャのターミナル ノードは、Beats ツールを使用してデータの収集と送信を行います。これは、より柔軟で、リソースの消費が少なく、拡張性が高くなります。同時に、Logstash および Elasticsearch クラスターを構成して、大規模クラスター システムの運用および保守ログ データの監視とクエリをサポートすることができます。このツールは公式からも推奨されています。この章では、このアーキテクチャ モードを使用して構成について説明します(本番環境の場合は、kafka メッセージ キューを追加できます。beats+メッセージ キューのデプロイメント アーキテクチャを実装します)。
Beats ツールには次の 4 種類があります。
1. Packetbeat (ネットワーク トラフィック データを収集)
2. Topbeat (システム、プロセス、ファイル システム レベルの CPU およびメモリ使用量データを収集)
3. Filebeat (ファイル データを収集)
4. Winlogbeat (Windows イベント ログ データを収集) )
ELKの動作メカニズム
logstashとfilebeatはどちらもログ収集機能を持っており、Filebeatの方が軽量でリソースの使用量も少ないですが、logstashにはログをフィルタリングして分析できるフィルタ機能があります。一般的な構造は、filebeat がログを収集し、それらをメッセージ キュー、redis、および kafaka に送信するというものです。次に、logstash がそれを取得し、filter 関数を使用してフィルタリングおよび分析し、elasticsearch に保存します。
Filebeatの動作メカニズム
Filebeat は、探鉱者と収穫者という 2 つの主要コンポーネントで構成されます。これら 2 つのコンポーネントは連携して、ファイルの変更を指定された出力に送信します。
プロスペクター: ハーベスターの管理とすべての読み取りソースの検索を担当します。
Prospector はディレクトリ内のすべての info.log ファイルを検索し/apps/logs/*
、ファイルごとに Harvester を起動します。
Prospector は各ファイルをチェックして、Harvester がすでに起動されているか、起動する必要があるか、またはファイルが無視できるかどうかを確認します。Harvester が閉じている場合、Prospector はファイル サイズが変更された場合にのみチェックを実行します。ローカル ファイルのみが検出できます。
Harvester (ハーベスター) : 単一ファイルの内容の読み取りを担当します。各ファイルはハーベスタを起動し、各ハーベスタは各ファイルを 1 行ずつ読み取り、ファイルの内容を指定された出力に送信します。Harvester はファイルの開閉を担当します。つまり、Harvester が実行されているときは、ファイル記述子が開いています。収集中にファイルの名前が変更または削除された場合でも、Filebeat は引き続きファイルを読み取ります。したがって、ハーベスタが閉じられるまでディスクは解放されません。达到close_inactive
デフォルトでは、指定された時間内に更新されなくなったファイル ハンドルを filebeat が閉じるまで、filebeat はファイルを開いたままにし、その時間はハーベスタが最後の行を読み取った時点から始まります。
ファイル ハンドルが閉じられた後にファイルが変更されると、新しいハーベスターが開始されます。ファイル ハンドルを閉じるまでの時間は、ファイルの変更時間には依存しません。このパラメータが適切に構成されていない場合、ログはリアルタイムではない可能性があります。パラメータによって決定され、デフォルトは 10 秒ですscan_frequency
。Harvester は内部タイムスタンプを使用して、ファイルが最後に収集された時間を記録します。たとえば、5m を設定すると、Harvester がファイルの最後の行を読み取った後、5 分間カウントダウンし、5 分以内にファイルに変更がない場合、ファイル ハンドルは閉じられます。デフォルトは 5m] です。
Filebeat が送信ステータスを記録する方法:
ファイル ステータスをファイル (デフォルトでは /var/lib/filebeat/registry) に記録します。この状態は、Harvester コレクション ファイルのオフセットを記憶できます。ES などの出力デバイスが接続できない場合、filebeat は送信前に最後の行を記録し、接続できるようになると送信を続けます。Filebeat の実行中、Prospector の状態がメモリに記録されます。Filebeat が再起動すると、registry
記録された状態を使用して再構築し、再起動前の状態に復元します。各 Prospector は、見つかったファイルごとにステータスを記録し、Filebeat はファイルごとに、そのファイルが以前に収集されたかどうかを検出するための一意の識別子を保存します。
Filebeat がデータの正常な送信を確認する方法:
Filebeat がデータ損失なくイベントが設定された出力に少なくとも 1 回配信されることを確認できる理由は、filebeat が各イベントの配信ステータスをファイルに保存するためです。出力側によって確認されない場合、filebeat は応答を得るまで送信を試みます。送信中に filebeat が閉じられた場合、閉じる前にすべてのイベントが確認されません。filebeat が閉じる前に未確認のイベントは、filebeat が再起動された後に再送信されます。
これにより、少なくとも 1 回は確実に送信されますが、重複する可能性があります。shutdown_timeout
閉じる前にイベント応答を待機する時間は、パラメーターを設定することで設定できます(デフォルトでは無効)。
Logstash の動作メカニズム
Logstash イベント処理には、入力 → フィルター → 出力の 3 つの段階があります。ログを受信、処理、転送するためのツールです。システムログ、ウェブサーバーログ、エラーログ、アプリケーションログなどをサポートします。
入力: logstash にデータを入力します。
サポートされている入力タイプ:
ファイル: tail -f コマンドと同様に、ファイル システム内のファイルから読み取ります。
syslog: ポート 514 でシステム ログ メッセージをリッスンし、RFC3164 標準に従ってそれらを解析します。 redis:
redis サービスから
ビートを読み取ります: 読み取りファイルビートの読み取りから
フィルター: データを操作するためのデータ中間処理。
一般的に使用されるフィルターは次のとおりです。
grok: 任意のテキスト データを解析します。Grok は Logstash の最も重要なプラグインです。その主な機能は、
テキスト形式の文字列を特定の構造化データに変換し、正規表現で使用することです。120 を超える解析文法が組み込まれています。
mutate: フィールドを変換します。たとえば、フィールドの削除、置換、変更、名前変更などです。
drop: 一部のイベントを処理せずに削除します。
clone: イベントをコピーします。このプロセス中にフィールドを追加または削除することもできます。
geoip: 地理情報を追加します (フロント kibana グラフィカル表示用)
出力: 出力は、logstash 処理パイプラインの最終コンポーネントです。
イベントは処理中に複数の出力を通過できますが、すべての出力が実行されると、イベントはライフサイクルを完了します。
一般的な出力は次のとおりです。
elasticsearch: データを効率的に保存し、便利かつ簡単にクエリを実行できます。
ファイル: イベント データをファイルに保存します。
Graphite: イベント データを、非常に人気のあるオープン ソース ストレージのグラフィカル表示コンポーネントであるグラフィカル コンポーネントに送信します。
コーデック: コーデックは、入力および出力の一部として構成できるデータ フロー ベースのフィルターです。
コーデックを使用すると、送信されたシリアル化されたデータを簡単に分割できます。
一般的なコーデック:
json: json 形式を使用してデータをエンコード/デコードします。
multiline: 複数のイベントのデータを 1 行に要約します。例: Java 例外情報とスタック情報。
Logstash のインストール構成
192.168.116.141 マシンノードにインストールします。
①ダウンロードして解凍します。
下载:
cd /usr/local
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-linux-x86_64.tar.gz
解压:
tar -xvf logstash-7.10.2-linux-x86_64.tar.gz
2. データストレージとログディレクトリを作成します。
[root@localhost logstash-7.10.2]# mkdir -p /usr/local/logstash-7.10.2/data
[root@localhost logstash-7.10.2]# mkdir -p /usr/local/logstash-7.10.2/logs
3. 構成ファイルを変更します。
vi /usr/local/logstash-7.10.2/config/logstash.yml
設定内容:
# 数据存储路径
path.data: /usr/local/logstash-7.10.2/data
# 监听主机地址
http.host: "192.168.116.141"
# 日志存储路径
path.logs: /usr/local/logstash-7.10.2/logs
#启动监控插件
xpack.monitoring.enabled: true
#Elastic集群地址
xpack.monitoring.elasticsearch.hosts:
["http://192.168.116.140:9200","http://192.168.116.140:9201","http://192.168.116.140:9202"]
4. 監視構成ファイルを作成します。
vi /usr/local/logstash-7.10.2/config/logstash.conf
構成:
input {
beats {
# 监听端口
port => 5044
}
}
output {
stdout {
# 输出编码插件
codec => rubydebug
}
elasticsearch {
# 集群地址
hosts =>
["http://192.168.116.140:9200","http://192.168.116.140:9201","http://192.168
.116.140:9202"]
}
}
5. サービスを開始します。
root ユーザーとして実行します。
## 后台启动方式
nohup /usr/local/logstash-7.10.2/bin/logstash -f /usr/local/logstash-7.10.2/config/logstash.conf &
##前台启动
./logstash -f ../config/logstash.conf
正常に起動すると、次のログが表示されます。
[2020-10-15T06:57:40,640][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
アクセスアドレス: http://192.168.116.141:9600/ で、返された情報が表示されます。
Filebeat のインストール構成
es に直接接続することもできますが、logstash は一部のフィルタリングやその他の処理操作を実行できるため、一般的には logstash に接続することを選択します。192.168.116.141
マシン ノードで操作します:
ElasticSearch と同じバージョンをダウンロードして解凍します (バージョン 7.10.2 をダウンロードします)。 。
cd /usr/local
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz
tar -xvf filebeat-7.10.2-linux-x86_64.tar.gz
設定ファイルを変更する
vi /usr/local/filebeat-7.10.2/filebeat.yml
変更点:
## 后台启动
nohup /usr/local/filebeat-7.10.2/filebeat -e -c /usr/local/filebeat-7.10.2/filebeat.yml &
## 前台启动
./filebeat -e -c filebeat.yml
起動が成功すると、ログが表示されます:
/var/log/messages システム ログ情報を監視しています。ログが変更されると、filebeat は logstash を通じて Elasticsearch に報告します。クラスターのすべてのインデックス情報を表示できます:
http://192.168.116.140:9200/_cat/indices?v
logstash-2021.07.20-000001 という名前のインデックスが生成されていることがわかります。
Kibana の構成とデータの表示
Kibana の背景を入力して設定します:
http://192.168.116.140:5601
[管理] に入力 –> インデックス パターンに「logstash-*」と入力 --> [次のステップ] をクリックし、「@timestamp」を選択し、[
インデックスの作成] をクリックします。パターン]を作成します。
データの
表示 [Discover]を入力すると、収集されたデータを表示できます。
表示されない場合は、Time Rangeの時間範囲を再調整できます。