Mackerelの公式メトリックプラグインとOpenTelemetry Receiverの取得内容の比較 : NGINX 編
Mackerel - Qiita Advent Calendar 2024 - Qiita 3日目の記事です。
2日目は
id:missasan の Mackerel CREチーム ディレクターが育休復帰3ヶ月でやったこと - missasan's notebook でした。
id:missasan が復帰してから、そのブランクを感じさせない大立ち回りっぷりを見せており、さすがだなぁと同じチームメンバーとして感じていたのですが、そのまとめと背景についての記事となっておりました。ここ最近のMackerelの活動まとめにもなっております。ぜひご一読いただければと思います。
こんにちは、
id:do-su-0805 です。仕事では
id:do-su-0805 を利用していますが、普段は
id:do_su_0805 として生活しています。
はてなでは約5年ほど Platform SRE を担当した後、2023/05 よりMackerel CREチームでテクニカルサポートを担当しております。
2024年3月にOpenTelemetry 対応(パブリックベータ)提供開始 - Mackerel ブログ #mackerelioでのお知らせ以後、2024年11月、Mackerelのメトリックがオブザーバビリティ標準であるOpenTelemetryに正式対応し、あわせて価格体系を全面的に改定します - Mackerel ブログ #mackerelioや、Mackerelはオブザーバビリティプラットフォームとして進化していきます - Mackerel ブログ #mackerelio などでもお知らせしているように、MackerelはOpenTelemetryに対応する機能を公開・拡充し続けています。
詳しくは過去の公開記事等を参照いただけたらと思いますが、今回はOpenTelemetry Metricsに関するお話です。
OpenTelemetry Metricsに対応しました!といっても「いままでmackerel-agentで監視していたものから移行できるのかな?」という不安・懸念へのご案内の一つとして、NGINXの監視を題材とし、Mackerel公式プラグインである mackerel-plugin-nginx と、OpenTelemetry Collector の Receiver である NGINX Receiver での取得方法や取得内容を比較してみました。
mackerel-plugin-nginxを利用したメトリック取得設定の方法や、NGINX Receiver を利用したメトリック取得設定の方法については、以下をご参照ください。
- mackerel-plugin-nginx : ミドルウェアのメトリック可視化に公式プラグイン集を使う - Mackerel ヘルプ
- NGINX Receiver : Mackerel で OpenTelemetry のラベル付きメトリックを使ってみよう - Mackerel ブログ #mackerelio
NGINX のメトリック取得に必要な NGINX の設定について
取得に関しては、いずれも取得用の機構(プラグイン,Receiver)実行時に、ngx_http_stub_status_moduleの結果を提供するパスにアクセスする仕組みになっており、差分はありません。
mackerel-plugin-nginx
メトリックプラグイン - mackerel-plugin-nginx - Mackerel ヘルプ
mackerel-plugin-nginxは、実行された際にngx_http_stub_status_moduleの結果をパースしメトリックとして投稿しています。
NGINX Receiver
NGINX Receiverは、Receiverとして設定を有効にしたCollectorが起動した場合に、ngx_http_stub_status_moduleの結果をパースしメトリックとして投稿しています。
投稿されるメトリックについて
投稿されるメトリックに関しては、mackerel-plugin-nginxとNGINX Receiverではグルーピングの違いや差分値計算の有無といった違いがあります。*1
mackerel-plugin-nginx
プラグインヘルプ内監視できるメトリックに記載の通り、"Nginx Connections","Nginx requests","Nginx connection status"の3種類にグルーピングされた状態で投稿されます。

NGINX Receiver
opentelemetry-collector-contrib/receiver/nginxreceiver/documentation.md at main · open-telemetry/opentelemetry-collector-contrib に記載の通り、"nginx.connections_accepted","nginx.connections_current","nginx.connections_handled"の3種類にグルーピングされた状態で投稿されます。

投稿されるメトリックの比較
グルーピングの違い
現在の接続数を示すメトリックは、mackerel-plugin-nginxでは"Nginx Connection"に含まれる"Active connections"(custom.nginx.connections.connections)として投稿されていますが、NGINX Receiverでは"nginx.connections_current"として投稿される4本のうちstate="active"である1本になっています。


現在の接続数の内訳を示すメトリックは、mackerel-plugin-nginxでは"Nginx connection status"に含まれる"Reading"(custom.nginx.queue.reading),"Writing"(custom.nginx.queue.writing),"Waiting"(custom.nginx.queue.waiting)としてグルーピングされ投稿されており、NGINX Reveiverでも"nginx.connections_current"として投稿される4本のうちstate="reading",state="writing","state="waiting" の3本になっています。

受け付けたクライアント数や処理した接続数などを示すメトリックは、mackerel-plugin-nginxでは"Nginx requests"に含まれる"Accepted connections"(custom.nginx.requests.accepts),"Handled connections"(custom.nginx.requests.handled),"Handled requests"(custom.nginx.requests.requests)としてグルーピングされ投稿されていますが、NGINX Receiverでは"nginx.connections_accepted","nginx.connections_handled","nginx.requests"として投稿される1本のメトリックとして分かれて投稿されています。

確認できるメトリックの差分
上記「グルーピングの違い」に示した図を見ていただくと分かるように、受け付けたクライアント数や処理した接続数などを示すRequest,Accepts,Handledを表現するメトリックのみ、mackerel-plugin-nginxとNGINX Receiverでは値が異なっています。 mackerel-plugin-nginxでは差分値(前回の取得値との差分)となっており、NGINX Receiverでは累積値(ngx_http_stub_status_moduleが返す値をそのまま利用)となっています。
ただし、当方の検証環境では NGINX Receiver を利用した ngx_http_stub_status_module の結果取得をするためのリクエストにて"accepts"ならびに"handled"が増加せず、"requests"のみが増加する様子を確認しており*2、 実際に利用する際にはご自身の環境での出力の様子を併せてご確認いただき、必要な差分計算等をCollectorや利用時のPromQLにて実施いただくとよいと思います。
監視設定例
NGINX への現在の接続数が100を超えた場合にアラートを上げる例を紹介します。
mackerel-plugin-nginxを利用している場合は、以下のように custom.nginx.connections.connections メトリックに対してホストメトリック監視を作成いただくことで監視が可能です。

NGINX Receiverを利用している場合は、以下のように nginx.connections_current{state="active"} を対象にクエリによる監視を作成いただくことで監視が可能です。必要に応じてさらにラベルによる絞り込みなどを設定してください。

まとめ
Mackerelの公式メトリックプラグインであるmackerel-plugin-nginxと、OpenTelemetry Receiverである NGINX Receiver での取得内容について見ていきました。 一部、NGINX Receiverを利用する際は差分計算が必要な点は調整が必要となるかもしれませんが、取得内容としては同様の内容であるため、既存の監視から ためしにシフトしやすいものなのではないかと思います。
CREは仲間を探しています
CREは仲間になってくれる人を探しています。気になった人はぜひお声がけください。
明日の Mackerel Advent Calendar 2024 は
id:RyuGoo の記事です。12/02時点で書き終えているとのことでしたので、お楽しみに。