この記事では、ネットワーク監視ソフト「PRTG Network Monitor」(以下、PRTG)を使い、さまざまなサービス、機器をREST API経由で監視する方法を紹介します。
REST APIを持つサービスや機器の状態、リソース、さまざまな値をPRTGで監視できるようになります。
文:ジュピターテクノロジー やすだ
※本記事に掲載されている商品名・サービス名などは、各社の商標または登録商標です。
はじめに
昨今では、SaaSをはじめとして、さまざまなサービスや機器がREST APIで値を返すようになっています。PRTGは、これらのREST APIのエンドポイントに対して、リクエストを送信し、そのレスポンス(JSONまたはXML)を監視することができます。
監視した値にしきい値を設定してアラートを送信したり、長期間の履歴をグラフやテーブルで確認したりできます。
PRTGでREST API監視をするメリット
GUI操作でかんたん・安心設定
PRTGなら、GUIから設定するだけでかんたんにREST API監視をすることができます。パスワードやトークンなどの認証情報はマスク表示されるため、安心して設定・管理できます。
SNMPやその他の監視方法と併用できる
PRTGは、Ping、SNMPやその他の監視プロトコルにも対応しています。REST API監視と併用し、さまざまなサービス、機器を一元的に監視することができます。
PRTGの監視画面の例
PRTGはセンサーという定義済みの監視テンプレートを用いて監視を行います。
ここでは、「REST カスタム v2」というセンサーを使用します。
センサーの設定画面にAPIエンドポイントや認証情報などを入力するだけで、REST API監視を開始できます。
※PRTGには、FortiGateなど一部製品向けにREST API監視の専用センサーも用意されています。本記事では、REST API監視の基本を紹介するため、「REST カスタム v2」センサーを使用します。
FortiGateのCPU使用率を監視
FortiGateのCPU使用率を、「REST カスタム v2」センサーで監視しています。

ここでは、以下のJSON(抜粋)の太字部分の値から、現在のCPU使用率を監視しています。
{
"results": {
"cpu": [{
"current": 1,
"historical": {
"1-min": {
"values": [
[1783657895000, 1],
...
値は365日(デフォルト)分保存され、グラフやテーブルで確認することができます。
しきい値を設定して、アラートを発報することもできます。


FortiGateをREST APIで監視する場合は、専用センサーを利用することもできます。設定方法については、以下の記事をご覧ください。
FortiGateのセッション数・CPU・メモリ・VPNを「PRTG」でまとめて監視する
ステータス文字列を監視
レスポンスJSON内のステータス文字列を監視するセンサーです。REST APIでは文字列が返される場合もあります。この例では「Yes」を正常、「No」を異常としてアラートを発報します。

【事前準備】APIエンドポイントとレスポンス、認証方法の確認
PRTGでREST APIを監視する前に、監視対象のAPIについて、以下を確認します。
- APIエンドポイントとレスポンス
- 認証方法
これらの情報を事前に確認しておくことで、「REST カスタム v2」センサーの設定をスムーズに行えます。
APIエンドポイントとレスポンス
各ベンダーのマニュアルやAPIリファレンスなどで、REST APIのエンドポイント(URL)とレスポンス形式を確認します。
詳細なAPI仕様については、各ベンダーへお問い合わせください。
監視したい項目を取得できるAPIエンドポイントが存在するか、また、そのレスポンスがPRTGで取得可能なJSONまたはXML形式で提供されているかを確認します。
例えば、FortiGateでは、CPUなどのシステムリソース情報を取得するAPIが用意されています。
このAPIエンドポイントにHTTP GETメソッドでリクエストを送信すると、JSON形式でレスポンスが返ってきます。レスポンスには、CPU使用率やメモリ使用率などの値が含まれています。
FortiGateのREST APIリクエスト例:
GET https://<FortiGate-IP>/api/v2/monitor/system/resource/usage
レスポンス例(一部抜粋):
{
"results": {
"cpu": [{
"current": 1,
"historical": {
"1-min": {
"values": [
[1783657895000, 1],
...
]
}
}
}],
"mem": [{
"current": 49,
"historical": {
"1-min": {
"values": [
[1783657895000, 49],
...
]
}
}
}]
}
}
認証方法
同様に、APIの認証方法も確認します。「REST カスタム v2」センサーは、以下の認証方式に対応しています。
- ベーシック認証
- ベアラー認証
- セッションベース認証
また、API側の仕様によっては、URLのクエリパラメーターとして認証情報を指定することもできます。
FortiGateでは、ベアラー認証、URLのクエリパラメーターによるAPIキー認証、およびセッションベース認証に対応しています。
本記事では、ベアラー認証と、URLのクエリパラメーターとしてAPIキーを指定する方法を紹介します。
※OAuth 2.0など、事前の認証処理や動的な認証情報の生成が必要な認証方式には、REST カスタム v2センサー単体では対応できません。スクリプトなどを使用したカスタムセンサーの作成が必要です。
※AzureやAWSなど、主要なクラウドサービスについては、PRTGに専用センサーが用意されています。
【事前準備】監視対象機器側の設定
REST APIで監視するには、監視対象機器側でAPIアクセス用の設定が必要です。
一般的には、以下の設定を行います。
- REST API機能の有効化
- APIアクセス用ユーザーやアカウントの作成
- API認証情報(APIキー、トークン、ユーザー名・パスワードなど)の発行
- APIアクセス権限の設定
- PRTGからのアクセスを許可する設定
必要な設定項目や手順は製品によって異なるため、各ベンダーのマニュアルを確認してください。
本記事では、例としてFortiGateでAPIキー(APIトークン)を設定する方法を説明します。
FortiGate側でAPIキーを作成
FortiGateをREST APIで監視するには、APIキーを作成します。FortiGateのGUIで以下の手順を実行します。
- システム > 管理者 > 新規作成 > REST API管理者 に進み、新しいREST APIユーザーを作成
- 「ユーザー名」、「管理者プロファイル」を設定(項目「設定」が「読取り」である必要あり)
- 「PKIグループ」が不要なら無効化
- 「信頼されるホスト」にPRTGのIPアドレスが含まれるように設定
- 作成後に表示される「新規APIキー」を保管
※詳しい手順は、FortiGateのマニュアルや以下のメーカーブログをご参照ください。
Monitoring FortiGate Firewalls with Paessler PRTG
APIリクエストとレスポンスを確認
センサーで監視をする前に、機器に対してAPIリクエストを送信し、レスポンスを確認します。
このリクエストとレスポンスを基に、「REST カスタム v2」センサーを設定します。
ここではFortiGateを例として、ベアラー認証と、URLのクエリパラメーターとしてAPIキーを指定する方法をそれぞれ紹介します。
ベアラー認証を使用したリクエスト
ベアラー認証では、HTTPリクエストヘッダーの「Authorization」にAPIキー(Bearerトークン)を指定します。
curlでリクエストを送信する場合は、以下のようになります。
curl -k -H "Authorization: Bearer <APIキー>" "https://<FortiGateのIP>/api/v2/monitor/system/resource/usage"
URLのクエリパラメーターとして認証情報(APIキー)を指定
FortiGateでは、ベアラー認証を使用せず、URLのクエリパラメーターとして認証情報(APIキー)を指定して認証することもできます。
その場合のリクエスト例は以下のとおりです。
https://<FortiGateのIP>/api/v2/monitor/system/resource/usage?access_token=<APIキー>
レスポンス
JSONでレスポンスが返ってきます。一部を抜粋して掲載します。
JSONパス「$.results.cpu[0].current」には現在のCPU使用率が、「$.results.mem[0].current」には現在のメモリ使用率が格納されています。
また、「$.results.cpu[0].historical[“1-min”].values」のように過去のCPU使用率も格納されていますが、PRTGでは現在値を定期的に取得し、履歴はPRTG側で管理できます。
そのため、本記事では「$.results.cpu[0].current」を監視します。
{
"results": {
"cpu": [{
"current": 1,
"historical": {
"1-min": {
"values": [
[1783657895000, 1],
...
]
}
}
}],
"mem": [{
"current": 49,
"historical": {
"1-min": {
"values": [
[1783657895000, 49],
...
]
}
}
}]
}
}
PRTGで「REST カスタム v2」センサーを追加
ここからはPRTGのウェブGUIで操作していきます。
監視対象機器を「デバイス」として登録
PRTGは監視対象機器を「デバイス」として追加して監視を行います。本記事では、FortiGateファイアウォールの管理IPアドレスをPRTGのデバイスとして追加します。
- 「+」アイコン|「デバイスの追加」をクリック
- デバイスを登録する場所を選択して「OK」をクリック
- 「新規デバイスの追加」画面で以下を入力して「OK」をクリック
- デバイス名:<任意のデバイス名>
- IPv4 アドレス/DNS 名:<監視対象機器のIPアドレス>
- 「保存」をクリック


これで監視対象機器を「デバイス」として登録できました。
デバイスに「REST API の資格情報」を設定
PRTGで登録した「デバイス」の「REST API の資格情報」を、APIの認証方法に合わせて設定します。
本記事では、ベアラー認証と、URLのクエリパラメーターにAPIキーを指定する方法をそれぞれ説明します。
使用する認証方法に合わせて、いずれかを設定してください。
ベアラー認証のトークンを設定
次の手順でベアラー認証のトークンを設定します。
- 設定するデバイスをクリック
- デバイスの「設定」タブをクリック
- 「REST API の資格情報」の「引継ぎ元」のチェックボックスからチェックを外す
- 「認証方法」で「ベアラー認証」をチェック
- 「ベアラートークン」にAPIキーを入力
- 「保存」をクリック

クエリパラメーターで使用するAPIキーを設定
URLのクエリパラメーターにAPIキーを指定する場合は、APIキーをあらかじめプレースホルダーとして保存します。
センサーでURLを設定する際に、プレースホルダー経由でAPIキーを指定します。
- 設定するデバイスをクリック
- デバイスの「設定」タブをクリック
- 「REST API の資格情報」の「引継ぎ元」のチェックボックスのチェックを外す
- 「認証方法」で「なし(デフォルト)」をチェック
- 「プレースホルダー 1」にFortiGateのAPIキーを入力
- 「プレースホルダー 1 の説明」に説明文を入力(任意)
ここでは「APIキー」と入力 - 「保存」をクリック

センサーを設定
デバイスにセンサーを追加します。
- デバイスの「センサー追加」をクリック
- 「センサーの追加」画面で、「検索」フィールドに「REST」と入力
- 「REST カスタム v2」をクリック



リクエストを送信するURLを、使用する認証方法にあわせて「固有のセンサー設定」の「要求 URL」に入力します。
「要求 URL」の設定:ベアラー認証の場合
ベアラー認証を使用したリクエストは以下でした:
curl -k -H "Authorization: Bearer <APIキー>" "https://<FortiGateのIP>/api/v2/monitor/system/resource/usage"
このうち、ヘッダーに追加した「”Authorization: Bearer “」はすでに「REST API の資格情報」に設定しています。
ここでは「固有のセンサー設定」の「要求 URL」に以下を入力します。
https://<FortiGateのIP>/api/v2/monitor/system/resource/usage
※「<FortiGateのIP>」部分にはプレースホルダー「%host」を使用することもできます。
「%host」はデバイスに設定したIPアドレスまたはDNS名に置換されます。
また、HTTP GETメソッドでリクエストを送信し、JSONでレスポンスがあるので、その他の設定はデフォルト値のまま「保存」をクリックします。

「要求 URL」の設定:クエリパラメーターで認証情報を指定する場合
クエリパラメーターとして認証情報を指定したリクエストは以下でした:
https://<FortiGateのIP>/api/v2/monitor/system/resource/usage?access_token=<APIキー>
このうち、「access_token=」パラメーターで指定するAPIキーは「プレースホルダー 1」に設定しています。
ここでは「固有のセンサー設定」の「要求 URL」に以下を入力します。「%restplaceholder1」を使用して、プレースホルダーでAPIキーを指定しています。
https://<FortiGateのIP>/api/v2/monitor/system/resource/usage?access_token=%restplaceholder1
また、HTTP GETメソッドでリクエストを送信し、JSONでレスポンスがあるので、その他の設定はデフォルト値のまま「保存」をクリックします。

「チャネル設定」でJSONパスを指定
ここからは、「ベアラー認証」、「クエリパラメーターとして認証情報を指定」どちらの認証方法を使用する場合でも共通です。
「チャネル設定」でJSONパスを指定し、センサーのチャネルで監視する値を指定します。
以下のJSONレスポンスより、現在のCPU使用率のJSONパスは「$.results.cpu[0].current」です。
{
"results": {
"cpu": [{
"current": 1,
"historical": {
"1-min": {
"values": [
[1783657895000, 1],
...
]
}
}
}],
"mem": [{
"current": 49,
"historical": {
"1-min": {
"values": [
[1783657895000, 49],
...
]
}
}
}]
}
}
次のように設定項目を入力します。
- チャネル #1 JSONPath/XPath:$.results.cpu[0].current
- チャネル #1 名前:センサーのチャネルで表示する名称
ここでは「CPU current」と設定 - チャネル #1 値の種類:絶対(整数)
- チャネル #1 単位:パーセント(CPU)
※値の種類、単位はJSONレスポンスの値に合わせます。
「作成」をクリックして、センサーを作成します。

ヒント:1つのREST カスタム v2センサーでは複数のチャネルを定義できます。例えば、「チャネル #2」を有効にして、メモリ使用率のJSONパス「$.results.mem[0].current」を追加すると、CPU使用率とメモリ使用率を1つのセンサーで監視できます。
文字列を返す場合の監視方法
ここまでは、整数値を返すAPIの監視について紹介しました。
APIによっては、レスポンスとして文字列が返される場合があります。
例えば、次のPRTGのREST APIのJSONレスポンスでは、「$.sensordata.lastvalue」の値として「Yes」または「No」の文字列が返されます。
{
"prtgversion": "26.2.120.1477+",
"sensordata": {
"name": "DNS v2",
"sensortype": "paessler.DNS.dns_v2.49",
"interval": "60",
"lastvalue": "Yes",
"lastmessage": "OK: A=142.251.12.100, 142.251.12.101, 142.251.12.102, 142.251.12.113, 142.251.12.138, 142.251.12.139",
}
}
文字列に応じてセンサーのステータスを変化させることができます。
センサーの「チャネル設定」で次のように設定します。
- チャネル #1 JSONPath/XPath:$.sensordata.lastvalue
- チャネル #1 値の種類:ステータス(文字列)
- 「アップ」ステータスにマッピングされているチャネル #1 文字列:Yes
- 「ダウン」ステータスにマッピングされているチャネル #1 文字列:No
- チャネル #1 不明な文字列の処理:「警告(前兆あり)」ステータス

これで、「Yes」の場合はセンサーがアップ(緑)、「No」の場合はダウン(赤)、それ以外の文字列の場合は警告(黄)となります。
まとめ
本記事では、PRTGの「REST カスタム v2」センサーを使って、REST APIを監視する方法を紹介しました。APIエンドポイントや認証方法を確認し、JSONPathやXPathを設定することで、JSONやXMLから必要な値を取得して監視できます。
数値だけでなく、文字列を監視してセンサーのステータスを変更することもできるため、APIで取得できるさまざまな情報を柔軟に監視できます。
APIを提供するサービスや機器であれば、多くの場合、同様の手順で監視できます。標準センサーでは対応していない監視項目についても、REST APIを活用することで監視対象を広げることができます。


