LogstashをDroplets上に配置し、NginxログをManaged OpenSearchに転送する

導入

Webサーバーログを管理することは、サイトのスムーズな運営、問題の解決、およびユーザーの行動理解には不可欠です。Nginxを使用している場合、アクセスおよびエラーログには大量の有価な情報が含まれています。これらのログを管理し、分析するために、Logstashを使用して処理と送信、DigitalOceanのManaged OpenSearchを使用して索引化とデータ的可視化することができます。

このチュートリアルでは、Droplet上でLogstashのインストール、Nginxログの収集を設定し、DigitalOcean Managed OpenSearchに送信する方法をご案内します。

前提条件

使用案例

以下のような場合にこの設定が必要です。

  • 監視とトラブルシューティング: 実際のログを分析して、Web サーバーのパフォーマンスとエラーを追跡します。
  • パフォーマンス分析: Web トラフィックパターンとサーバーメトリックスについての洞察を得ます。
  • ログの集中的化: 複数の Nginx サーバーからのログを单一の OpenSearch インスタンスに集約し、より簡単な管理をするためです。

注釈: 設定時間は約30分です。

手順 1 – DropletにLogstashをインストールする

Logstashは、ここに提供されているバイナリファイルを使用してインストールすることができ、または、あなたのオペレーティングシステムに合わせたパッケージレポジトリを使用することもできます。より簡単な管理と更新のために、一般的にはパッケージレポジトリの使用が推奨されます。Debian系のシステムであるUbuntuなどでAPTパッケージマネージャーを使用することができ、Red Hat系のシステムであるCentOSやRHELではyumを使用することができます。この2つの方法は、Logstashを適切にシステムのパッケージ管理インフラに統合し、インストールとメンテナンスを簡略化することを保証します。

この節では、aptyumの両方のパッケージマネージャーを使用してLogstashのインストールを説明します。これにより、Linuxディストリビューションに関係なく、Droplet上でLogstashを設定することができます。

オペレーティングシステムを特定するために、以下のコマンドを実行してください。

cat /etc/os-release

APTベースシステム(Ubuntu/Debian)用

1.公钥署名をダウンロードしてインストールする:

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

2.まだインストールされていない場合は、apt-transport-httpsをインストールします:

sudo apt-get install apt-transport-https

3.Logstashのレポジトリ定義をaptのソースリストに追加して保存します:

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

注意: `add-apt-repository` コマンドを使用しないようにしてください。これはサポートされていない `deb-src` エントリーを追加するかもしれません。`deb-src` エントリーに関連するエラーに直面した場合、`/etc/apt/sources.list` ファイルからそれを削除してください。`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` ファイルから削除すると、インストールは预期通りに動作するはずです。

4.新しいリポジトリを含めたパッケージインデックスを更新します:

sudo apt-get update

5.Logstashを`apt` パッケージマネージャーを使用してインストールします:

sudo apt-get install logstash

6.Logstashを起動し、起動時に自動的に開始するように設定します:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstashは、現在、您的システム上でインストールされて運行中です。

YUMを使用したシステム(CentOS/RHEL)の場合

1.Logstash リポジトリ用の公開署名鍵をダウンロードしてインストールします:

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

2.Logstash用のリポジトリファイルを`/etc/yum.repos.d/`に作成します。たとえば、名前を`logstash.repo`にしてファイルを作成します。以下の内容をコピーと貼り付けることでファイルを作成し、内容を更新することができます:

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

リポジトリは使用できる状態になりました。

3.YUM パッケージマネージャーを使用して Logstash をインストールします:

sudo yum install logstash

4.Logstashを起動し、起動時に自動的に開始するように設定します。

sudo systemctl start logstash
sudo systemctl enable logstash

Logstashは、現在、您的系统上にインストールされて运行中です。

手順2 – Open Search 出力プラグインのインストール

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

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

このlogstash-output-opensearch プラグインリポジトリにて、プラグインに関する詳細情報を見つけることができます。

手順3 – Logstashを設定してNginxログをOpenSearchに送信する

Logstashのパイプラインは、入力、フィルタ、出力の3つの主要な段階で構成されています。Logstashのパイプラインは、プラグインを使用しています。コミュニティのプラグインを使用するか、自作しても構いません。

  • 入力:この段階で、さまざまなソースからデータを集めます。Logstashは、ログファイル、データベース、メッセージ队列、クラウドサービスなどのデータ源を処理するための多くの入力プラグインをサポートしています。
  • フィルタ:この段階では、入力段階で集めたデータを処理し、変換します。フィルタは、データを修正、豊かにする、構造化することで、分析するのにより有用で、簡単にすることができます。
  • 出力: この段階では、処理されたデータを目的地に送信します。目的地には、データベース、ファイル、OpenSearchのようなデータストアが含まれます。

今はパイプラインを作成しましょう。

1./etc/logstash/conf.d/nginx-to-opensearch.confに以下の内容でLogstash設定ファイルを作成してください:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

以下を置き換えてください:

  • OpenSearch-HostnameをあなたのOpenSearchサーバのホスト名に、<your_password>をあなたのOpenSearchのパスワードに置き換えてください。
  • 2.Logstashを再起動して新しい設定を適用します:

3.Logstashのログを確認して、正しく処理とデータの送信が行われていることを確認します:

sudo systemctl restart logstash

4.nginx-to-opensearch.conf設定の詳細

sudo tail -f /var/log/logstash/logstash-plain.log

INPUT

Nginx LogsPaths/var/log/nginx/access.log (アクセスログ用)/var/log/nginx/error.log (エラーログ用)Start Positionbeginning – ログファイルの先頭から読み込むSincedb Path/dev/null – 連続的読み込みの追跡を無効にしますTags["nginx_access"] (アクセスログ用)["nginx_error"] (エラーログ用)

注意: Logstashサービスが入力パスにアクセスできるようにしてください。

FILTER

filterブロックは、タグに基づいてログを処理します。

ログ処理:
アクセスログ:
grokフィルターを使用して、アクセスログのフォーマットを解析し、client_iptimestampmethodrequesthttp_versionresponsebytesreferreruser_agentなどのフィールドを抽出します。
元のmessageと特定のメタデータフィールドを削除します。

エラーログ:
nginx_errorタグをチェックし、grokフィルターを適用して、timestamplevelpidtiderror_messageなどのフィールドを抽出します。
また、messageとメタデータフィールドを削除します。

OUTPUT

outputブロックは、タグに基づいてイベントをOpenSearchにルーティングします。

OpenSearchにルーティング:
アクセスログとエラーログの両方について、次の内容を指定します。
Hosts: OpenSearchインスタンスのURL。
User: 認証用のdoadmin
Password: OpenSearchのパスワード。
Index:
アクセスログ用のnginx_access-%{+YYYY.MM.dd}
エラーログ用のnginx_error-%{+YYYY.MM.dd}
SSL設定: SSLと証明書の検証を有効にします。

ステップ 4 – OpenSearchの設定

1.Webブラウザを開き、OpenSearch DashboardのURLにアクセスしてください:

https://<OpenSearch-Hostname>

`OpenSearch-Hostname`をあなたのOpenSearchサーバーのホスト名に置き換えてください。

2.インデックスパターンを作成します。
a. 左側のナビゲーションバーにある`管理 > ダッシュボード管理 > インデックスパターン`に移動してください。
b. 右上角の`インデックスパターンを作成`をクリックしてください。
c. Logstashによって作成されたすべてのインデックスに一致するインデックスパターンとして`nginx_access-*`または`nginx_error-*`を入力し、`次のステップ`をクリックしてください。
d. `インデックスパターンを作成`をクリックしてください。

3.インデックスパターンが正常に作成され、インデックスパターン一覧に表示されていることを確認してください。

4.左側のナビゲーションバーにある`Discover`に移動し、作成したインデックスパターン(`nginx_access-*`または`nginx_error-*`)を選択してください。ログ記録が表示され、正しくインデックスされていることを確認してください。

5.的可視化とダッシュボードを作成します。詳細はOpenSearchでダッシュボードを作成する方法を参照してください。

トラブルシューティング

接続性を確認する

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

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

以下を置き換えます。

  • OpenSearch-Hostnameをお使いのOpenSearchサーバーのホスト名に置き換えます。
  • <your_password>をお使いのOpenSearchのパスワードに置き換えます。

データの取り込み

以下のcurlコマンドを使用して、データがOpenSearchに正しく索引されていることを確認できます。

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

以下を置き換えます。

  • OpenSearch-Hostnameをお使いのOpenSearchサーバーのホスト名に置き換えます。
  • <your_password>をお使いのOpenSearchのパスワードに置き換えます。

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

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

結論

このガイドで、あなたはLogstashを設定し、NginxログをOpenSearchに集めて送信する方法を学びました。

Linuxディストリビューションに応じてaptまたはyumパッケージマネージャーを使用し、LogstashをDropletに設定し、Nginxログを正しく解析しOpenSearchに送信するように設定したLogstash構成ファイルを作成し調整しました。その後、OpenSearchダッシュボードでインデックスパターンを設定し、ログが正しく索引され、分析に使用できるように表示されていることを確認しました。これらの手順が完了したら、LogstashがNginxログを集めてOpenSearchに送信する機能の設定が完了します。この設定で、OpenSearchの強力な検索と視覚化ツールを使用し、サーバーログを分析することができます。

何か問題が発生した場合は、提供されたトラブルシュootingのヒントを確認し、LogstashおよびOpenSearch 文書についての詳細な情報を参照してください。定期的な監視は、ログインスightsシステムを smoothに運営し、効果的に管理することを助けます。

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