記事ディレクトリ
1 はじめに
Elasticsearch は、データ処理エコシステム内のオープンソースの分散型検索および分析エンジンであり、大量のデータを保存、取得、分析するために設計されています。これには、Elasticsearch でデータをエレガントに表示し、ユーザーがダッシュボード、チャート、レポートを作成できるようにするオープンソース データ視覚化プラットフォームであるKibanaが付属しています。ただし、完全なデータ フローの実現はそれだけではありません。Logstash はデータ処理の役割を果たし、データ処理のプロセス全体をより完全なものにします。これら 3 つのコンポーネントは、通常ELKと呼ばれるものを構成します。まずは Logstash の詳細な紹介から始めましょう。
1.1 Logstash とは何ですか?
Logstash は、リアルタイム パイプライン機能を備えたオープンソース データ収集エンジンとして、強力な機能を備えています。さまざまなソースからデータを収集し、動的に集約して、定義した仕様に従って変換したり、定義したターゲット アドレスに出力したりできます。
1.2 Logstash の主な機能
Logstash は、データを整理して多様化することで、さまざまな高度な下流分析および視覚化のユースケースに適したデータを作成します。さらに、Logstash は幅広い入力、フィルター、出力プラグインを提供し、多くのネイティブ コーデックによりデータ取り込みのプロセスがさらに簡素化されます。Logstash は、データの照合でもダウンストリーム アプリケーションへのプロビジョニングでも、強力で柔軟なソリューションです。Logstash の公式 Web サイト
から引用した写真は、彼の役割と機能をよりよく説明しています。
2. ダウンロードと設定
この記事では、 7.17 の最新バージョン7.17.12を使用します。7.x バージョンは、jdk8 をサポートする最後のバージョンでもあります。後続の 8.0 のデフォルトは jdk11 です。
2.1 ダウンロード
エラスティックダウンロード アドレスにログインし、製品Logstash を選択し、システムの選択 についてバージョン番号7.17.12を選択します。x86 アーキテクチャの Linux の場合は、ダウンロードするLINUX X86_64を選択します。Windows の場合は、WINDOWSを選択します。違いはありません。 2 つのシステム間で、start と の構成は似ているため、学習とテストには Windows バージョンを使用することをお勧めします。
2.2 ファイル構造
解凍後のファイルディレクトリは以下の通りです。
-
bin : このディレクトリには、Logstash の起動に使用される実行可能スクリプトが含まれています。たとえば、起動スクリプトですが、このスクリプトを実行することで Logstash を起動できます。
-
config : Logstashの設定ファイルを格納します。
-
data : データ ディレクトリは、内部状態情報や一時ファイルなどの Logstash の永続データを保存するために使用されます。
-
jdk : Logstash に必要な Java Development Kit (JDK) バージョンが含まれています。これは、実行時に Logstash に必要な Java 環境があることを保証するために Logstash に付属する特定の JDK バージョンです。
-
lib : このディレクトリには通常、Logstash の依存ライブラリとプラグインが含まれます。
-
logstash-coreおよびlogstash-core-plugin-api : これらのディレクトリには、Logstash コア機能とプラグイン API のコードが含まれています。Logstash コアはデータ処理パイプラインのコア ロジックを実装しており、開発者はプラグイン API を使用してカスタム プラグインを作成して Logstash の機能を拡張できます。
-
modules : modules ディレクトリには、ログやネットワーク トラフィックなどの特定の種類のデータを処理するための事前定義された Logstash モジュールがいくつか含まれています。これらのモジュールは構成を簡素化し、いくつかのデフォルト設定を提供します。
-
tools : このディレクトリには、Logstash のパフォーマンスの診断と最適化に使用できるパフォーマンス分析ツールなど、Logstash 用のいくつかのツールが含まれています。
-
ベンダー: このディレクトリには、Logstash に必要な依存ライブラリとプラグイン、およびその他のツールが含まれています。
-
x-pack : Elasticsearch、Kibana、Logstash、Beats の拡張機能スイートであり、一連のセキュリティ、モニタリング、アラート、機械学習、および Elastic Stack の機能を強化するために設計されたその他の高度な機能を提供します。
2.3 環境構成
Logstash では、 jdk を使用するために、環境変数のLS_JAVA_HOME変数を jdk ディレクトリを指すように構成することをお勧めします。jdk ディレクトリを構成する場合、Logstash の jdk ディレクトリを直接使用できるため、追加のダウンロードの必要がなく、バージョンが使用できなくなる可能性がある問題も発生しません。(7.17.12でサポートされているjdkバージョンはjdk8、jdk11、jdk15のみです)
バージョン 7.17.12 以前では、設定したJAVA_HOME環境変数の使用にも互換性があり、この変数のサポートは後でキャンセルされます。
3. Logstash の 3 つのコア コンポーネント
Logstash パイプラインには、2 つの必須要素input
(ソース データの収集) とoutput
(出力データ)、および 1 つのオプションの要素filter
(データのフォーマット) があります。ソース データの 3 つのプラグインと Elasticsearch の関係は次のとおりです。
3.1 入力
input
さまざまなデータ ソースからデータを収集するためのプラグインまたは構成セクションです。input
プラグインを使用すると、データ入力ソースを定義し、後続の処理のためにデータを Logstash に送信できます。Logstash は、さまざまなタイプの入力プラグインをサポートしており、それぞれが異なるデータ ソース タイプに適しています。一般的に使用されるのは次のとおりです。
- file : ファイルからソースデータを読み取ります
- github : github が提供するネットワークからソースデータを読み取ります
- http : http/https 経由でデータを受信します
- jdbc : jdbc ドライバーを介してデータを読み取ります
詳しいプラグインはLogstash公式サイトでご覧いただけます。
3.2 フィルター
filter
これは、入力データの処理、変換、フィルタリングに使用される部分です。filter
プラグインを使用すると、データが Logstash に入った後 (入力処理後)、データのクリーニング、解析、標準化などの特定のニーズを満たすために、データに対してさまざまな操作を実行できます。Logstash は、さまざまなデータ処理のニーズに適したいくつかのタイプの「フィルター」プラグインをサポートしています。一般的な Logstash の「フィルター」プラグインをいくつか示します。
- csv : カンマ区切り値データを単一フィールドに解析します。
- クローン: 複製イベント
- date : イベントの Logstash タイムスタンプとして使用する解析済みフィールドの日付
- grok : 非構造化イベント データをフィールドに解析します。
詳細なプラグインはLogstash 公式 Web サイトで確認できます
3.3 出力
output
処理されたデータをさまざまな宛先に送信するためのプラグインまたは構成セクションです。output
プラグインを使用すると、データ出力の宛先を定義し、Logstash で処理されたデータをこれらの宛先に転送できます。Logstash は、さまざまなデータ ストレージ、送信、または処理のニーズに適したいくつかのタイプの出力プラグインをサポートしています。以下に、一般的な Logstash の「出力」プラグインをいくつか示します。
- elasticsearch : elasticsearch に保存します
- email : 出力を受信したら、指定されたアドレスに電子メールを送信します
- ファイル: ファイルに保存
- mongodb : mongodb にデータを書き込みます。
詳細なプラグインはLogstash の公式 Web サイトで見つけることができます。
4. 実践演習: Hello World の例
4.1 Logstash の起動方法
logstash を起動するのは比較的簡単で、 bin ディレクトリでlogstash (linxu) またはlogstash.bat (windows)を実行するだけです。
# linux启动命令
./bin/logstash
# windows启动命令
.\bin\logstash.bat
4.2 よく使用される設定ファイルの詳細説明
例を作成する前に、重要な構成ファイルを理解する必要があります。
- logstash.yml : Logstash のメイン構成ファイルであり、Logstash のグローバル設定とオプションが含まれています。このファイルでは、ネットワーク設定、パス、ログ設定などのさまざまなグローバル パラメーターを構成できます。このファイルは、Logstash の全体的な動作に影響を与える可能性があります。
一般的な構成項目には次のものがあります。
Pipeline.batch.size: バッチごとに処理されるイベントの数を指定します。
Pipeline.batch.lay: 各バッチ間の遅延を指定します。
path.data: Logstash データのストレージ パスを指定します。
http.host: HTTP リスニングのホスト名を指定します。
http.port: HTTP リスニング用のポート番号を指定します。
Pipeline.workers: イベントを並行して処理するワーカー スレッドの数を指定します。
queue.type: キューのストレージ タイプ、オプションのメモリ (メモリ) および永続的 (永続的) を指定します。
- Pipelines.yml : Logstash データ処理パイプラインを構成および管理するための構成ファイル。Logstash は、入力、フィルター、出力の独自の構成を持つ複数のデータ処理パイプラインを同時に実行できます。
- jvm.options : Logstash JVM (Java 仮想マシン) オプションを構成するために使用されるファイルです。このファイルは Logstash のパフォーマンスとリソース割り当てに影響します。このファイルでは、ヒープ メモリ サイズ、ガベージ コレクション オプションなどを設定できます。
一般的な構成項目には次のものがあります。
-Xmx: Java ヒープ メモリの最大値を指定します。
-Xms: Javaヒープメモリの初期値を指定します。
-XX:+UseConcMarkSoupGC: CMS (Concurrent Mark-Sweet) ガベージ コレクターを使用するように指定します。
-Djava.io.tmpdir: 一時ファイルの保存パスを指定します。
- logstash-sample.conf : データの入力、フィルタリング、出力を構成する方法を示すために使用されるサンプル Logstash 構成ファイルです。このファイルには、完全な Logstash データ処理パイプラインを構築する方法を理解するのに役立つさまざまなプラグインの構成例が含まれています。
4.3 「Hello World」サンプルの作成と実行
logstashのルートディレクトリで実行します。
# windows执行
.\bin\logstash.bat -e "input { stdin { } } output { stdout {} }"
#linux执行
bin/logstash -e 'input { stdin { } } output { stdout {} }'
Logstash を起動した後、それが表示されるまで待ち][main] Pipeline started {"pipeline.id"=>"main"}
、コマンド プロンプトで「hello world」と入力します。
4.4 -f パラメータを使用して、起動する構成ファイルを指定します
上記の例では、パラメーターを使用して直接開始し、続いてパイプライン構成を開始しますが、パラメーターを使用して開始する構成ファイルを指定すること-e
もできます。-f
次のディレクトリにファイルを作成しますhello.conf
。ファイルの内容は次のとおりです。
input { stdin { } }
output { stdout { } }
次に起動コマンドを実行します
# windows执行
.\bin\logstash.bat -f hello.conf
#linux执行
bin/logstash -f hello.conf
4.5 パイプラインでの起動の構成
config ディレクトリ内の Pipelines.yml ファイルを開き、次のように入力します。
- pipeline.id: hello
pipeline.workers: 1
pipeline.batch.size: 1
config.string: "input { stdin { } } output { stdout {} }"
パイプライン処理ルールを直接構成する代わりに、作成したばかりの hello.conf ファイルを指定することもできます。
- pipeline.id: hello
pipeline.workers: 1
pipeline.batch.size: 1
path.config: "/usr/local/logstash/hello.conf"
ファイルを保存した後、次を実行します。
# windows执行
.\bin\logstash.bat
#linux执行
bin/logstash
5. 実戦: MySQL データの時限ローリング同期
5.1 環境とデータの準備
5.1.1 データベースの準備
mysqlのテーブル構造とテストデータを事前に準備する必要があります。
# 建表语句
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(255) DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`update_time` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 插入数据
insert into test (content,status,update_time) VALUES ("aaa",1,UNIX_TIMESTAMP());
insert into test (content,status,update_time) VALUES ("bbb",1,UNIX_TIMESTAMP());
insert into test (content,status,update_time) VALUES ("ccc",2,UNIX_TIMESTAMP());
insert into test (content,status,update_time) VALUES ("ddd",1,UNIX_TIMESTAMP());
5.1.2 elasticsearchとkibanaの起動
elasticsearchとkibanaを開始する必要があり、インデックスの自動作成を許可するには elasticsearch を有効にする必要があります。有効になっていない場合は、事前にインデックスを作成する必要があります
5.1.3 mysql jar をインポートする
logstash ルート ディレクトリの下にmylibディレクトリを作成し、Java を mysql に接続する jar ファイルを保存します。次に例を示します。mysql-connector-java-8.0.27.jar
5.2 スクリプトの作成
5.2.1 ID に応じたデータのスクロールと同期
要件:テスト テーブルの IDに従って小から大まで毎分実行し、ステータスが 1 に等しい場合は elasticsearch に保存します。各実行の数は 2 です。mysql-by-id-to-es.conf
を作成します。 logstash ディレクトリ下のファイルとファイルの内容:
input {
jdbc {
jdbc_driver_library => "./mylib/mysql-connector-java-8.0.27.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
jdbc_user => "root"
jdbc_password => "123456"
parameters => { "myStatus" => 1 }
schedule => "* * * * *"
statement => "SELECT id,content,status,update_time FROM test WHERE status = :myStatus AND id > :sql_last_value ORDER BY id ASC LIMIT 2"
last_run_metadata_path => "mysql-by-id-to-es.index"
tracking_column => "id"
use_column_value => true
tracking_column_type => "numeric"
}
}
filter {
mutate { add_field => { "from" => "logstash" } }
}
output {
elasticsearch {
index => "test-by-id-%{+YYYY.MM}"
}
stdout {
}
}
ファイルの内容を保存し、 logstash ルート ディレクトリで-f
起動コマンドを実行します。
# windows执行
.\bin\logstash.bat -f mysql-by-id-to-es.conf
# linux执行
./bin/logstash.bat -f mysql-by-id-to-es.conf
コンソールの印刷情報:
kibana に移動して実行し、データを表示します。
1. まず実行して、test-by-idで始まるインデックスが保存されているGET _cat/indices?v
かどうかを確認します。
2. インデックスが存在する場合は、ステートメントを実行してデータを表示しますGET test-by-id-2023.08/_search{ "query": {"match_all": {}}}
。ステータスが 2 のレコードが入力されていないことがわかります。
{
"_index" : "test-by-id-2023.08",
"_type" : "_doc",
"_id" : "FsWU74kBjZ5FwUtCTy7a",
"_score" : 1.0,
"_source" : {
"update_time" : 1691939803,
"@version" : "1",
"content" : "aaa",
"@timestamp" : "2023-08-13T15:47:01.008Z",
"status" : 1,
"id" : 1,
"from" : "logstash"
}
},
{
"_index" : "test-by-id-2023.08",
"_type" : "_doc",
"_id" : "FcWU74kBjZ5FwUtCTy7a",
"_score" : 1.0,
"_source" : {
"update_time" : 1691939803,
"@version" : "1",
"content" : "bbb",
"@timestamp" : "2023-08-13T15:47:01.020Z",
"status" : 1,
"id" : 2,
"from" : "logstash"
}
},
{
"_index" : "test-by-id-2023.08",
"_type" : "_doc",
"_id" : "F8WV74kBjZ5FwUtCNS6W",
"_score" : 1.0,
"_source" : {
"update_time" : 1691939803,
"@version" : "1",
"content" : "ddd",
"@timestamp" : "2023-08-13T15:48:00.413Z",
"status" : 1,
"id" : 4,
"from" : "logstash"
}
}
5.2.2 更新時間に応じたデータのローリングと同期
データの更新時刻を入力する場合は、新しい ** mysql-by-uptime-to-es.confファイルを作成します。ファイルの内容は次のとおりです。
input {
jdbc {
jdbc_driver_library => ",/mylib/mysql-connector-java-8.0.27.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
jdbc_user => "root"
jdbc_password => "123456"
parameters => { "myStatus" => 1 }
schedule => "* * * * *"
statement => "SELECT id,content,status,update_time FROM test WHERE status = :myStatus AND update_time > :sql_last_value"
last_run_metadata_path => "mysql-by-uptime-to-es.index"
}
}
filter {
mutate { add_field => { "from" => "logstash" } }
}
output {
elasticsearch {
index => "test-by-uptime-%{+YYYY.MM}"
}
stdout {
}
}
ファイルを保存し、起動してデータを表示します。前の 5.2.1 を参照してください。
5.3 設定パラメータの詳細説明
- jdbc_driver_library : JDBC ドライバーへのパスを指定します。JDBC ドライバーは、特定の種類のデータベースと通信するためのライブラリです。Logstash が JDBC ドライバーをロードして使用できるように、JDBC ドライバーへのパスを提供する必要があります。
- jdbc_driver_class : JDBC ドライバーの Java クラス名を指定します。このクラス名は、データベースへの接続にどの特定の JDBC ドライバーを使用するかを Logstash に指示します。
- jdbc_connection_string : データベースとの接続を確立するための接続文字列を指定します。この文字列には、データベースの場所、ポート、データベース名などの情報が含まれます。
- jdbc_user : データベースへの接続に必要なユーザー名を指定します。
- jdbc_password : データベースへの接続に必要なパスワードを指定します。
- パラメータ: この構成を使用すると、接続文字列で渡されるカスタム JDBC 接続パラメータを指定できます。これには、SSL 構成、文字セットなどのオプションが含まれる場合があります。
- スケジュール: データベースからデータを抽出するためのスケジュール スケジュールを指定します。cron 式を使用して、データ抽出の間隔を定義します。
例:
- 5 * 1 ~ 3 * は、5 月から <> まで毎日午前 <> に実行されます。
0 * * * * は毎日毎時 0 分に実行されます。
0 6 * * * アメリカ/シカゴは毎日午前 6:00 (UTC/GMT -5) に実行されます。
- ステートメント: この構成では、データベースからデータを抽出するための SQL クエリを定義します。ここにカスタム SQL クエリを記述して、必要なデータを選択できます。
- last_run_metadata_path : 最後の実行のメタデータを保存するファイル パスを指定します。これにより、Logstash は最後にデータ ポンプがいつ行われたかを追跡し、最後にポンプを行った場所から継続できるようになります。
- tracking_columnおよびuse_column_value : これら 2 つの構成は、増分抽出の列を識別するために一緒に使用されます。
tracking_column
増分抽出時に追跡する列の名前を指定し、use_column_value
列の値を追跡フラグとして使用するかどうかを示します。 - tracking_column_type : 追跡列のデータ型を指定します。これは、日付時刻、数値などのさまざまなデータ型をサポートするために使用される追跡列です。現在、
numeric
とのみがサポートされておりtimestamp
、デフォルトは ですtimestamp
。 - add_field : 属性を追加し、デフォルト値を指定します。
- elasticsearch : elasticsearch への出力。一般的に使用される構成は次のとおりです。
elasticsearch {
# 配置es地址,有多个使用逗号隔开,不填默认就是 localhost:9200
hosts => ["localhost:9200"]
# 配置索引
index => "test-by-uptime-%{+YYYY.MM}"
# 配置账号和密码,默认不填
user => "elastic"
password => "123456"
}
6. まとめ
この記事では、Logstash のコア コンポーネントと機能を詳細に紹介し、ダウンロードとインストールから最初の Hello World サンプルの作成、そして MySQL データの Elasticsearch への同期までの完全なプロセスをカバーします。このチュートリアルが Logstash を学びマスターするための重要な参考資料となれば幸いです。