New Relicを使ったPING監視の実情

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

みなさんこんにちは。ネコが好きなマネージドサービス部の塩野です。
今回はNew Relicを使ったPING監視について書いていきたいと思います。

New RelicでのPING監視の位置付け

ご存じの方もいらっしゃると思いますが、New Relicでネットワーク監視を使用としてぶち当たる壁が一つあります。

New Relic PING監視でググるとSynthetics PINGの記事はたくさん見つかるのですが、ICMP PINGの記事は記事執筆時点ではなぜか殆ど見当たりません。もともとAPMからインフラ領域に進出してきたという背景があるため、ネットワーク監視という領域での需要が少ないのかもしれませんが、本家のドキュメントでも「PING結果を見る」というページを開いてみるとなぜかSynthetics PINGの話になっていて、「もしやSynthetics でICMP監視できるの?」と割と困惑する書きっぷりとなっています。なので、New Relicを使ったICMP監視について調べてみた結果を記事にまとめました。


docs.newrelic.com

記事の対象者

  • New Relicを使ったネットワーク監視について知りたい人。

※当記事では同じネットワーク監視でもSNMPの監視については対象外とします。

New Relic PING監視の実情

ドキュメントを読んだり、実際に動作確認した結果を表にまとめてみました。

監視方法 監視方法・監視内容 監視対象 ICMP監視可否
Synthetics ping New Relic社が運用する世界中のロケーション、又はプライベートMinionからのURL監視 URL 条件付きで可(※1)
Flex監視 Linux または Windows端末で実行するコマンドを使った監視 設定による 条件付きで可
ktranslateを使用した監視 Dockerコンテナ上で動作しているktranslateからの監視 SNMP又はICMP

※下記Synthetics pingの項目に詳細を記載

では、それぞれの監視設定から上記まとめに至った経緯を見ていきましょう。

Synthetics ping

Synthetics pingの設定は、Synthetics monitoring>Monitors>create monitorから設定できます。



しかしながら、この画面の詳細を開いてみるとURLを入力する欄こそあるものの、IPアドレスを入力する欄はなくこの監視はSyntheticsとしてのURL監視の一部でしかないことがわかります。


またIPアドレスだけを入力したとしてもエラーで弾かれるため、ICMP監視の機能自体がそもそもないとも判断できますできないと思っていましたが、監視できました。



<12/8 更新>
Synthetics環境の場合でも、ICMP監視の機能はあるようです。ただしScripted APIからICMP Pingの監視を実行するため、インターネット環境の場合は標準で準備されているパブリックMinionからおこなえますが、プライベート環境の場合はパブリックサブネットにプライベートMinionを立ち上げ、そこからURL監視の機能の一部としてICMP監視をおこなう流れとなります。設定は下記GitのレポジトリにScripted APIのコードがありますので、こちらを使用して監視をおこないます。

▼Scripted APIのコード
https://github.com/newrelic/quickstarts-synthetics-library/blob/main/library/ICMP/script.js

▼サンプルコード

var assert = require('assert');
var ping = require('net-ping');

var failures = [];

var session = ping.createSession({
  retries: 2,
  timeout: 1000
});

var checksCompleted = 0;

// Hosts are numbers in this example, but this could be replaced with a meaningful label for each host instead.
var checks = [
 { 'host': '1', 'ip': '192.168.0.1' },
]

function checkEndpoint(item) {
  session.pingHost(item.ip, function (error, target, sent, rcvd) {
    if (error) {
      failures.push(item.ip);
      console.log('ERROR - Ping failed for host ' + item.host + ' (IP ' + item.ip + ') with error: ' + error);
    }
    else {
      var timeRequired = rcvd - sent
      console.log('Ping successful for host ' + item.host + ' (IP ' + item.ip + '). Response (ms): ' + timeRequired)
    }

    checksCompleted++
    if (checksCompleted == checks.length) {
      session.close();
      if (failures.length !=0) {
        throw new Error("ERROR - " + failures.length + "/" + checks.length + " endpoints failed. Failures: " + failures);
      }
      else {
        console.log("All checks were successful.");
      }
    }
    else {
      console.log("More checks to complete. Continuing...");
    }
  })
}
// Check each endpoint
checks.forEach(checkEndpoint);

ICMPの監視先設定は下記のような形で実施します。

監視結果は下記のような形となります。

監視対象の変更が管理画面でできるのは非常に楽ですね。とはいえ、監視対象がたくさんあると別途Scripted APIを実行する費用が発生する可能性がある点については留意が必要になります。
※Simple ping以外はチェック数に応じて別途費用が発生する場合があります。

Flex監視

Flex監視ってそもそも何?という方もいらっしゃると思いますので、Flex監視について公式ドキュメントの内容から紐解いていきましょう。

Flexとは?
New Relic Flexは、アプリケーションに依存しないすべてを兼ね備えたツールで、このツールを使用して広範なサービスからメトリックデータを収集できます。Flexはインフラストラクチャエージェントとバンドルで提供されます。標準プロトコル(HTTP、ファイル、シェル)上のメトリクスを標準形式(JSONやプレーンテキストなど)で公開するアプリケーションをインストゥルメントできます。YAML設定ファイルを作成し、インフラストラクチャエージェントを起動すると、データがNew Relicに報告されます。

Flexの動作のしくみ
Flexはインフラストラクチャを使用して、レポートするデータを生成するコマンドを実行します。 docs.newrelic.com

簡単にまとめると、Flex監視とはWindowsまたはLinuxにインストールする監視エージェント(インフラストラクチャエージェント)にバンドルされているモジュールを使って、同モジュールが実行したコマンド結果をNew Relicに送信する機能があるということになります。つまり、Flex機能を使ってPINGコマンドを叩いた結果をNew Relicに送信すればPING監視をすることもできるということになります。

詳細の設定方法は2023/12/06公開の下記記事を参照のこと
New RelicのFlex機能を使ったICMP PING監視
blog.serverworks.co.jp

ktranslateとは

ktranslateはオープンソースで開発されているソフトの一部機能で、その機能の開発元はKentikというNetwork Observability Platformを提供している会社です。KentikにとってのNew Relicの立ち位置は、ネットワーク可観測性ソリューションを提供することとテクノロジー パートナーとしてKentikと提携関係にあります。Kentikが提供しているものの中でKentik Syntheticsというものがあり、New Relicが提供しているWebパフォーマンスモニタはKentikが提供している機能で、下記記事より彼らがベンダーに対してどのように考えてどう立ち振る舞ってほしいかという意図を読み解くことができると思います。

Kentik は、合成テスト結果と関連するトラフィック フロー情報を並べて提供できるため、ユーザーが実際に経験しているエクスペリエンスと、状況が変化した場合にどのようなエクスペリエンスを経験するかを詳細に理解できます。

ベンダーに責任を持たせることも、私たちが New Relic を支援している分野です。New Relic のシニア ソフトウェア エンジニアリング マネージャーである April Carter 氏は、「Kentik のおかげで問題を診断できるようになり、ベンダー関連の場合は、どのリンクがいつ影響を受けるかを正確にベンダーに即座に伝えることができます。」と述べています。 www.kentik.com

ktranslateを使ったICMP監視

それでは本題のICMP PING監視について見ていきましょう。まず前提条件としてktranslateを使う必要があること、ktranslateはDocker上で動作するSNMP監視のツールであることを理解しておく必要があります。詳細は別記事に記載しますが、設定に関する情報もあまり多くなく、実際に監視した際の情報もあまりリッチでないというところに留意しておく必要があります。

それでは監視内容について見ていきましょう。下記記事に記載のとおりsnmp-base.yamlのDevice設定の中でping_only属性をTrueにすることで実現できます。

docs.newrelic.com

詳細の設定方法は2023/12/07 公開の下記記事を参照のこと
New RelicでICMP PING監視~KTranslateを使った監視設定方法~
blog.serverworks.co.jp

まとめ

New Relicを使ったPING監視の実情についてまとめてみました。実際PING監視といっているのに実はICMP監視じゃない?という所に面食らった人も多いのではないかと思いますが、設定できないわけではなくアプリケーションObservabilityを重視する同社の方針から、ネットワーク機器に対してのObservabilityについてはドキュメントやダッシュボードなどの状況を見る限り現時点で重要度が低いのかもしれません。とはいえ、監視ができないわけでもないので、もし使いたいのであれば使えるものは使っていく方針でよいのではないかと考えています。

こちらの記事がどなたかのお役に立てれば幸いでございます。

個人的なお願いごと

弊社内の運用基盤でもNew Relicを使った監視をしており、その中で蓄積されたノウハウや知見などに興味がある方が多くいらっしゃる場合は、個人的にこういったブログ記事を増やしたりユーザーグループなどでの発表を増やしてもいいのかと考えています。もし興味がある、もっとこの手の情報を知りたいという方が多くいらっしるようであれば、こういうのも書いてとリクエストを添えた上で記事の拡散の際ににご協力頂ければ嬉しいです。

関連記事

New RelicのFlex機能を使ったICMP PING監視
blog.serverworks.co.jp

New RelicでICMP PING監視~KTranslateを使った監視設定方法~
blog.serverworks.co.jp

塩野 正人 ブログ記事一覧はコチラ

マネージドサービス部所属。ネコが好きです。