メインコンテンツまでスキップ
Sumo Logic Japanese

Nginx のログの収集

この手順では、NGINX Open Source および NGINX Plus でエラーログおよび処理済みリクエストを収集する方法について説明します。

ログ タイプ

Nginx ログでは、アクセス ログについては NCSA extended/combined ログ ファイル形式、エラー ログについてデフォルトの Nginx エラー ログ ファイル形式を前提としています。Nginx ログ ファイル形式の詳細については、次のサイトを参照してください。

http://nginx.org/en/docs/http/ngx_http_log_module.html

Nginx でのログの設定

ログを取り込むように Sumo Logic を設定するには、NGINX Open Source および NGINX Plus でエラーおよび処理済みリクエストのログを設定する必要があります。手順については、次のドキュメントを参照してください。

https://www.nginx.com/resources/admin-guide/logging-and-monitoring/

Collector の設定

次のいずれかの Sumo Logic Collector のオプションを使用します。

  1. Nginx マシンから直接ログを収集するには、Installed Collector を設定します。
  2. Fluentd などのサービスを使用しているか、手動でログをアップロードする場合には、Hosted Collector を設定します。 

Source の設定

Installed Collector の場合

Nginx マシンから直接ログを収集するには、Installed Collector とローカル ファイル Source を使用します。 

  1. ローカル ファイル Source を追加します。
  2. ローカル ファイル Source フィールドを次のように設定します。
    1. Name (名前): (必須)
    2. Description (説明): (省略可能)
    3. File Path (ファイル パス) (必須): error.log または access.log へのパスを入力します。これらのファイルは通常 /var/log/nginx/error.log にあります。カスタマイズしたパスを使用している場合、nginx.conf ファイルでこの情報を確認してください。Passenger を使用している場合、passenger_log_file オプションを使用して特定のログに記録するように Passenger に指示している場合があります。
    4. Source Host (Source ホスト)。別のホスト名を入力しない限り、OS が割り当てたホスト名が使用されます。
    5. Source Category。Nginx/AccessApache/Access など、この Source から収集された出力にタグ付けする文字列を入力します。[Source Category] メタデータ フィールドは、Source を整理してラベル付けするための基本的な構成要素です。詳細については、「ベスト プラクティス」を参照)。
  3. [Advanced (詳細)] セクションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ parse の有効化): [Extract timestamp information from log file entries (ログ ファイル エントリからタイムスタンプ情報を抽出する)] を選択します。
    2. Time Zone (タイム ゾーン): 自動的に検出されます。
    3. Timestamp Format (タイムスタンプ形式)。タイムスタンプの形式は自動的に検出されます。
    4. Encoding (エンコーディング): [UTF-8] を選択します (デフォルト)。
    5. Enable Multiline Processing (複数行の処理の有効化)。 
      • エラー ログ: [Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)][Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)] を選択します。
      • アクセス ログ: これらは 1 行のログであるため、[Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)] チェックボックスをオフにします。
  4. [Save (保存)] をクリックします。

Hosted Collector の場合

Fluentd などのサービスを使用しているか、手動でログをアップロードする場合には、Hosted Collector と HTTP Source を使用します。

  1. HTTP Source を追加します。
  2. HTTP Source フィールドを次のように設定します。
    1. Name (名前): (必須)
    2. Description (説明): (省略可能)
    3. Source Host (Source ホスト)。別のホスト名を入力しない限り、OS が割り当てたホスト名が使用されます。
    4. Source Category。Nginx/AccessApache/Access など、この Source から収集された出力にタグ付けする文字列を入力します。[Source Category] メタデータ フィールドは、Source を整理してラベル付けするための基本的な構成要素です。詳細については、「ベスト プラクティス」を参照)。
  3. [Advanced (詳細)] セクションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ parse の有効化): [Extract timestamp information from log file entries (ログ ファイル エントリからタイムスタンプ情報を抽出する)] を選択します。
    2. Time Zone (タイム ゾーン): アクセス ログの場合、ログ ファイルからタイム ゾーンを使用します。エラー ログの場合、必ず正しいタイム ゾーンを選択してください。
    3. Timestamp Format (タイムスタンプ形式)。タイムスタンプの形式は自動的に検出されます。
    4. Enable Multiline Processing (複数行の処理の有効化)。 
      • エラー ログ: [Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)][Infer Boundaries - Detect message boundaries automatically (境界を推測する - メッセージ境界を自動的に検出する)] を選択します。
      • アクセス ログ: これらは 1 行のログであるため、[Detect messages spanning multiple lines (複数行にわたるメッセージを検出する)] チェックボックスをオフにします。
  4. [Save (保存)] をクリックします。
  5. HTTP Source に関連付けられている URL が表示されたら、Fluentd など、使用しているサービスに貼り付けられるように URL をコピーします。

FER (Field Extraction Rules) の作成

FER (Field Extraction Rules) は、Sumo Logic に対して自動的に parse するフィールドを指定します。手順については、「FER (Field Extraction Rules) の作成」を参照してください。 

Nginx では、アクセス ログについては NCSA extended/combined ログ ファイル形式、エラー ログについてデフォルトの Nginx エラー ログ ファイル形式を前提としています。

アクセス ログの FER

次の parse 式を使用します。

parse regex "^(?<src_ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
| parse regex "(?<method>[A-Z]+)\s(?<url>\S+)\sHTTP/[\d\.]+\"\s(?<status_code>\d+)\s(?<size>[\d-]+)\s\"(?<referrer>.*?)\"\s\"(?<user_agent>.+?)\".*"

エラー ログの FER

次の parse 式を使用します。

parse regex "\[(?<log_level>\w+)\] (?<pid>\d+).(?<tid>\d+): (?<message>.*)$"

クエリのサンプル

パブリック/Apache/アクセスの式の parse (Apache Access Parser)

parse regex "\"(?<method>[A-Z]+) (?<url>.+?) HTTP/[\d\.]+\" (?<status_code>\d+) (?<size>[\d-]+) \"(?<referrer>.*?)\" \"(?<user_agent>.+?)\".*" nodrop | parse regex "^(?<src_ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" nodrop

ログ メッセージのサンプル

アクセス ログの例

50.1.1.1 - example [23/Sep/2016:19:00:00 +0000] "POST /api/is_individual HTTP/1.1" 200 58 "-" "python-requests/2.7.0 CPython/2.7.6 Linux/3.13.0-36-generic"

エラー ログの例

2016/09/23 19:00:00 [error] 1600#1600: *61413 open() "/srv/core/client/dist/client/favicon.ico" failed (2: No such file or directory), client: 101.1.1.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "example.com", referrer: "https://abc.example.com/"
  • この記事は役に立ちましたか?