【DeepDive】New Relicネットワーク監視(NPM)の設定値の挙動についての検証結果

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス部MSS課の塩野(正)です。

New Relicのネットワーク監視(NPM)について度々話題に取り上げていますが、 NPMサーバで使用しているktranslateの設定ファイル snmp-base.yaml で気になる点がありましたので、 その内容と実際にどのような挙動を示すのか調査した結果を記事にまとめました。

目次

記事の概要

元ネタはこちらになりますが、New Relicのネットワーク監視(NPM)ではICMPやSNMP、Syslog、NetFlowの監視を行うことができます。 その中で、どのデバイスに対してどのようなタイミングで監視をするかという設定を定義する snmp-base.yaml ファイルの記載内容で 各デバイスに対してのポーリングタイミングはglobalセクションとdevicesセクションのどちらでも設定できるようになっています。

blog.serverworks.co.jp

で、どちらの設定がどのように監視設定に影響するのかという観点でみると、公式ドキュメントには以下のように記載されていますが、 実際の挙動と公式ドキュメントの内容に差異があるのではないかということで、動作検証をした記事になります。

公式ドキュメントの情報を整理する

公式ドキュメントに記載されているグローバルセクションの poll_time_sec には以下のような記載がありました。

デバイスをポーリングする時間(秒単位)。これは、 devices..poll_time_sec属性を使用してデバイスごとにオーバーライドできます。デフォルトでは、 60に設定されています。

公式ドキュメントに記載されているデバイスセクションの poll_time_sec には以下のような記載がありました。

SNMPポーリング頻度を秒単位で示します。この設定は、 global.poll_time_sec属性を上書きするために使用されます。

実際の挙動を確認する

globalセクション=devicesセクションで、ping_interval_secを10秒にした場合

ドキュメント上は、最小ポーリングタイミングが30秒となっていることから基本的には30秒以下でポーリングできない認識ですが、実際にできないのか30秒間隔でポーリングするのか試してみました。

snmp-base.yamlの設定

devices:
  ping_only__10.0.17.52:
    device_name: ping_only
    device_ip: 10.0.17.52
    provider: kentik-ping
    ping_only: true
    ping_interval_sec: 10
global:
  poll_time_sec: 10
  mib_profile_dir: /etc/ktranslate/profiles
  mibs_db: /etc/ktranslate/mibs.db
  timeout_ms: 3000

実施結果

想定通り30秒間隔でポーリングしていることがわかりました。 そのため、最短間隔でpingを打ちたい場合は ping_interval_sec を 30 とするのがよさそうです。

globalセクション>devicesセクションにした場合

今度はglobalセクションのping_interval_secをdevicesセクションより大きくしてみました。

設定概要は下記の通り

section name global devices
ping_interval_sec 120 (sec) 60 (sec)

snmp-base.yamlの設定

devices:
  ping_only__10.0.17.52:
    device_name: ping_only
    device_ip: 10.0.17.52
    provider: kentik-ping
    ping_only: true
    ping_interval_sec: 60
global:
  poll_time_sec: 120
  mib_profile_dir: /etc/ktranslate/profiles
  mibs_db: /etc/ktranslate/mibs.db
  timeout_ms: 3000

実施結果

globalセクションで設定した間隔でポーリングしていることがわかりました。 globalセクションの値は、全体のポーリング間隔の基準ではありますが、より短い方の値を設定するのがよさそうです。

globalセクション<devicesセクションにした場合

今度はdevicesセクションのping_interval_secをglobalセクションより大きくしてみました。

設定概要は下記の通り

section name global devices
ping_interval_sec 30 (sec) 60 (sec)

snmp-base.yamlの設定

devices:
  ping_only__10.0.17.52:
    device_name: ping_only
    device_ip: 10.0.17.52
    provider: kentik-ping
    ping_only: true
    ping_interval_sec: 60
global:
  poll_time_sec: 30
  mib_profile_dir: /etc/ktranslate/profiles
  mibs_db: /etc/ktranslate/mibs.db
  timeout_ms: 3000

実施結果

動作確認した結果、なんとデータが送信されませんでした! ドキュメント上では、devicesセクションの値で上書きしていると記載されていますが、 下記のdockerのログを見る限り Sending 0 probes となっていることから、ひとつの可能性として送信対象として認識されていないと推測されます。

少なくともSending x probesが0以上の場合はNew Relic側に何らかのデータが送信されており、Sending x probesが0の場合は何度試してもデータ送信されない状況でした。

globalセクション<devicesセクション時のdockerログ

参考)設定値

section name global devices
ping_interval_sec 30 (sec) 60 (sec)
ktrans-ping  | 2025-05-23T08:03:56.695 ktranslate/ [Info] KTranslate monitorMetricsInput Starting
ktrans-ping  | 2025-05-23T08:03:56.696 ktranslate/ [Info] KTranslate Turning off HTTP server.
ktrans-ping  | 2025-05-23T08:03:56.696 ktranslate/ [Info] KTranslate do sendToKTranslate Starting
ktrans-ping  | 2025-05-23T08:03:56.704 ktranslate/ [Info] KTranslate>ping_only Pinger reset to interval: 1m0s, count: 0
ktrans-ping  | 2025-05-23T08:03:56.704 ktranslate/ [Info] KTranslate>ping_only snmpPing: First run will be at 2025-05-23 08:04:08.720189445 +0000 UTC. Running every 30s, Sending 0 probes
globalセクション=devicesセクション時のdockerログ

参考)設定値

section name global devices
ping_interval_sec 30 (sec) 30 (sec)
ktrans-ping  | 2025-05-23T08:08:40.613 ktranslate/ [Info] KTranslate monitorMetricsInput Starting
ktrans-ping  | 2025-05-23T08:08:40.613 ktranslate/ [Info] KTranslate Turning off HTTP server.
ktrans-ping  | 2025-05-23T08:08:40.613 ktranslate/ [Info] KTranslate do sendToKTranslate Starting
ktrans-ping  | 2025-05-23T08:08:40.627 ktranslate/ [Info] KTranslate>ping_only Pinger reset to interval: 30s, count: 1
ktrans-ping  | 2025-05-23T08:08:40.627 ktranslate/ [Info] KTranslate>ping_only snmpPing: First run will be at 2025-05-23 08:09:03.606450741 +0000 UTC. Running every 30s, Sending 1 probes
globalセクション>devicesセクション時のdockerログ

参考)設定値

section name global devices
ping_interval_sec 60 (sec) 30 (sec)
ktrans-ping  | 2025-05-23T08:10:17.875 ktranslate/ [Info] KTranslate monitorMetricsInput Starting
ktrans-ping  | 2025-05-23T08:10:17.875 ktranslate/ [Info] KTranslate Turning off HTTP server.
ktrans-ping  | 2025-05-23T08:10:17.875 ktranslate/ [Info] KTranslate do sendToKTranslate Starting
ktrans-ping  | 2025-05-23T08:10:17.883 ktranslate/ [Info] KTranslate>ping_only Pinger reset to interval: 30s, count: 2
ktrans-ping  | 2025-05-23T08:10:17.883 ktranslate/ [Info] KTranslate>ping_only snmpPing: First run will be at 2025-05-23 08:11:12.224853666 +0000 UTC. Running every 1m0s, Sending 2 probes

おまけ:devicesセクションのping_interval_secを削除した場合

globalセクション<devicesセクションにした場合の状況から、devicesのping_interval_secの値は重要な意味を持つ可能性があるため、 一応devicesセクションに ping_interval_sec がなくても動作するかどうかという観点で確認してみました。

設定概要は下記の通り

section name global devices
ping_interval_sec 30 (sec) N/A

snmp-base.yamlの設定

devices:
  ping_only__10.0.17.52:
    device_name: ping_only
    device_ip: 10.0.17.52
    provider: kentik-ping
    ping_only: true
global:
  poll_time_sec: 30
  mib_profile_dir: /etc/ktranslate/profiles
  mibs_db: /etc/ktranslat

docker起動時のログ

ktrans-ping  | 2025-05-23T08:30:09.143 ktranslate/ [Info] KTranslate monitorMetricsInput Starting
ktrans-ping  | 2025-05-23T08:30:09.143 ktranslate/ [Info] KTranslate Turning off HTTP server.
ktrans-ping  | 2025-05-23T08:30:09.143 ktranslate/ [Info] KTranslate do sendToKTranslate Starting
ktrans-ping  | 2025-05-23T08:30:09.153 ktranslate/ [Info] KTranslate>ping_only Pinger reset to interval: 1m0s, count: 0
ktrans-ping  | 2025-05-23T08:30:09.153 ktranslate/ [Info] KTranslate>ping_only snmpPing: First run will be at 2025-05-23 08:30:41.716906999 +0000 UTC. Running every 30s, Sending 0 probes

実施結果

なんとなく起動時のログでその後の状況が推測できてしまうのがアレな感じですが、予想通りデータ送信されませんでした。

まとめ

あくまでも私の検証結果から推察した推奨設定となりますが、ポーリング間隔についてはglobalセクションとdevicesセクションは同じ値を使用し、どちらも値を設定する方がいいのではないかと推測します。 この記事がどなたかのお役に立てれば幸いです。

宣伝

弊社では、お客様環境のオブザーバビリティを加速するためのNew Relicアカウント開設を含めた伴走型のNew Relic導入支援サービスをご提供しております。 もしご興味をお持ちの方は、こちらのお問合せフォームよりお問合せ頂けましたら幸いでございます。

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営。