Logstash は、データソースからデータを動的に取り込むことができるオープンソースのデータ取り込みエンジンです。 Logstash では、カスタムルールを使用して、さまざまなデータソースから取り込まれたデータをフィルタリングし、そのデータをターゲットサービスに出力できます。 このトピックでは、Elastic Compute Service (ECS) に Logstash をデプロイする方法について説明し、Logstash から Alibaba Cloud Elasticsearch (ES) にデータを移行する例を示します。

前提条件

Logstash をデプロイして使用する前に、Alibaba Cloud ECS インスタンスと Elasticsearch インスタンスを作成し、設定する必要があります。

Alibaba Cloud Elasticsearch インスタンスの作成と設定
  1. Alibaba Cloud Elasticsearch インスタンスの作成を実行します。

    この例では、Elasticsearch インスタンスのバージョンは V6.7.0 です。 次の図に Elasticsearch インスタンスの設定を示します。

    Elasticsearch 設定
  2. Alibaba Cloud Elasticsearch コンソールにログインし、自動インデックスを有効化します。
  3. Elasticsearch インスタンスの Kibana コンソールにログインし、読み書き権限が付与されているロールを追加します。logstash-*
    1. Kibana コンソールへのログインを行います。
    2. [Management] > [Roles] > [Create role] を選択します。
      ロールの作成
    3. [Create role] ページで、関連するパラメーターを設定します。
      パラメーター
      パラメーター 説明
      Role name ロールの名前。
      Indices 移行するインデックスファイル。 logstash-* を入力します。
      Privileges ロールに付与する権限。 read、write、create、delete、create_index 権限を追加します。
      Granted fields ロールがアクセスできるフィールド。 このパラメーターはオプションです。 この例では、* を入力します。
    4. [Create role] をクリックしてロールを作成します。
Alibaba Cloud ECS インスタンスの作成と設定
  1. 手順 2: インスタンスの作成を実行します。 ECS インスタンスが Logstash インスタンスと Elasticsearch インスタンスにアクセスできることを確認してください。 要件を満たす購入済み ECS インスタンスを使用することもできます。

    次の図に ECS インスタンスの設定を示します。

    ECS 設定
    Elasticsearch インスタンスと同じゾーンかつ同じ VPC ネットワークの ECS インスタンスを購入することを推奨します。 クラシックネットワークに接続された ECS インスタンスを購入することもできます。 ただし、クラシックネットワークが Elasticsearch インスタンスの VPC ネットワークに接続されていることを最初に確認する必要があります。
  2. ECS インスタンスに JDK をインストールします。 JDK のバージョンは、V1.8 以降でなければなりません。

    JDK をインストールする方法の詳細については、「JDK のインストール」をご参照ください。

Logstash のインストール

  1. Logstash V6.7.0 をダウンロードします。
    公式 Elasticsearch Web サイトにアクセスし、Elasticsearch バージョンと同じバージョンの Logstash をダウンロードします。 Logstash V6.7.0 をダウンロードすることを推奨します。
    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.tar.gz
  2. Logstash パッケージを解凍します。
    tar -xzvf logstash-6.7.0.tar.gz

Logstash での増分データの同期

  1. ECS インスタンスに接続してから、Logstash ディレクトリに切り替えます。
    cd logstash-6.7.0
  2. test という名前の .conf ファイルを作成します。
    touch test.conf
  3. test.conf ファイルを設定します。 以下に例を示します。
    input {
        file {
            path => "/your/file/path/xxx"
            }
    }
    filter {
    }
    output {
      elasticsearch {
        hosts => ["http://instanceId.elasticsearch.aliyuncs.com:9200"]
        user => "user-name"
        password => "logstash-password"
      }
    }
    パラメーター 説明
    path ログファイルのパス。 この例では、パスは /var/log/meaasges です。
    hosts Elasticsearch インスタンスのエンドポイント。 instanceId を Elasticsearch インスタンスの ID に置き換えます。 Elasticsearch インスタンスの [基本情報] ページでインスタンス ID を確認できます。 例:http://es-cn-45xxxxxxxxxxxxju.elasticsearch.aliyuncs.com:9200
    user Elasticsearch インスタンスのユーザー名。 デフォルトのユーザー名は、elastic です。 カスタムアカウントを使用する場合、まずアカウントのロールを作成し、そのロールに必要な権限を付与する必要があります。 詳細については、「ユーザーの作成」と「ロールの作成」をご参照ください。
    重要 ユーザー名は、二重引用符 (") のペアで囲む必要があります。 これにより、Logstash の起動時にユーザー名に含まれる特殊文字が原因で発生するエラーを回避できます。
    password Elasticsearch インスタンスのパスワード。 パスワードは、二重引用符 (") のペアで囲む必要があります。 Elasticsearch インスタンスの作成後にパスワードを変更することもできます。
    重要 パスワードは、二重引用符 (") のペアで囲む必要があります。 これにより、Logstash の起動時にパスワードに含まれる特殊文字が原因で発生するエラーを回避できます。

    Logstash には、さまざまな入力、フィルター、出力のブラグインがあります。 これらのプラグインは、データの簡単な取り込み、変換、出力に役立ちます。 詳細については、「設定ファイルの構造」をご参照ください。

  4. logstash コマンドを実行します。
    手順 3 に従って、.conf ファイルを設定し、logstash コマンドを実行します。
    bin/logstash -f test.conf

    コマンドが実行されると、システムは自動的に Logstash を使用してログファイルから新しいコンテンツを取り込み、Elasticsearch インスタンスに出力します。 Logstash は、ログファイル内の変更を Elasticsearch インスタンスにインデックス付けします。

  5. 結果を確認します。

    同期結果を確認する前に、ロールを作成し、logstash-* インデックスの管理をロールに許可する必要があります。 必要な権限は、read、write、create、delete、create_index です。 詳細については、「ロールの作成」をご参照ください。

    1. Elasticsearch インスタンスの Kibana コンソールにログインします
    2. 左側のナビゲーションペインで、[Dev Tools] を選択します。
    3. [Dev Tools] ページの [Console] タブで、次のコマンドを実行します。
      GET /logstash-*/_search

      コマンドの実行後、次の結果が返されます。

      返される結果

Logstash ノードのモニタリング

Logstash ノードをモニタリングし、モニタリングデータを収集するには、次の手順に従います。
  1. Logstash ディレクトリの config フォルダーに切り替えます。
    cd /logstash-6.7.0/config
  2. logstash.yml ファイルを設定します。

    logstash.yml ファイルを開きます。

    vim logstash.yml

    logstash.yml ファイルの次のパラメーターの注釈を削除し、これらのパラメーターに値を割り当てます。

    X-Pack モニタリングの設定
    パラメーター 説明
    xpack.monitoring.enable このパラメーターを true に設定します。 デフォルト値は false です。
    xpack.monitoring.elasticsearch.username Logstash をモニタリングするユーザーを作成します。 詳細については、「ユーザーの作成」をご参照ください。
    重要 elastic アカウントを使用することもできます。 ただし、システムのセキュリティリスクが生じる可能性があるため、本番環境では elastic アカウントを使用しないことを推奨します。
    xpack.monitoring.elasticsearch.password Logstash のモニタリングに使用されるユーザーのパスワード。
    xpack.monitoring.elasticsearch.hosts Elasticsearch インスタンスのエンドポイント。 例:http://es-cn-45xxxxxxxxxxxxju.elasticsearch.aliyuncs.com:9200
  3. Logstash のディレクトリに戻り、Logstash サービスを起動します。
    cd ../
    bin/logstash -f test.conf

    Logstash の起動後、次の結果が返されます。

    Logstash 起動
  4. Elasticsearch インスタンスの Kibana コンソールにログインします。 左側のナビゲーションペインで [Monitoring] を選択して、Logstash モニタリングデータを表示します。
    Logstash モニタリングデータの表示

ユーザーの作成

このセクションでは、CLI または Kibana コンソールから Logstash をモニタリングするユーザーの作成方法について説明します。
重要 デフォルトでは、logstash_system ユーザーは無効化されているので、logstash_system ユーザーを作成できません。 したがって、ogstash_system ロールを引き受けるユーザーを作成する必要があります。

CLI でのユーザーの作成

ECS インスタンスに接続し、次のコマンドを実行してユーザーを作成します。
curl -u elastic:es-password -XPOST http://instanceId.elasticsearch.aliyuncs.com:9200/_xpack/security/user/logstash_system_monitor -d '{"password" : "logstash-monitor-password","roles" : ["logstash_system"],"full_name" : "your full name"}'
パラメーター 説明
es-password Elasticsearch インスタンスのパスワード。 このパスワードは、Kibana コンソールへのログインにも使用されます。
instanceId Elasticsearch インスタンスの ID。 Elasticsearch インスタンスの [基本情報] ページでインスタンス ID を確認できます。
logstash-monitor-password logstash_system_monitor ユーザーのパスワード。
your full name ユーザーのフルネーム。

ユーザーが作成されると、次の結果が返されます。

作成されたユーザー

Kibana コンソールでのユーザーの作成

  1. Kibana コンソールへのログインを行います。
  2. [Management] > [Users] > [Create new user] を選択します。
    ユーザーの作成
  3. [New user] ページで、ユーザー情報を入力します。
    新しいユーザー
    パラメーター 説明
    Username ユーザーの名前。 カスタム名を入力することができます。 このセクションでは、ユーザー logstash_system_monitor を作成して、Logstash をモニタリングします。
    Password ユーザーのパスワード。
    Confirm password 確認用のパスワードをもう一度入力します。
    Full name ユーザーのフルネーム。 このパラメーターはオプションです。
    Email address ユーザーのメールアドレス。 このパラメーターはオプションです。
    Roles ユーザーが引き受けるロール。 logstash_system ロールを指定します。
  4. [Create user] をクリックして、ユーザーを作成します。

FAQ

  • Q:Logstash を使用して Elasticsearch にデータを出力する前に、Elasticsearch インスタンスの自動インデックスを有効にする必要があるのはなぜですか。

    A:データのセキュリティを確保するため、Alibaba Cloud Elasticsearch はデフォルトで自動インデックスを無効にしています。

    Logstash は Create index 操作を呼び出さずに、データを Elasticsearch に送信します。 その後、Elasticsearch はデータに自動的にインデックスを付けます。 したがって、Logstash を使用してデータを Elasticsearch に出力する前に、Elasticsearch インスタンスの自動インデックスを有効にする必要があります。自動インデックスの有効化
    重要 自動インデックスを有効にし、操作を確定すると、Elasticsearch インスタンスは再起動されます。 操作を確定する前に、インスタンスで実行されているワークロードが悪影響を受けないことを確認してください。
  • Q:インデックスを作成する権限がないというメッセージが表示された場合、どうすればよいですか。

    システムプロンプト

    A:データの受信に使用される Elasticsearch アカウントのロールを確認する必要があります。 ロールに writedeletecreate_index 権限があることを確認してください。

  • Q:メモリ不足のエラーを解決するにはどうすればよいですか。

    メモリ不足

    A:デフォルトでは、1 GB のメモリが Logstash に割り当てられています。 購入した ECS インスタンスに Logstash 用のメモリが不足している場合、config/jvm.options を変更して Logstash に割り当てられるメモリ量を減らします。

  • Q:Logstash コマンドの実行時に次のエラーが発生します。このエラーを解決するにはどうすればよいですか。

    エラー

    A:test.conf ファイル内のユーザー名とパスワードに特殊文字が含まれていないことを確認する必要があります。 ユーザー名かパスワードに特殊文字が含まれている場合、二重引用符 (") のペアで囲む必要があります。