ウェブサイト検索

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


紹介

効果的なウェブサーバーログ管理は、ウェブサイトのパフォーマンスを維持し、問題をトラブルシューティングし、ユーザーの行動についての洞察を得るために重要です。Apacheは最も人気のあるウェブサーバーの一つです。Apacheは、貴重な情報を含むアクセスログとエラーログを生成します。これらのログを効率的に管理し分析するために、Logstashを使用してログを処理し、DigitalOceanのManaged OpenSearchに転送してインデックス作成と視覚化を行うことができます。

このチュートリアルでは、DropletにLogstashをインストールし、Apacheログを収集するために構成し、分析のためにManaged OpenSearchに送信する方法を案内します。

前提条件

  1. Apache Webサーバーがインストールされたドロップレット/ス.
  2. 管理されたOpenSearchクラスター

ステップ1 - Logstashのインストール

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

このセクションでは、APTおよびYUMパッケージマネージャーを使用して、DropletにLogstashをインストールする手順を案内します。

オペレーティングシステムを特定しましょう。

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)

deb-srcエントリを/etc/apt/sources.listファイルから削除するだけで、インストールは期待通りに動作するはずです。

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のインストールガイドを参照してください。

ステップ2 - Logstashを設定してログをOpenSearchに送信する

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

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

  • フィルター:このステージでは、入力ステージで収集されたデータを処理し、変換します。フィルターは、データを修正、強化、構造化して、より使いやすく、分析しやすくします。

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

ステップ3 - オープン検索出力プラグインのインストール

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パスワードに置き換えてください。

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

  • これはイベントのソースを構成するために使用されます。ここでは「ファイル」入力プラグインが使用されています。

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

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

  • {

  • start_position => “beginning”: Logstashがログファイルの読み取りを開始する場所を定義します。“beginning”は、Logstashがファイルの末尾ではなく、最初から処理を開始すべきことを示しています。

  • sincedb_path => "/dev/null": sincedbファイルのパスを指定します。sincedbファイルは、Logstashがログファイルの現在の位置を追跡するために使用され、再起動や障害が発生した場合に、作業を再開できるようにします。

  • タグ => “apache_access ”: この入力から読み取ったイベントにタグを付けます。タグはLogstash内でイベントを識別およびフィルタリングするのに役立ち、構成の出力やフィルタリングの段階で下流で使用されることがあります。私たちは後者のためにタグを使用しています。

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

    条件文から始める:

    (if "apache_access" in [tags]):
    

    これは、タグ apache_access が受信ログイベントの [tags] フィールドに存在するかどうかを確認します。この条件を使用して、Apacheのアクセスおよびエラーログに適切なGROKフィルターを適用します。

  • Grokフィルター(Apacheアクセスログ用):

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

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

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

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

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

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

    GROKパターンは以下の場所で見つけることができます: 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 Outputプラグインを探ってみましょう。

    hosts            => "https://XXX:25060"  Your Open search Hostname
    user             => "doadmin"            Your Open search Username
    password         => "XXXXX"              OpenSearch Password
    index            => "apache_error"       Index name in OpenSearch
    ssl_certificate_verification => true     Enabled SSL certificate verification
    

ステップ4 - Logstashを開始する

パイプラインが構成されたら、Logstashサービスを開始します:

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

ステップ5 - トラブルシューティング

接続を確認してください

LogstashがOpenSearchに接続できることを確認するには、接続性をテストします:

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

your-opensearch-serverをあなたのOpenSearchサーバーのホスト名に、your_usernameとyour_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_username、your_passwordをあなたのOpenSearchの認証情報に置き換えてください。同様に、your-index-nameをインデックス名に置き換えてください。

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

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

ログ

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

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

結論

このガイドでは、Logstashを設定してApacheのログを収集し、OpenSearchに転送する方法を説明しました。ここでは、私たちがカバーした内容を簡単に振り返ります:

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

Logstashの設定:私たちはApacheのログが正しく解析され、OpenSearchに送信されることを確実にするために、Logstashの設定ファイルを作成し、調整しました。

OpenSearchでの確認: あなたのログが適切にインデックスされていることを確認し、分析のために表示されることを確かめるために、OpenSearch Dashboardsでインデックスパターンを設定しました。

これらの手順が完了したことで、Logstash が Apache ログを収集し、それを OpenSearch に送信する機能的なセットアップができているはずです。

関連記事: