
概要
Datadog Agent は NGINX インスタンスから、次のような多数のメトリクスを収集できます (一例)。
- 合計リクエスト数
- 接続数 (許可された接続、処理された接続、アクティブな接続など)
NGINX の商用版である NGINX Plus のユーザーの場合、Agent は、NGINX Plus が提供する次のような数多くのメトリクスを収集できます。
- エラー (4xx コード、5xx コードなど)
- 上流サーバー (アクティブな接続、5xx コード、健全性チェックなど)
- キャッシュ (サイズ、ヒット数、ミス数など)
- SSL (ハンドシェイクやハンドシェイクの失敗など)
セットアップ
インストール
NGINX チェックは、ローカルの NGINX ステータスエンドポイントからメトリクスを取得するため、nginx
バイナリが NGINX ステータスモジュールと共にコンパイルされている必要があります。
NGINX オープンソース
オープンソース NGINX を使用している場合は、インスタンスにスタブステータスモジュールが含まれていないことがあります。コンフィグレーションを行う前に、nginx
バイナリにモジュールが含まれているかを確認してください。
$ nginx -V 2>&1| grep -o http_stub_status_module
http_stub_status_module
コマンドの出力に http_stub_status_module
が含まれていない場合は、このモジュールを含む NGINX パッケージをインストールする必要があります。独自の NGINX をコンパイルして、コンパイル時にモジュールを有効化することもできますが、最新の Linux ディストリビューションで提供されている代替 NGINX パッケージには、外部モジュールのさまざまな組み合わせが組み込まれています。ご使用のオペレーティングシステムの NGINX パッケージをチェックして、スタブステータスモジュールが含まれているパッケージを探してください。
NGINX Plus
リリース 13 より前の NGINX Plus パッケージにはHTTP ステータスモジュールが含まれています。リリース 13 以降の NGINX Plus では、このステータスモジュールは非推奨になり、代わりに新しい Plus API を使用する必要があります。詳細については、こちらのお知らせを参照してください。
NGINX の準備
各 NGINX サーバーで、他の NGINX 構成ファイルが含まれているディレクトリ (/etc/nginx/conf.d/
など) に status.conf
ファイルを作成します。
server {
listen 81;
server_name localhost;
access_log off;
allow 127.0.0.1;
deny all;
location /nginx_status {
# ステータスモジュールを選択します
# オープンソース NGINX を自由に利用できます
stub_status;
# バージョン 1.7.5 以前の オープンソース NGINX で使用します
# stub_status on;
# NGINX Plus でのみ使用できます
# status;
# バージョン情報を取得できるようにします
server_tokens on;
}
}
NGINX Plus
NGINX Plus ユーザーは、stub_status
を使用することもできますが、このモジュールで提供されるメトリクスは少ないため、status
の使用をお勧めします。
NGINX Plus リリース 15 以降では、status
モジュールは非推奨です。代わりに http_api_module を使用してください。たとえば、メインの NGINX 構成ファイル (/etc/nginx/conf.d/default.conf
) で /api
エンドポイントを有効にするには、以下のようにします。
server {
listen 8080;
location /api {
api write=on;
}
}
NGINX Plus を使用してさらに詳細なメトリクス (毎秒の 2xx / 3xx / 4xx / 5xx 応答数など) を取得するには、監視するサーバーで status_zone
を設定します。たとえば、以下のとおりです。
server {
listen 80;
status_zone <ゾーン名>;
...
}
NGINX をリロードして、status または API エンドポイントを有効にします。完全な再起動は必要ありません。
sudo nginx -t && sudo nginx -s reload
以下のスニペットを構成 ConfigMaps に追加し、別のポートでメトリクスエンドポイントを公開します。
kind: ConfigMap
metadata:
name: nginx-conf
data:
[...]
status.conf: |
server {
listen 81;
location /nginx_status {
stub_status on;
}
location / {
return 404;
}
}
次に、NGINX ポッドで 81
エンドポイントを公開し、そのファイルを NGINX 構成フォルダーにマウントします。
spec:
containers:
- name: nginx
ports:
- containerPort: 81
volumeMounts:
- mountPath: /etc/nginx/conf.d/status.conf
subPath: status.conf
readOnly: true
name: "config"
volumes:
- name: "config"
configMap:
name: "nginx-conf"
構成
ホスト
ホストで実行中の Agent に対してこのチェックを構成するには
ホストで実行されている Agent 用にこのチェックを構成する場合は、以下の手順に従ってください。コンテナ環境の場合は、Docker、Kubernetes、または ECS セクションを参照してください。
メトリクスの収集
NGINX メトリクスの収集を開始するには、nginx.d/conf.yaml
ファイルで nginx_status_url
パラメーターを http://localhost:81/nginx_status/
に設定します。使用可能なすべての構成オプションの詳細については、サンプル nginx.d/conf.yaml を参照してください。
NGINX Plus:
NGINX Plus リリース 13 以降の場合は、nginx.d/conf.yaml
構成ファイルでパラメーター use_plus_api
を true
に設定します。
ストリーム統計 API 呼び出しは、NGINX Plus のデフォルトで含まれています。これを無効にしたい場合は、nginx.d/conf.yaml
コンフィギュレーションファイルでパラメーター use_plus_api_stream
を false
に設定します。
http_api_module
を使用する場合は、nginx.d/conf.yaml
構成ファイルでパラメーター nginx_status_url
をサーバーの /api
の場所に設定します。以下に例を示します。
nginx_status_url: http://localhost:8080/api
オプション - NGINX の vhost_traffic_status module
を使用する場合は、nginx.d/conf.yaml
構成ファイルでパラメーター use_vts
を true
に設定します。
Agent を再起動すると、Datadog への NGINX メトリクスの送信が開始されます。
ログ収集
Agent バージョン 6.0 以降で利用可能
Datadog Agent で、ログの収集はデフォルトで無効になっています。以下のように、datadog.yaml
ファイルでこれを有効にします。
NGINX のログの収集を開始するには、次の構成ブロックを nginx.d/conf.yaml
ファイルに追加します。
logs:
- type: file
path: /var/log/nginx/access.log
service: nginx
source: nginx
- type: file
path: /var/log/nginx/error.log
service: nginx
source: nginx
service
パラメーターと path
パラメーターの値を変更し、環境に合わせて構成します。使用可能なすべてのコンフィギュレーションオプションについては、サンプル nginx.d/conf.yaml を参照してください。
Agent を再起動します。
注: NGINX のデフォルトのログ形式には、リクエスト応答時間が含まれていません。これをログに含めるには、NGINX 構成ファイル (/etc/nginx/nginx.conf
) の http
セクションに以下の構成ブロックを追加して、NGINX のログ形式を更新します。
http {
#推奨ログフォーマット
log_format nginx '\$remote_addr - \$remote_user [\$time_local] '
'"\$request" \$status \$body_bytes_sent \$request_time '
'"\$http_referer" "\$http_user_agent"';
access_log /var/log/nginx/access.log;
}
Docker
コンテナで実行中の Agent に対してこのチェックを構成するには:
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートを Docker ラベルとして設定します。
LABEL "com.datadoghq.ad.check_names"='["nginx"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"nginx_status_url": "http://%%host%%:81/nginx_status/"}]'
注: このインスタンスは NGINX オープンソースでのみ機能します。NGINX Plus を使用している場合は、対応するインスタンス構成をインライン化します。
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、Docker ログ収集を参照してください。
次に、ログインテグレーションを Docker ラベルとして設定します。
LABEL "com.datadoghq.ad.logs"='[{"source":"nginx","service":"nginx"}]'
Kubernetes
このチェックを、Kubernetes で実行している Agent に構成します。
メトリクスの収集
メトリクスを収集するには、オートディスカバリーテンプレートに以下のパラメーターと値を設定します。これは、NGINX ポッドの Kubernetes アノテーション (下記参照) またはローカルファイル、ConfigMap、キーバリューストア、Datadog Operator マニファスト、または Helm チャートを使用して行うことができます。
パラメーター | 値 |
---|
<INTEGRATION_NAME> | ["nginx"] |
<INIT_CONFIG> | [{}] |
<INSTANCE_CONFIG> | [{"nginx_status_url": "http://%%host%%:18080/nginx_status"}] |
Annotations v1 (Datadog Agent < v7.36 向け)
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
ad.datadoghq.com/nginx.check_names: '["nginx"]'
ad.datadoghq.com/nginx.init_configs: '[{}]'
ad.datadoghq.com/nginx.instances: |
[
{
"nginx_status_url":"http://%%host%%:81/nginx_status/"
}
]
labels:
name: nginx
Annotations v2 (Datadog Agent v7.36+ 向け)
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
ad.datadoghq.com/nginx.checks: |
{
"nginx": {
"init_config": {},
"instances": [
{
"nginx_status_url":"http://%%host%%:81/nginx_status/"
}
]
}
}
labels:
name: nginx
注: このインスタンスは NGINX オープンソースでのみ機能します。NGINX Plus を使用している場合は、対応するインスタンス構成をインライン化します。
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、Kubernetes ログ収集を参照してください。
次に、オートディスカバリーテンプレートに以下のパラメーターを設定します。これは、Redis ポッドの Kubernetes アノテーション (下記参照) またはローカルファイル、ConfigMap、キーバリューストア、Datadog Operator マニファスト、または Helm チャートを使用して行うことができます。
パラメーター | 値 |
---|
<LOG_CONFIG> | [{"source":"nginx","service":"nginx"}] |
Annotations v1/v2
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
ad.datadoghq.com/nginx.logs: '[{"source":"nginx","service":"nginx"}]'
labels:
name: nginx
ECS
このチェックを、ECS で実行している Agent に構成するには:
メトリクスの収集
アプリケーションのコンテナで、オートディスカバリーのインテグレーションテンプレートを Docker ラベルとして設定します。
{
"containerDefinitions": [{
"name": "nginx",
"image": "nginx:latest",
"dockerLabels": {
"com.datadoghq.ad.check_names": "[\"nginx\"]",
"com.datadoghq.ad.init_configs": "[{}]",
"com.datadoghq.ad.instances": "[{\"nginx_status_url\":\"http://%%host%%:81/nginx_status/\"}]"
}
}]
}
注: このインスタンスは NGINX オープンソースでのみ機能します。NGINX Plus を使用している場合は、対応するインスタンス構成をインライン化します。
ログ収集
Datadog Agent で、ログの収集はデフォルトで無効になっています。有効にする方法については、ECS ログ収集を参照してください。
次に、ログインテグレーションを Docker ラベルとして設定します。
{
"containerDefinitions": [{
"name": "nginx",
"image": "nginx:latest",
"dockerLabels": {
"com.datadoghq.ad.logs": "[{\"source\":\"nginx\",\"service\":\"nginx\"}]"
}
}]
}
検証
Agent の status サブコマンドを実行し、Checks セクションで nginx
を探します。
収集データ
メトリクス
オープンソース NGINX のユーザーは、ここに示したメトリクスのすべてを利用できるわけではありません。各モジュールで提供されるメトリクスを確認するには、スタブステータス (オープンソース NGINX) と HTTP ステータス (NGINX Plus) のモジュールリファレンスを比較してください。
オープンソース NGINX と NGINX Plus では名前が異なるメトリクスがいくつかありますが、それらは同じメトリクスです。
NGINX | NGINX Plus |
---|
nginx.net.connections | nginx.connections.active |
nginx.net.conn_opened_per_s | nginx.connections.accepted |
nginx.net.conn_dropped_per_s | nginx.connections.dropped |
nginx.net.request_per_s | nginx.requests.total |
次のメトリクスは、正確には同じメトリクスではありませんが、関連はあります。
NGINX | NGINX Plus |
---|
nginx.net.waiting | nginx.connections.idle |
最後に、次のメトリクスには対応するメトリクスがありません。
メトリクス | 説明 |
---|
nginx.net.reading | nginx がリクエストヘッダーを読み取っている現在の接続数。 |
nginx.net.writing | nginx がクライアントへの応答を書き込んでいる現在の接続数。 |
イベント
NGINX チェックには、イベントは含まれません。
サービスチェック
トラブルシューティング
ご不明な点は、Datadog のサポートチームまでお問い合わせください。
その他の参考資料
お役に立つドキュメント、リンクや記事: