APIはあらゆるモダンアプリケーション設計の必須要素であるという事実は、特段驚くべき新発見でもありません。開発者として、誰かのAPIを使っているとしても、またはそれを使用してアプリケーションとのインタラクションを許可しているとしても、APIは優れたコーディングプラクティスの構造の一部です。New Relic(および全般的なオブザーバビリティ)のユーザーは、APIがメトリクスとイベントの優れたソースであることもご存知かと思います。APIが純粋に「ビジネス」関連の情報(例えば「販売された靴の数」など)をレポートしている場合でも、より標準的なアプリケーションパフォーマンステレメトリと組み合わされると、そのAPIデータは価値を持ちます。 今回のブログでは、APIから標準のJSON 出力を取得し、それをFlexインテグレーションを使用して、どのようにNew Relicに取り込むかをご紹介します。

New Relicのユーザーにとって、Flexインテグレーションが真価を発揮するのはこのときです。それについて、以下に解説します。Flexについては以前のブログで解説しました。また、Flexを使用してJSON形式でデータを収集する方法についても説明しました。今回のブログ記事では、もう一段階話を進めて、「リアル」なAPIを統合する方法をご紹介します。すなわち、膨大な量の処理を行っているウェブベースのシステムからのデータを統合する方法についてです。

今回は、サンプルのアプリケーションとして、Pi-holeを使用します。Pi-holeは、ネットワークのドメインネームシステム(DNS)サーバーとして機能します。悪意のある、不要な、または単に不適切なコンテンツを、URLレベル(ウェブページやウェブサイト全体をブロックする)だけでなく個別のコンポーネントレベルでフィルタリングして除外します。そのため、ページ内のひとつの画像や埋め込み動画をブロックすることがあっても、その他の幾つかの画像は通過する可能性があります。 

そんなウェブページはあまりないだろうと思うかもしれませんが、実際には、こういったリンクを使用しているウェブサイトは多々あります。以下は、私の自宅での典型的な1日の統計です。

Pi-holeサーバー上に表示されたDNSクエリの統計

ここでのポイントは、このシステムは常に大量のデータを処理しており、パフォーマンスは監視が必須であるということです。そのため、今回のブログの例として挙げるのに理想的な選択肢です。

Pi-hole APIの仕組み

もしPi-holeを運用しているなら、http://<your pi-hole url>/admin/api.php?summaryRawにアクセスすることでAPIからデータを取得できます。

結果は以下のようになります。

{”domains_being_blocked”:115897,”dns_queries_today”:284514,”ads_blocked_today”:17865,”ads_percentage_today”:6.279129,”unique_domains”:14761,”queries_forwarded”:216109,”queries_cached”:50540,”clients_ever_seen”:38,”unique_clients”:22,”dns_queries_all_types”:284514,”reply_NODATA”:20262,”reply_NXDOMAIN”:19114,”reply_CNAME”:16364,”reply_IP”:87029,”privacy_level”:0,”status”:”enabled,””gravity_last_updated”:{”file_exists”:true,”absolute”:1567323672,”relative”:{”days”:”3,””hours”:”09,””minutes”:”53”}}}

JSONデータをもう少し見やすいフォーマットに変換してみましょう。

「見やすい」JSON形式の出力

つまり、一度このJSON式を見やすい形式で表示させれば、拍子抜けするほど簡単に(こちらのシリーズで説明した通り、Flexインテグレーションを使用して)、これらを収集してNew Relicに送信し、ネットワークのパフォーマンスについてのさらなるインサイトを得ることができます。この時点で、情報を以下のようなグラフで表示できるようになります。

New RelicのJSONデータのグラフ

Pi-holeにアクセスできるネットワーク上の任意のサーバーにNew Relic Infrastructureエージェントをインストールしている(ここでも、設定に関するヘルプが必要な場合には、こちらから以前のブログをご覧ください)と想定した場合、立ち上げと運用にそれほど複雑な手順は必要ありません。

まず、YAMLファイルは以下のようになります(このサンプルファイルは、New Relic Flex GitHubリポジトリのexamplesフォルダでもご確認いただけます)。

 

integrations:
  - name: nri-flex
    config:
      name: pihole_simple
      apis:
        - name: pihole_simple
          url: http://pi.hole/admin/api.php?summaryRaw&auth= #<your API Key Here>
          headers:
            accept: application/json
      remove_keys:
        - timestamp

次に、2つの別々のチャートを設定するために必要なNew Relic Query Language(NRQL)クエリは以下の通りです。

「Query Volume(クエリ数)」のチャートの場合:

From pihole_simpleSample SELECT average(dns_queries_all_replies), average(dns_queries_today), average(queries_forwarded), average(queries_cached), average(dns_queries_all_types) TIMESERIES

「Blocking Activity(アクティビティのブロック)」のチャートの場合:

From pihole_simpleSample SELECT average(ads_blocked_today), average(domains_being_blocked) TIMESERIES

もちろんこれは、Pi-holeサーバー(そしてさらには、データを提供するエンドポイントを持つ、APIを備えたあらゆるデバイスやサービス)から得られるインサイトの始まりにすぎません。さらなる使用事例を見つけたら、SNSからお気軽にご連絡いただくか、カンファレンスや交流会でお会いした際にぜひお声がけください。