このトピックでは、さまざまなデータソースから Alibaba Cloud Elasticsearch クラスタにデータを収集して送信するために使用される方法について説明します。
背景情報
Elasticsearch は、データ検索と分析に広く使用されています。開発者とコミュニティは、幅広いシナリオで Elasticsearch を使用しています。これらのシナリオには、アプリケーション検索、ウェブサイト検索、ロギング、インフラストラクチャ監視、アプリケーションパフォーマンス監視 (APM)、セキュリティ分析などがあります。これらのシナリオのソリューションは無償で提供されています。ただし、開発者がこれらのソリューションを使用する前に、必要なデータを Elasticsearch にインポートする必要があります。
Elasticsearch は、クライアントアプリケーションと通信するための柔軟な RESTful API を提供します。この RESTful API を呼び出して、データの収集、検索、分析を行うことができます。また、API を使用して、Elasticsearch クラスタとクラスタ上のインデックスを管理することもできます。
Elastic Beats
Elastic Beats は、Elasticsearch にデータを転送できる軽量のデータシッパーのセットで構成されています。これらのシッパーは、多くのランタイムオーバーヘッドを発生させません。 Beats は、十分なハードウェアリソースを持たないデバイスで実行してデータを収集できます。これらのデバイスには、IoT デバイス、エッジデバイス、または組み込みデバイスが含まれます。データを収集したいが、リソースを大量に消費するデータシッパーを実行するのに十分なリソースがない場合は、Beats を使用することをお勧めします。 Beats によってすべてのインターネット接続デバイスから収集されたデータに基づいて、システムエラーやセキュリティ問題などの例外を迅速に特定できます。その後、これらの例外に対処するための対策を講じることができます。
Beats は、十分なハードウェアリソースを持つシステムでも使用できます。
- Filebeat
Filebeat は、ファイルからデータを読み取り、前処理し、転送するために使用できます。ほとんどの場合、Filebeat を使用してログファイルからデータを読み取ることができます。 Filebeat は、非バイナリファイルからデータを読み取るためにも使用できます。 Filebeat を使用して、TCP、UDP、コンテナ、Redis、syslog などの他のデータソースからデータを読み取ることができます。さまざまなモジュールに基づいて、Filebeat は、Apache、MySQL、Kafka などの一般的なアプリケーションのログを収集するための簡単な方法を提供します。次に、Filebeat はログを解析して必要なデータを取得します。
- Metricbeat
Metricbeat は、システムメトリックとサービスメトリックを収集して前処理するために使用できます。システムメトリックには、実行中のプロセス、CPU 使用率、メモリ使用量、ディスク使用量、ネットワーク使用量に関する情報が含まれます。さまざまなモジュールに基づいて、Metricbeat を使用して、Kafka、Palo Alto Networks、Redis などのさまざまなサービスからデータを収集できます。
- Packetbeat
Packetbeat は、リアルタイムのネットワークデータを収集して前処理するために使用できます。 Packetbeat は、セキュリティ分析、アプリケーション監視、パフォーマンス分析に使用できます。 Packetbeat は、DHCP、DNS、HTTP、MongoDB、NFS、TLS プロトコルをサポートしています。
- Winlogbeat
Winlogbeat は、Windows オペレーティングシステムからイベントログをキャプチャするために使用できます。イベントログには、アプリケーション、ハードウェア、セキュリティ、システムイベントが含まれます。
- Auditbeat
Auditbeat は、重要なファイルへの変更を検出し、Linux 監査フレームワークから監査イベントを収集するために使用できます。ほとんどの場合、Auditbeat はセキュリティ分析に使用されます。
- Heartbeat
Heartbeat は、プローブによってシステムとサービスの可用性をチェックするために使用できます。 Heartbeat は、インフラストラクチャ監視やセキュリティ分析など、多くのシナリオに適用されます。 Heartbeat は、ICMP、TCP、HTTP をサポートしています。
- Functionbeat
Functionbeat は、AWS Lambda などのサーバーレス環境からログとメトリックを収集するために使用できます。
Metricbeat の使用方法の詳細については、「セルフマネージド Metricbeat を使用してシステムメトリックを収集する」をご参照ください。他のシッパーも同様の方法で使用します。
Logstash
Logstash は、あらゆる種類のデータを読み取り、処理し、転送するために使用される強力で柔軟なツールです。 Logstash はさまざまな機能を提供し、デバイスのパフォーマンスに高い要件があります。 Beats は、Logstash によって提供される一部の機能をサポートしていないか、一部の機能に Beats を使用するとコストがかかります。たとえば、外部データソースでデータを検索してドキュメントをエンリッチするために Beats を使用するとコストがかかります。 Logstash は、Beats よりもハードウェアリソースの要件が高くなります。したがって、Logstash は、ハードウェアリソースが最小要件を満たすことができないデバイスにデプロイすることはできません。 Beats が特定のシナリオに適していない場合は、代わりに Logstash を使用してください。
ほとんどの場合、Beats と Logstash は連携して動作します。具体的には、Beats を使用してデータを収集し、Logstash を使用してデータを処理します。
Alibaba Cloud Elasticsearch は Logstash サービスを統合しています。 Alibaba Cloud Logstash は、サーバー側のデータ処理パイプラインです。オープンソースの Logstash のすべての機能と互換性があります。 Alibaba Cloud Logstash を使用して、複数のデータソースから同時にデータを動的に収集し、収集したデータを指定の場所に転送して保存できます。 Alibaba Cloud Logstash を使用して、入力、フィルタ、出力プラグインを使用して、あらゆる種類のイベントを処理および変換できます。
- 入力プラグイン
入力プラグインは、さまざまなデータソースからデータを読み取るために使用できます。サポートされているデータソースには、ファイル、HTTP、IMAP、JDBC、Kafka、syslog、TCP、UDP などがあります。
- フィルタプラグイン
フィルタプラグインは、複数の方法を使用してデータを処理およびエンリッチできます。ほとんどの場合、フィルタプラグインは最初に非構造化ログデータを解析し、データを構造化データに変換します。 Logstash は、Grok フィルタプラグインを提供して、正規表現、CSV データ、JSON データ、キーと値のペア、区切り文字で区切られた非構造化データ、複雑な非構造化データを解析します。 Logstash は、データをエンリッチするための他のフィルタプラグインも提供します。プラグインは、DNS レコードのクエリ、IP アドレスの場所の追加、カスタムディレクトリまたはElasticsearch インデックスの検索に使用されます。mutateなどの追加のフィルタプラグインを使用すると、さまざまなデータ変換を実行できます。たとえば、データフィールドと値の名前変更、削除、コピーを行うことができます。
- 出力プラグイン
出力プラグインは、解析およびエンリッチされたデータをデータシンクに書き込むために使用できます。これらのプラグインは、Logstash パイプラインの最終段階で使用されます。複数種類の出力プラグインが利用可能です。ただし、このトピックでは、Elasticsearch 出力プラグインに焦点を当てています。このプラグインを使用して、さまざまなデータソースから収集されたデータを Elasticsearch クラスタに送信できます。
- Elastic Blogs RSS フィードを読み取ります。
- フィールドのコピーまたは名前変更、特殊文字と HTML タグの削除によってデータを前処理します。
- データを Elasticsearch に送信します。
- Logstash パイプラインを設定します。
input { rss { // RSS フィードの URL を設定します。 url => "/blog/feed" // RSS フィードをチェックする間隔を秒単位で設定します。 interval => 120 } } filter { mutate { // message フィールドの名前を blog_html に変更します。 rename => [ "message", "blog_html" ] // blog_html フィールドを blog_text フィールドにコピーします。 copy => { "blog_html" => "blog_text" } // published フィールドを @timestamp フィールドにコピーします。 copy => { "published" => "@timestamp" } } mutate { // blog_text フィールドから HTML タグ、改行文字、タブ文字を削除します。 gsub => [ "blog_text", "<.*?>", "", "blog_text", "[\n\t]", " " ] // published フィールドと author フィールドを削除します。 remove_field => [ "published", "author" ] } } output { stdout { codec => dots } elasticsearch { // Elasticsearch クラスタのホストを設定します。 hosts => [ "https://<your-elsaticsearch-url>" ] // Elasticsearch インデックスを設定します。 index => "elastic_blog" // Elasticsearch クラスタにアクセスするためのユーザー名を設定します。 user => "elastic" // Elasticsearch クラスタにアクセスするためのパスワードを設定します。 password => "<your-elasticsearch-password>" } }hostsを<Elasticsearch クラスターの内部エンドポイント>:9200の形式の値に設定します。passwordを Elasticsearch クラスターへのアクセスに使用するパスワードに設定します。 - Kibana コンソールで、移行されたインデックスデータを表示します。
// elastic_blog インデックスを検索します。 POST elastic_blog/_search詳細については、「手順 3: 同期結果を表示する」をご参照ください。
クライアント
Elasticsearch クライアントを使用して、データ収集コードを調整されたアプリケーションコードと統合できます。これらのクライアントは、データ収集の低レベルの詳細を抽象化するライブラリです。これらを使用すると、アプリケーションに関連する特定の操作に集中できます。 Elasticsearch は、Java、JavaScript、Go、.NET、PHP、Perl、Python、Ruby などのクライアント用の複数のプログラミング言語をサポートしています。プログラミング言語、選択した言語の詳細とサンプルコードについては、「Elasticsearch クライアント」をご参照ください。
アプリケーションのプログラミング言語が上記のサポートされている言語に含まれていない場合は、「コミュニティ提供クライアント」から必要な情報を取得してください。
Kibana
// my_first_index インデックスにドキュメントを追加します。
PUT my_first_index/_doc/1
{
"title" :"How to Ingest Into Elasticsearch Service",
"date" :"2019-08-15T14:12:12",
"description" :"This is an overview article about the various ways to ingest into Elasticsearch Service"
}まとめ
- Beats データシッパーは便利で軽量であり、すぐに使用できます。これらを使用して、さまざまなデータソースからデータを収集できます。 Beats にパッケージされているモジュールは、多くの一般的なデータベース、オペレーティングシステム、コンテナ、Web サーバー、キャッシュのデータ取得、解析、インデックス作成、視覚化の構成を提供します。これらのモジュールを使用すると、5 分以内にデータのダッシュボードを作成できます。 Beats データシッパーは、IoT デバイスやファイアウォールなど、十分なリソースを持たない組み込みデバイスに最適です。
- Logstash は、データを読み取り、変換し、転送するための柔軟なツールです。さまざまな入力、フィルタ、出力プラグインを提供します。 Beats が特定のシナリオの要件を満たすことができない場合は、Beats を使用してデータを収集し、Logstash を使用してデータを処理してから、処理されたデータを Elasticsearch に転送できます。
- アプリケーションからデータを収集するには、オープンソースの Elasticsearch でサポートされているクライアントを使用することをお勧めします。
- Elasticsearch リクエストを開発またはデバッグするには、Kibana を使用することをお勧めします。