Dockerで作る開発環境:nginx-exporterの導入

スポンサーリンク
Dockerで作る開発環境:nginx-exporterの導入 ノウハウ
Dockerで作る開発環境:nginx-exporterの導入
この記事は約9分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、nginx-exporterを導入した手順をご紹介します。

スポンサーリンク

実行環境

この記事は、特定の開発環境を前提として書かれています。もし興味がある場合は、その開発環境を構築するための説明が書かれている記事を参考にしてください。該当記事は下記になります。

ただ、この記事で紹介している修正内容がたくさんあるので、その修正を反映した最新版のプログラムをダウンロードして、参照することをおすすめします。該当のプログラムの詳細については、下記のページで確認できます。

背景

nginx-prometheus-exporterは、NginxのWebサーバーからメトリクスを収集し、Prometheusのメトリクス収集機能と統合するためのツールです。

Nginxは、HTTPリクエストを処理するための非常に人気のあるWebサーバーであり、リバースプロキシ、ロードバランシング、コンテンツ配信などの機能を提供しています。nginx-prometheus-exporterを使用することで、Nginxサーバーの稼働状況を監視し、可視化することができます。Nginxサーバーの可用性を向上させるために、nginx-prometheus-exporterを導入することをお勧めします。

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。

.
├── LICENSE
├── Makefile
├── README.md
└── app
    ├── apache-exporter
    ├── compose.yml
    ├── flyway
    ├── grafana
    │   ├── dashboard.yml
    │   └── dashboards
    │          └── nginx.json
    ├── influxdb
    ├── k6
    ├── memcached
    ├── memcached-exporter
    ├── nginx
    │   └── default.conf
    ├── nginx-exporter
    │   └── Dockerfile
    ├── php-fpm
    ├── php-fpm-exporter
    ├── mongo
    ├── mysql
    ├── mysqld-exporter
    ├── prometheus
    │   └── prometheus.yml
    ├── schemaspy
    ├── web
    └── xhgui

compose.yml

下記の内容をファイル(compose.yml) 225-236 行目に追加します。

  nginx-exporter:
    build: ./nginx-exporter
    container_name: nginx-exporter
    ports:
      - "9113:9113"
    restart: unless-stopped
    entrypoint: nginx-prometheus-exporter -nginx.scrape-uri=http://nginx/nginx_status
    networks:
      - net
    depends_on:
      - nginx

nginx/default.conf

下記の内容をファイル(nginx/default.conf) 15-23行目に追記します。

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow 172.18.0.0/16;  # This is my local docker IP range
        allow 192.168.0.0/16; # This is my production server IP range
        deny all;
    }

nginx-exporter/Dockerfile

下記の内容でファイル(nginx-exporter/Dockerfile) を更新します。

FROM nginx/nginx-prometheus-exporter:0.10.0

prometheus/prometheus.yml

下記の赤字内容でファイル(prometheus/prometheus.yml) を更新します。

global:
  scrape_interval: 5s
scrape_configs:
  - job_name: 'docker-for-mac'
    static_configs:
      - targets: ['docker.for.mac.host.internal:9323']
  - job_name: 'apache'
    static_configs:
      - targets: ['apache-exporter:9117']
  - job_name: 'php-fpm'
    static_configs:
      - targets: ['php-fpm-exporter:9253']
  - job_name: 'nginx'
    static_configs:
      - targets: ['nginx-exporter:9113']
  - job_name: 'memcached'
    static_configs:
      - targets: ['memcached-exporter:9150']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld-exporter:9104']

grafana/dashboard.yml

下記の赤字内容をファイル(grafana/dashboard.yml) 26-36行目に追記します。

  - name: 'nginx'
    orgId: 1
    folder: 'Service'
    type: file
    disableDeletion: false
    updateIntervalSeconds: 10
    allowUiUpdates: false
    options:
      path: /var/lib/grafana/dashboards/nginx.json
      foldersFromFilesStructure: false

grafana/dashboards/nginx.json

jsonファイルは行数が多いので、ここでの掲載は割愛します。

作成方法は、grafanaのdashboardで12708をインポートして、JSON出力したものになります。詳細は、GitHUBのコードをご参照ください。

動作確認

下記のコマンドを実行して、サービスを起動します。

make setup

ブラウザで「http://localhost:3000/dashboards」にアクセスして、nginxのダッシュボードが表示されていて、ダッシュボードを開いたときに、メトリクス情報が取得できていれば、成功です。

解説

nginx-exporterについて

Nginx Prometheus Exporterは、Nginxの各種メトリクスをPrometheus形式でエクスポートすることができます。主なメトリクスは以下の通りです。

  • nginx_connections_accepted_total: コネクションの受け入れ数
  • nginx_connections_active: アクティブなコネクション数
  • nginx_connections_handled_total: コネクションの処理数
  • nginx_connections_reading: 読み込み中のコネクション数
  • nginx_connections_waiting: 待機中のコネクション数
  • nginx_connections_writing: 書き込み中のコネクション数
  • nginx_http_requests_total: HTTPリクエスト数
  • nginx_http_status_total: HTTPステータスコードの数
  • nginx_upstream_failures_total: upstreamの失敗数
  • nginx_upstream_health_checks_checks_total: health checkの実行回数
  • nginx_upstream_health_checks_fails_total: health checkの失敗回数
  • nginx_upstream_health_checks_unhealthy_total: unhealthyなupstreamの数
  • nginx_upstream_requests_total: upstreamへのリクエスト数
  • nginx_upstream_response_time_seconds: upstreamのレスポンスタイム
  • nginx_upstream_responses_total: upstreamからのレスポンス数
  • nginx_upstream_weight: upstreamの重み
  • nginx_worker_processes: Nginxのワーカープロセス数
  • nginx_connections_dropped_total: ドロップされた接続の数

上記の他にも、Nginxのキャッシュに関するメトリクスや、SSL/TLSに関するメトリクスもエクスポートすることができます。また、Nginxの設定ファイルによっては、エクスポートされるメトリクスが異なる場合があります。

おわりに

今日は、dockerで構築した開発環境にnginx-exporterを導入し、grafanaでメトリクス情報を可視化しました。ぜひ、性能改善等に使用してみてください。

今回使用したファイルは下記のGitHubにタグ付けしています。

もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました