ICMPポーリングをSynthetic Monitoringで行うためのスクリプトを作成してみたけど、スクリプトを共有しただけで、その取得データをうまく活用する方法とかアイデアを共有できていなかったので、改めてQiitaブログで言語化して、みなさんに共有してみたいと思います。絶対の正解というものはないので、是非、みなさんのご要望に沿ってどんどんカスタマイズされていければ本望です。
New Relic株式会社のQiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
はじめに
ネットワーク周りの監視を行っているエンジニアの方達とお話をしていると、なんだかんだICMPを使った死活管理はやりたいというお話を耳にします。
New Relicの機能を使ってその要望を実現しようとすると、InfrastructureエージェントのFLEX機能を用いたスクリプトを用意するか、Network Performance Monitoringのping_onlyオプションを使うという王道があるかなと。一方で、『その死活管理の1サイクルがちゃんと実施されたのかはちゃんと把握できる様にしたい』や『各管理対象へのICMPの応答時間とかも可視化したい』と言われると、少し大変に。(できるけど、可能な限り楽したいんですよね。。)
そんな悩みがあったので、Synthetic MonitoringのScripted APIを用いてポーリングできるスクリプトをちょっと前に作ってみました。
Github上に置いているスクリプトはサンプルです。実際に試すときは、しっかりと検証をして頂きたいのと、自己責任でのご利用となります。
で...ここからが本題なのだけど、README.mdに沿って設定を行って、対象IPアドレスのリストを更新して…データが取れたぞとなった時に、『どうやって可視化すればいいんだっけ?』という質問をいくらか受けたので、記憶が真新しい内に残しておこうかなと思います。
早速取得したデータをみてみないとね
受け取った質問(その1): 『ちゃんと死活監視の1サイクルが行われたを確認したい』
ちゃんとポーリングが回っているかを確実に抑えておきたいですよね。
そんな時は...
[Synthetic Monitoring]-->[Monitors]と進み、対象のScripted APIモニター設定を選択します。
選択後、Monitorセクション内の[Results]に進んでください。
1サイクルが開始から終了までどの程度時間を要したかや、そのサイクルの成功や失敗を確認することができます。
受け取った質問(その2): 『それぞれ監視対象のポーリング結果を把握したい』
この質問は、計測したデータを可視化するにもつながるのですが、まずはどうやってデータを確認すればいいのかに触れてみたいと思います。
New Relic上で自由に計測した情報にアクセスするには、画面下部にあるQuery your dataからデータクエリ用のUIを立ち上げることで可能です。また、その際に、より具体的に参照データを指定する方法として、New Relic Query Language(NRQL)を用います。
最初に、データにアクセスするためのUIを起動しましょう。画面下部のQuery your dataと書いてあるバーをクリックします。

UIが表示されたら、早速そこに以下のNRQLを入力してみてください。
FROM CustomSyntheticICMPPolling
SELECT *
表示されたテーブルの内容をみながら、WHERE句でフィルタ条件を追加したり、SELECT句内でどういった計算を行なって可視化を行なっていくかを検討することになります。
FROM句に指定しているCustomSyntheticICMPPollingは、 Synthetic Monitoring内で設定したスクリプトで指定することで作成されたevent namespace(謂わゆる、テーブルと同様のもの)です。
Javascriptが得意な方は、event space名やカラムなどを自由に追加してみてください。
取得したデータを可視化してみるぞ
さぁ、取得したデータをテーブルとして確認する方法はわかったので、ここから取得したデータを目的に合わせて可視化することを検討してみよう。
これから例として挙げているダッシュボードは、もっと色々作り込める余地がいっぱいあります。対象システムの要件や、みなさんの好き嫌いに合わせてどんどんカスタマイズして下さい。
例として挙げているNRQL内に'Synthetic ICMP Pinger'という値を設定している箇所がありますが、実際に試される際は、Scripted APIを作成した時のモニター名で上書きして下さい。
以前、以下のQiita記事も書いているので、もし細かい情報を知りたければ参照してもらえると嬉しいです。
ちゃんとICMPポーリングのサイクルが回っているかを知りたい
SELECT percentage(count(*), WHERE result = 'SUCCESS')
FROM SyntheticCheck
FACET monitorName
WHERE monitorName = 'Synthetic ICMP Pinger'
SINCE 1 HOUR AGO
ポーリング対象の最新のステータスを一覧にして表示したい
FROM CustomSyntheticICMPPolling
SELECT latest(`Host IP`) AS `IPアドレス`, latest(Result) AS '最新ステータス'
FACET `Host Name` AS '対象名称'
SINCE 1 hours ago
ICMPポーリング実施箇所毎の実施成功率を表示したい
SELECT percentage(count(*), WHERE result = 'SUCCESS')
FROM SyntheticCheck
FACET locationLabel
WHERE monitorName = 'Synthetic ICMP Pinger'
SINCE 1 HOUR AGO
ポーリング対象機器への最新の結果割合を把握したい
FROM (
SELECT latest(Result) AS 'Status'
FROM CustomSyntheticICMPPolling
FACET `Host Name` AS '対象名称'
)
SELECT count(*)
FACET Status
ポーリング対象機器のステータス推移を時間軸に沿って確認したい
SELECT average( if(Result = 'success', numeric(1), numeric(0)) ) AS 'Status'
FROM CustomSyntheticICMPPolling
FACET `Host Name` AS '対象名称'
TIMESERIES 5 minutes
SINCE 1 HOURS AGO
ポーリング対象機器の応答時間を時間軸に沿って表示したい
SELECT average(ResponseTime)
FROM CustomSyntheticICMPPolling
FACET `Host Name` AS '対象名称'
SINCE 30 MINUTES AGO
TIMESERIES 5 minutes
WHERE Result ='success'
さいごに
計測したデータを一旦ダッシュボード化してしまえば、後はそのダッシュボードを見ておけば欲しい情報を直ぐに得られるので便利ですよね。実際に使ってもらう中で、新たに欲しい情報が出てくると思うので、どんどん使いやすくカスタマイズしてみて下さい。
次は、アラートの設定についても同じ様に書いてみたいと思います。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

