Logstashを介してApacheログをOpenSearchに転送する方法

紹介

有効なウェブサーバーログ管理は、ウェブサイトのパフォーマンスを维持し、問題解決を助け、ユーザーの行動についての洞察を得るために非常に重要です。Apacheは最も人気のあるウェブサーバーの1つです。アクセスとエラーログを生成し、重要な情報を含みます。これらのログを効率的に管理し分析するために、Logstashを使用してプロセスし、デジタルオーシャンのマネージドOpenSearchに送信して索引と可视化することができます。

このチュートリアルでは、DropletにLogstashをインストールし、Apacheログを集めるために設定する方法を説明し、分析のためにマネージドOpenSearchに送信する方法を教えます。

前提条件

  1. Apache Web ServerをインストールしたDroplet/々。
  2. マネージドOpenSearchクラスタ

手順1 – Logstashのインストール

Logstashは二进制ファイルを使用してインストールすることも、パッケージリポジトリを使用してインストールすることもできます。パッケージリポジトリを使用することで、管理や更新がより簡単になるので、一般的に推奨されています。

この節で、APTとYUMパッケージマネージャを使用して、Droplet上にLogstashをインストールする方法について guidanceを提供します。

OSを识別しましょう。

cat /etc/os-release

APTを基盤とするシステム (Ubuntu/Debian)

公開サインキーをダウンロードしてインストールします。

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

Debianでは、進行する前にapt-transport-httpsパッケージをインストールする必要があるかもしれません。

sudo apt-get install apt-transport-https

リポジトリ定義を/etc/apt/sources.list.d/elastic-8.x.listに保存します。

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

上記のecho方法を使用してLogstashリポジトリを追加してください。add-apt-repositoryを使用してくださいとdeb-srcエントリーを追加しますが、私たちはソースパッケージを提供していません。deb-srcエントリーを追加した場合、以下のようなエラーが表示されます:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

/etc/apt/sources.listファイルからdeb-srcエントリーを削除し、インストールは预期通りに機能するはずです。

`sudo apt-get update`を実行し、リポジトリは使用できる状態になります。以下のようにインストールできます。

sudo apt-get update && sudo apt-get install logstash

YUMを使用しているシステム(CentOS/RHEL)のための情報

公的签名キーをダウンロードしてインストールします。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

以下の内容をあなたの/etc/yum.repos.d/logstash.repoファイルに追加します。このファイルを更新や作成するためには、’tee’コマンドを使用できます。

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

あなたのリポジトリは使用に準備されています。以下のようにインストールできます。

sudo yum install logstash

更なる情報は、Logstashのインストールガイドに réferenceしてください。

手順2 – LogstashをOpenSearchにログを送信するために設定する

Logstashのパイプラインには3つの主要なステージがあります:入力、フィルタ、出力。Logstashのパイプラインはプラグインを使用しています。コミュニティのプラグインを使用することができ、または自分で作成することもできます。

  • 入力:このステージでは、さまざまなソースからデータを収集します。Logstashは、ログファイル、データベース、メッセージ队列、クラウドサービスなどのデータ源を処理するために多くの入力プラグインをサポートしています。

  • フィルター: この段階では、入力段階で収集したデータを処理および変換します。フィルターは、データを修正、充実、構造化して、より有用で分析しやすいものにします。

  • 出力: この段階では、処理されたデータを宛先に送信します。宛先には、データベース、ファイル、OpenSearchのようなデータストアが含まれます。

ステップ3 – Open Search出力プラグインのインストール

OpenSearch出力プラグインは以下のコマンドを実行してインストールできます。

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

詳細な情報は、logstash-output-opensearch-plugin リポジトリにあります。

今から、パイプラインを作成しましょう。

/etc/logstash/conf.d/に新しいファイルapache_pipeline.confを作成し、以下の内容をコピーしてください。

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

<OpenSearch_Host>をあなたのOpenSearchサーバのホスト名、<OpenSearch_Password>をあなたのOpenSearchのパスワードに置き換えてください。

上記の設定を解釈しましょう。

  • INPUT: これはイベントの源を設定するために使用されます。ここでは「file」input pluginを使用しています。

  • path => “/var/log/apache2/access.log” : Logstashが読み取るApacheアクセスログファイルのパスを指定します。

    Logstashサービスが入力パスにアクセスできることを確認してください。

  • start_position => “beginning”: Logstashがログファイルをどこから読み取るかを定義します。"beginning"はLogstashがファイルの末尾でなく先頭からprocessingを始めることを示します。

  • sincedb_path => “/dev/null”: sincedbファイルのパスを指定します。sincedbファイルは、Logstashによってログファイルの現在の位置を追跡するために使用され、再起動や失敗の場合に、そこで中断したところで再開することができます。

  • tags => “apache_access”: この入力から読み取られるイベントにタグを割り当てます。タグは、Logstash内でイベントの識別と过滤を行うために便利であり、一般的には設定の出力やフィルタリング段階で下游で使用されます。私たちは後者のためにタグを使用しています。

  • FILTER: は、イベントを処理するために使用されます。

    条件alsで始める:

    (if "apache_access" in [tags]):
    

    これは、入力のログイベントの[tags]フィールドにapache_accessタグが存在しているかどうかを確認します。私たちは、この条件を使用して、Apacheのアクセスとエラーログに适合するGROKフィルターを適用します。

  • grokフィルタ(Apacheアクセスログ用):
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    grokフィルタ%{HTTPD_COMBINEDLOG}は、Logstashによって定義された既定のパターンで、Apacheの結合アクセスログ形式を解析するために使用されます。これは、受信イベントのmessageフィールドからIPアドレス、タイムスタンプ、HTTPメソッド、URI、ステータスコードなどのフィールドを抽出します。

  • 変更適用フィルター 削除(オプション):Apacheログが解析された後、特定のフィールドを削除するために mutate-remove を使用します。

    mutate {
        remove_field => [ "message", "[log][file][path]", "[event][original]" ]
    }
  • else条件:[tags]にapache_accessタグが存在しない場合、elseブロックが実行されます。このelseブロックには、Apacheのエラーログに対する別のGROKフィルタが含まれています。

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }

    このGROKフィルタ%{HTTPD24_ERRORLOG}は、Apacheのエラーログフォーマットに一致するメッセージを解析します。これは、タイムスタンプ、ログレベル、エラーメッセージなど、エラーログに関連するフィールドを抽出します。

    GROKパターンは以下のURLにあります: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • 出力: 出力プラグインは特定の場所にイベントを送ります。

    出力ブロックはif条件で始まります。ここではif条件を使用しています。

    if "apache_access" in [tags] {}
    

    このif条件は、ログをOpenSearchに2つの異なる索引 `apache_error` および `apache_access` にルーティングするために使用されます。

    OpenSearch 出力プラグインを探ることにしましょう。

    hosts            => "https://XXX:25060"  OpenSearchのホスト名
    user             => "doadmin"            OpenSearchのユーザー名
    password         => "XXXXX"              OpenSearchのパスワード
    index            => "apache_error"       OpenSearch内の索引名
    ssl_certificate_verification => true     SSL証明書の検証を有効にします
    

手順4 – Logstashの開始

パイプラインが設定されたら、Logstashサービスを開始してください:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

手順5 – トラブルシュooting

接続性を確認する

LogstashがOpenSearchと接続できることを確認するために、接続性のテストを行います:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

以下の箇条書きをyour-opensearch-serverとしてOpenSearchサーバーのホスト名、your_usernameyour_passwordとしてOpenSearchの資格情報、そして

データの取り込み

データがOpenSearchに正しく索引されていることを確認してください:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

以下の箇条書きをyour-opensearch-serverとしてOpenSearchサーバーのホスト名、your_usernameyour_passwordとしてOpenSearchの資格情報、そしてyour-index-nameとして索引名に置き換えてください。

ファイアウォールとネットワーク設定

ファイアウォールのルールとネットワーク設定を確認し、Logstash と OpenSearch の間でポート 25060 での通信を許可してください。

ログ

Logstashのログは /var/log/logstash/logstash-plain.log にあります。

詳細については、トラブルシューティングを参照してください。

結論

このガイドでは、Logstashを設定してApacheログを収集してOpenSearchに転送する方法を説明しました。以下が今回の内容の簡単なまとめです:

Logstashのインストール: Linuxディストリビューションに合わせてAPTまたはYUMパッケージマネージャを使用してDroplet上にLogstashをインストールする方法。

Logstashの設定: Logstashの設定ファイルを作成し、調整してApacheログを正しく解析しOpenSearchに送信するようにしました。

OpenSearchでの確認: OpenSearch Dashboardsでインデックスパターンを設定して、ログが正しくインデックスされており、分析に利用可能な状態であることを確認しました。

これらの手順を完了すると、LogstashがApacheログを収集してOpenSearchに送信する機能的な設置が完了されます。

Source:
https://www.digitalocean.com/community/tutorials/forward-apache-logs-to-opensearch-via-logstash