Table of Contents
Great systems are not just built. They are monitored.
MetricFire runs Graphite and Grafana as a fully managed service for growing engineering teams, taking care of storage, scaling, and version updates so your team doesn't have to. Plans start at $19/month, billed per metric namespace rather than per host, and include engineer-staffed support. Integrations work natively with Heroku, AWS, Azure, and GCP, and data is stored with 3× redundancy in SOC2- and ISO:27001-certified data centres.
はじめに
NGINXのメトリクスをOpenTelemetry経由で収集し、Graphiteベースの監視環境へ送信するシンプルな方法をお探しの場合、この記事が役立ちます。最小限の設定だけで、数分以内にNGINX接続に関する主要なメトリクスを収集できるようになります。
本記事では、OpenTelemetry Collectorのインストール方法と、NGINXメトリクスを受信してHosted Carbonエンドポイントへエクスポートするための簡単な設定方法について解説します。
NGINXの導入
NGINXは、高トラフィックを効率的に処理しながらリソース消費を抑える、高速かつ軽量なWebサーバーおよびリバースプロキシです。その高速性、組み込みのロードバランシング機能、そしてモダンなアプリケーションへ容易に組み込める柔軟性から広く利用されています。近年、多くの開発者がクラウドベースやコンテナ化された環境へ移行していることもあり、NGINXはスケーラビリティとセキュリティを維持するための定番ソリューションとなっています。
NGINXのインストールと設定(Linux)
この記事では、すでにサーバー上でNGINXが稼働していることを前提としています。ただし、テスト目的で手順を試したい場合は、以下の方法でLinuxサーバー上に素早くセットアップできます。
sudo apt install -y nginx
デフォルトではNGINXは80番ポートで待ち受けるため、まず他のプロセスがそのポートを使用していないか確認します。
sudo netstat -tulnp | grep :80
NGINXの stub_status モジュールは、アクティブ接続数、処理済みリクエスト数、接続状態(Reading、Writing、Waiting)などのリアルタイムなサーバーヘルスメトリクスを提供します。これを有効化するには、通常 /etc/nginx/sites-available/default にあるNGINX設定ファイルへ以下のlocationブロックを追加します。
server {
listen 80 default_server;
listen [::]:80 default_server;
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
変更を保存したら、NGINXを再起動します。
sudo systemctl restart nginx
sudo systemctl status nginx
エンドポイントが正常に動作していることを確認するため、以下のコマンドを実行します。
curl http://localhost:80/nginx_status
期待される出力は以下のようになります。
Active connections: 2
server accepts handled requests
110 110 292
Reading: 0 Writing: 1 Waiting: 1
OpenTelemetryのインストールと設定
OpenTelemetry Collectorには、NGINX、PostgreSQL、Redis、Kafkaなどに対する組み込みサポートがあります。これらのReceiverは、サービスから主要なパフォーマンスメトリクスを直接取得するため、手動での解析やカスタムスクリプトは必要ありません。この記事では、すでにOpenTelemetryを利用していることを前提としていますが、以下ではシステムメトリクスを迅速に収集し、Carbonエンドポイントへエクスポートするための otelcol-contrib のインストールおよび設定例を紹介します。
OpenTelemetry Collector Contribのインストール(Linux)
otelcol-contribをダウンロードして展開します(最新バージョンや各OS向けのインストールコマンドについては、公式のインストールドキュメントをご確認ください)。
/etc/otelcol-contrib/にインストールされます。Ubuntu/Debian (AMD)
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.119.0/otelcol-contrib_0.119.0_linux_amd64.deb
sudo dpkg -i otelcol-contrib_0.119.0_linux_amd64.deb
RedHat/CentOS (AMD)
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.119.0/otelcol-contrib_0.119.0_linux_amd64.rpm
sudo rpm -ivh otelcol-contrib_0.119.0_linux_amd64.rpm
インストール確認
otelcol-contrib --version
NGINX ReceiverとCarbon Exporterの設定
OpenTelemetryのNGINX Receiverは、localhost:80/nginx_status からメトリクスを収集し、それらを処理した後、指定したExporterへ転送します。
Carbon Exporterは、それらのメトリクスをGraphite互換バックエンドへ直接送信するため、最小限の設定で既存の監視基盤へOpenTelemetryを統合できます。
現在Graphiteデータソースを自前でホスティングしていない場合は、この例を続けるためにMetricFireのHosted Graphiteによる14日間無料トライアルを開始してください。
MetricFireアカウントを利用することで、Graphiteデータソースに加え、Hosted Grafana、アラート機能、各種インテグレーション、チーム機能も利用できます。
- まず、通常 /etc/otelcol-contrib/config.yaml にある設定ファイルを見つけて、お好みのテキストエディタで開きます。
- その後、設定ファイル全体を置き換えるか、現在の設定へ以下のセクションを追加します。
- HG-API-KEY と HOSTNAME は必ずご自身の値に置き換えてください。
receivers:
nginx:
endpoint: "http://localhost:80/nginx_status"
processors:
batch: {}
metricstransform:
transforms:
- include: ".*"
match_type: regexp
action: update
new_name: "<HG-API-KEY>.opentel.$$0"
operations:
- action: add_label
new_label: host
new_value: <HOSTNAME>
exporters:
carbon:
endpoint: "carbon.hostedgraphite.com:2003"
timeout: 10s
service:
pipelines:
metrics:
receivers:
- nginx
processors:
- batch
- metricstransform
exporters:
- carbon
設定を保存したら、otelcol-contrib サービスを再起動します。
sudo systemctl restart otelcol-contrib
sudo systemctl status otelcol-contrib
または、潜在的な設定エラーを確認するために、設定ファイルを指定して手動実行することもできます。
otelcol-contrib --config /etc/otelcol-contrib/config.yaml
Prometheus形式のNGINXメトリクスを収集・転送するためのOpenTelemetry設定については、関連する記事をご参照ください。
タグ付きGraphiteメトリクスの送信
otelcol-contrib サービスを再起動してから約2分以内に、いくつかのタグ付きGraphiteメトリクスが opentel プレフィックス付きでHosted Graphiteアカウントへ送信されます。
OpenTelemetryはなぜタグ付きメトリクスをCarbonへエクスポートするのか?
- それは、OpenTelemetryの基本モデルがGraphiteの「ドット記法」よりも、Prometheusスタイルの「ラベル」に近い設計だからです。データを長いメトリクス名へ変換して平坦化する代わりに、Graphiteタグを使用してラベル情報を保持することで、Graphiteバックエンド内でより柔軟なフィルタリングを実現できます。
これらのタグ付きメトリクスは、Hosted GraphiteのTag Search UIで、host タグを基準に検索できます。
また、必要に応じて別のExporterを設定し、他のデータソースへメトリクスを転送することも可能です。
MetricFireのHosted Graphiteでカスタムダッシュボードとアラートを作成
MetricFireは、サーバー、データベース、ネットワーク、プロセス、デバイス、アプリケーションからメトリクスやデータを収集・可視化・分析できる監視プラットフォームです。MetricFireを利用することで、インフラ内の問題を容易に特定し、リソースを最適化できます。MetricFireのHosted Graphiteを利用すれば、監視ソリューションを自前でホスティングする負担がなくなり、より重要な作業に時間を割くことができます。
パブリックCarbonエンドポイントへ送信されたメトリクスは、タイムスタンプが付与され、Hosted Graphiteバックエンドへ集約されます。
-
OpenTelemetryのメトリクスは、次のGraphiteタグ形式で送信・保存されます:my.series;tag1=value1;tag2=value2 metric_value (timestamp)
-
タグはフィルタリング機能を提供するため、メトリクスを効率的に検索できます。
-
メトリクスはHosted Graphiteアカウント内に2年間保存され、それらを利用してカスタムダッシュボードやアラートを作成できます。
MetricFireのHosted Grafanaでカスタムダッシュボードを作成
Hosted Graphite UIで、Dashboardsへ移動し、「+ New Dashboard」を選択して新しい可視化を作成します。
その後、Editモードへ入り、Query UIを使用してGraphiteメトリクスパスを選択します(Hosted Graphiteアカウント経由でGrafanaへアクセスしている場合、デフォルトのデータソースはHostedGraphiteになります)。
注:タグ付きメトリクスをクエリするには、Graphiteの seriesByTag 関数を使用する必要があります。aliasByTags 関数の利用は任意です。
Grafanaには、さまざまな可視化設定、表示のカスタマイズ、単位設定に加え、ダッシュボード変数やイベントアノテーション設定などの高度な機能も多数用意されています。
カスタムGrafana可視化の作成に関する詳細については、Hosted Graphiteのダッシュボードドキュメントをご確認ください。
Graphiteアラートの作成
Hosted Graphite UIで、Alerts => Graphite Alertsへ移動し、新しいアラートを作成します。アラート名を設定し、タグ付きNGINXメトリクスをalerting metricフィールドへ追加し、このアラートが何を監視するものか説明文を入力します。
次に、Alert Criteriaタブを選択してしきい値を設定し、通知チャネルを選択します。デフォルトの通知チャネルは、Hosted Graphiteアカウント登録時に使用したメールアドレスです。ただし、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなどの通知チャネルも簡単に設定できます。通知チャネルの詳細については、こちらのドキュメントをご確認ください。
まとめ
NGINXの監視は、単に問題を発見するためだけではありません。アプリケーションを高速かつ効率的に、そして安定して稼働させ続けるために重要です。OpenTelemetryを利用することで、NGINXだけでなく、インフラ全体をリアルタイムで可視化できます。トラフィックスパイク、パフォーマンス低下、バックエンドの動作状況を関連付けて把握できるため、即座にインサイトを得られ、トラブルシューティングも容易になります。NGINXのメトリクスをOpenTelemetryへ取り込むことで、監視能力を強化し、不要なノイズを排除しながら、インフラを効率的かつ安定的に運用できるようになります。
また、OpenTelemetryによる監視でNGINXのパフォーマンスを最適化するためには、一般的なサーバー問題を理解し解決することも重要です。PHP-FPMが原因で発生するNGINX 502 Bad Gatewayエラーのトラブルシューティングについては、「Understanding NGINX 502 Bad Gateway: PHP-FPM」をご参照ください。
無料トライアルに登録して、今すぐインフラ監視を始めましょう。また、デモを予約し、監視ニーズについてMetricFireチームへ直接ご相談いただくことも可能です。