nginx

nginx は無料で提供される、オープンソースの高性能な HTTP サーバーで、リバース プロキシ、IMAP/POP3 プロキシ サーバーとしても機能します。詳細については、nginx.org をご覧ください。

nginx レシーバは、nginx インスタンスからログと指標を収集し、取り込むことができます。

前提条件

nginx のログと指標を収集して取り込むには、バージョン 2.1.0 以降のOps エージェントをインストールする必要があります。

nginx インスタンスを構成する

nginx 構成ファイルの stub_status モジュールを有効にして、ローカルにアクセス可能な URL(ステータス ページの http://www.example.com/status など)を設定する必要があります。stub_status モジュールを有効にするには次の手順を行います。

  1. status.conf ファイルを編集します。このファイルが存在しない場合は作成します。このファイルは、nginx 構成ディレクトリ(通常は /etc/nginx/conf.d にあります)で確認できます。

  2. server セクションに次の行を追加します。

    location /status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
    

    構成ファイルは、次の例のようになります。

    server {
       listen 80;
       server_name 127.0.0.1;
       location /status {
           stub_status on;
           access_log off;
           allow 127.0.0.1;
           deny all;
       }
       location / {
           root /dev/null;
       }
    }
    
  3. nginx 構成を再度読み込みます。

    sudo service nginx reload
    

前の手順は、次のコマンドを実行して自動化できます。このコマンドは、status.conf ファイルが存在しない場合には新規に作成し、存在する場合は既存のファイルを上書きします。このコマンドによって、stub_status がオンになり、nginx が再読み込みされ、必要な情報がエンドポイントを介して公開されることが確認されます。

sudo tee /etc/nginx/conf.d/status.conf > /dev/null << EOF
server {
    listen 80;
    server_name 127.0.0.1;
    location /status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
    location / {
       root /dev/null;
    }
}
EOF
sudo service nginx reload
curl http://127.0.0.1:80/status

出力例を次に示します。

Active connections: 1
server accepts handled requests
 23 23 74
Reading: 0 Writing: 1 Waiting: 0

あるいは、別の status.conf ファイルを使用するのではなく、メインの nginx.conf ファイルに行を直接埋め込むこともできます。このファイルは通常、/etc/nginx/usr/local/nginx/conf/usr/local/etc/nginx のいずれかのディレクトリにあります。

nginx 用の Ops エージェントを構成する

Ops エージェントの構成のガイドに従って、nginx インスタンスからログと指標を収集するために必要な要素を追加して、エージェントを再起動します。

構成の例

次のコマンドは、nginx のログと指標を収集して取り込み、Linux で Ops エージェントを再起動するための構成ファイルを作成します。

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
  receivers:
    nginx_default_access:
      type: nginx_access
    nginx_default_error:
      type: nginx_error
  service:
    pipelines:
      nginx:
        receivers:
          - nginx_default_access
          - nginx_default_error
metrics:
  receivers:
    nginx_metrics:
      type: nginx
      stub_status_url: http://127.0.0.1:80/status
      collection_interval: 60s
  service:
    pipelines:
      nginx_pipeline:
        receivers:
          - nginx_metrics
EOF
sudo service google-cloud-ops-agent restart

ログの収集を構成する

nginx からログを取り込むには、nginx が生成するログのレシーバーを作成し、新しいレシーバーのパイプラインを作成する必要があります。nginx_access ログのレシーバを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
type 値は nginx_access を指定してください。
include_paths [/var/log/nginx/access.log] 読み込むログファイル。
exclude_paths 除外するログファイル(include_paths に glob またはディレクトリが含まれている場合)。
wildcard_refresh_interval 1m0s include_paths のワイルドカード ファイルのパスの更新間隔。期間として指定されます(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に役立ちます。


nginx_error ログのレシーバを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
type 値は nginx_error を指定してください。
include_paths [/var/log/nginx/error.log] 読み込むログファイル。
exclude_paths 除外するログファイル(include_paths に glob またはディレクトリが含まれている場合)。
wildcard_refresh_interval 1m0s include_paths のワイルドカード ファイルのパスの更新間隔。期間として指定されます(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトの間隔よりも速く、ロギングのスループットが高い場合に役立ちます。

ログの内容

nginx_access ログと nginx_error ログの logName は、構成で指定されたレシーバ ID から取得されます。LogEntry 内の詳細なフィールドは、次のとおりです。

nginx_access ログには、httpRequest フィールドが含まれています。

フィールド タイプ 説明
httpRequest.protocol 文字列 リクエストに使用されるプロトコル
httpRequest.referer 文字列 Referer ヘッダーの内容
httpRequest.remoteIp 文字列 クライアント IP アドレス
httpRequest.requestMethod 文字列 HTTP メソッド
httpRequest.requestUrl 文字列 リクエスト URL(通常は URL のパス部分のみ)
httpRequest.responseSize 文字列(int64 レスポンス サイズ
httpRequest.status 数値 HTTP ステータス コード
httpRequest.userAgent 文字列 User-Agent ヘッダーの内容
jsonPayload.host 文字列 Host ヘッダーの内容(通常、nginx から報告されません)
jsonPayload.user 文字列 リクエストの認証済みユーザー名
timestamp 文字列(Timestamp リクエストを受信した時刻

ログエントリに空白や欠落しているフィールドは含まれません。


nginx_error ログでは、LogEntry に次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.level 文字列 ログエントリ レベル
jsonPayload.pid 数値 処理 ID
jsonPayload.tid 数値 スレッド ID
jsonPayload.connection 数値 接続 ID
jsonPayload.message 文字列 ログメッセージ
jsonPayload.client 文字列 クライアント IP アドレス(省略可)
jsonPayload.server 文字列 Nginx サーバー名(省略可)
jsonPayload.request 文字列 元の HTTP リクエスト(省略可)
jsonPayload.subrequest 文字列 Nginx サブリクエスト(省略可)
jsonPayload.upstream 文字列 アップストリーム リクエスト URI(省略可)
jsonPayload.host 文字列 Host ヘッダー(省略可)
jsonPayload.referer 文字列 リファラー ヘッダー(省略可)
severity 文字列(LogSeverity ログエントリ レベル(翻訳済み)
timestamp 文字列(Timestamp エントリがログに記録された時刻

指標の収集を構成する

nginx から指標を収集するには、nginx 指標を表示するレシーバーを作成し、つづいて新しいレシーバー用のパイプラインを作成する必要があります。nginx 指標のレシーバを構成するには、次のフィールドを指定します。

項目 デフォルト 説明
type 値は nginx を指定してください。
stub_status_url http://localhost/status nginx スタブ ステータス モジュールによって公開される URL。
collection_interval 60s time.Duration 値(例: 30s5m)。

モニタリング対象

次の表に、Ops エージェントが nginx インスタンスから収集する指標の一覧を示します。

指標タイプ 
種類、タイプ
モニタリング対象リソース
ラベル
workload.googleapis.com/nginx.requests
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_accepted
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_handled
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_current
GAUGEINT64
gce_instance
state

ダッシュボードの例

サンプルの Cloud Monitoring ダッシュボードを使用して、この統合からの指標を表示できます。サンプル ダッシュボードのインストール手順を完了して、サンプル ライブラリから Nginx の概要ダッシュボードをインポートし、nginx 指標を表示するグラフを表示します。

構成を確認する

ログ エクスプローラと Metrics Explorer を使用して、nginx レシーバーが正しく構成されていることを確認できます。Ops エージェントがログと指標の収集を開始するまでに 1~2 分かかる場合があります。

ログが取り込まれていることを確認するには、ログ エクスプローラに移動し、次のクエリを実行して nginx のログを表示します。

resource.type="gce_instance"
logName=("projects/PROJECT_ID/logs/nginx_default_error" OR "projects/PROJECT_ID/logs/nginx_default_access")


指標が取り込まれていることを確認するには、Metrics Explorer に移動し、[MQL] タブで次のクエリを実行します。

fetch gce_instance
| metric 'workload.googleapis.com/nginx.requests'
| align rate(1m)
| every 1m

トラブルシューティング

ほとんどのディストリビューションの Nginx は、ngx_http_stub_status_module が有効にされています。モジュールが有効になっているかどうかは、次のコマンドを実行して確認できます。

sudo nginx -V 2>&1 | grep -o with-http_stub_status_module

想定される出力は with-http_stub_status_module です。これはモジュールが有効になっていることを意味します。まれに、コマンドが出力を返さない場合は、nginx の公開ドキュメントに沿って、-with-http_stub_status_module を使用してソースから nginx をコンパイルする必要があります。

次のステップ

Ansible を使用して Ops エージェントをインストールし、サードパーティ アプリケーションを構成してサンプル ダッシュボードをインストールする方法については、 Ops エージェントをインストールして、サードパーティ アプリケーションのトラブルシューティングを行うの動画をご覧ください。