web-dev-qa-db-ja.com

REST APIを監視する最良の方法は何ですか?

RESTfulパターンに基づいてAPIを作成しましたが、それを監視する最良の方法は何だろうと思いましたか?各リクエストの統計をどうにかして収集できますか?また、リクエストをどの程度深く監視できますか?

また、オープンソースソフトウェアを使用して実行できますか(独自の監視サービスを構築している場合もあります)、サードパーティのソフトウェアを購入する必要がありますか?

オープンソースソフトウェアを使用して達成できる場合、どこから始めますか?

24
0x1ad2

監視が解決すると考えるコアニーズを特定することから始めます。 「何を知りたいですか?」という2つの質問に答えてみてください。および「その情報に基づいてどのように行動したいのですか?」.

「何を知りたいですか?」の例

  • 長期にわたるパフォーマンス
  • 最大のAPIユーザー
  • 最も一般的に使用されるAPI機能
  • APIでエラーが発生しました

「その情報に基づいてどのように行動したいですか?」の例

  • 既知の測定値のダッシュボードを確認する
  • 予想される範囲を超えて何かが変更されたときにアラートを受け取る
  • その状態につながったトレース実行
  • システムの寿命全体の測定値を確認する

これらの質問に答えられる場合は、関心のあるメトリックをキャプチャする適切なサードパーティソリューションを見つけるか、APIの適切なセクションに監視プローブを挿入して、知っておくべきことを伝えます。主に Laravel ユーザーであることに気づいたので、知りたい指標の多くはbefore( Controller上のフィルターの登録前 )およびafter( アプリケーション後フィルターの登録 )は、アプリケーションのフィルターを使用して、応答時間と応答の正常終了を測定します。これは、アプリのどこで何を測定するかをガイドするため、最初の一連の質問に対する回答が最も重要な場所です(「何を知りたいですか?」)。

データをキャプチャできる場所がわかったら、適切なツールを選択することは、2つのクラスの監視アプリケーション(アプリケーションの操作に密接に結び付けられた高度に専門化された監視アプリと、時系列データベースに似ています。

オープンソースである高度に特殊化されたケースの(私の知る限りでは)一般的な例はありません。しかし、NewRelic、Ruxit、DynaTraceなどなど、多くの商用ソリューションが存在します。それらの機能は、リモートプロファイラーに似ていると簡単に説明でき、他にも多くの機能があります。 (また、より伝統的なプロファイラーが必要な情報の一部を収集するのに役立つことを忘れないでください-それは間違いなくあなたのアプリケーションの監視に取って代わるものではありませんが、あなたが行く前でもプロファイリングから収集できる多くの貴重な情報があります生産へ。)

物事の一般的な面では、私が個人的に知っている多くのオープンソースオプションがあります。最も長い期間はGraphite(ここで読むことができるすばらしい入門書です: Measure Anything、Measure Everything )、これは多くの人の間でかなり一般的に使用されています。ただし、Graphiteは唯一のオプションではありません。KibanaやInfluxDBなど、他の多くのオプションを見つけて自分でホストすることもできます。

これらのオープンソースオプションの多くには、いくつかのプロバイダーから利用可能なホストオプションもあります。さらに、このキャンプには多くの完全に商業的なオプションがあります(実際、私はその1つを設立しています)- Instrumental )。

これらの商用オプションのほとんどは、アプリケーションの所有者が実際のアプリケーションを実行する上で独自の監視インフラストラクチャを実行するのはかなり面倒だと感じたためです。さらに別の分散システムの可用性を維持することは、多くの運用担当者のウィッシュリストでは高くありません。 :)

27
Chris Zelenak

(APIモニタリングのリーダーであると信じている Runscope を共同設立しているので、これに回答することは明らかに偏っています。特にこの問題に関する何千人もの顧客と:)

REST(ful)APIモニタリングに固有のOSSツールは知りません。汎用OSSメトリックス監視ツール(Graphiteなど)は、APIスタックの一部を確実に監視するのに役立ちますが、API固有の機能はありません。

商用メトリックス監視ツール(Datadogなど)またはApplication Performance Monitoring(APM)ツール(New RelicやAppDynamics)には、APIユースケースに固有の機能がいくつかありますが、中心となるものはありません。これらは「階層化された監視アプローチ」と呼ばれるものの有用な部分です。高レベルのAPI監視から始め、これらの他のツール(例外トラッカー、APM、生ログ)を使用して問題が発生した場合に飛び込みます。

それでは、API監視ツールでどのAPI固有の機能を探すべきでしょうか?一般的に監視している3つの要因(稼働時間/可用性、パフォーマンス/速度、正確性/データ検証)に基づいて分類します。

稼働時間の監視

基本レベルでは、APIにアクセスする必要があるクライアントがAPIを使用できるかどうかを知りたいと思うでしょう。 「パブリック」(つまり、パブリックインターネットで利用可能、必ずしもpublicized...ではありません...モバイルバックエンドAPIはパブリックですが、必ずしもパブリックではありません) 'それらを呼び出しているクライアントを可能な限りシミュレートしたいと思うでしょう。モバイルアプリをお持ちの場合は、おそらく世界中でAPIを利用できるようにする必要があります。そのため、少なくとも、API監視ツールを使用すると、複数の場所からテストを実行できます。特定の場所からAPIにアクセスできない場合は、メール、Slackなどによる通知が必要になります。

APIがプライベートネットワーク(企業のファイアウォール、ステージング環境、ローカルマシンなど)上にある場合、それも「表示」できるようにしたいでしょう。これにはさまざまなアプローチ(エージェント、VPNなど)がありますが、IT部門がサインオフしたものを使用するようにしてください。

セルフホスティング、社内構築、またはOSSツールを使用している場合、テストエージェントのグローバル配布は高価なセットアップです。設定する各リモートロケーション(できればメインクラスターの外部)の可用性が高く、完全に監視されていることを確認する必要があります。これは、非常に迅速に費用と時間がかかる可能性があります。

パフォーマンス監視

APIにアクセスできることを確認したら、APIの実行速度を測定し、それらを使用するアプリの速度が低下しないことを確認する必要があります。生の応答時間は、追跡する必要がある最低限のメトリックですが、常に最も有用であるとは限りません。複数のAPI呼び出しがユーザーのビューに集約される場合や、ユーザーによるアクションが、キャッシュ層にまだ存在しない可能性のある動的なデータまたはめったに呼び出されないデータを生成する場合を考えます。これらのマルチステップのタスクまたはワークフローは、API呼び出しの内容を理解する機能を備えておらず、存在のみを把握しているため、APMまたはメトリックスベースのツールで監視するのが困難な場合があります。

パフォーマンスを最も正確に表現するには、速度を外部から監視することも重要です。監視エージェントがコード内または同じサーバー上にある場合、実際のクライアントが電話をかけるときに経験するすべての要因を考慮しているとは考えられません。 DNS解決、SSLネゴシエーション、負荷分散、キャッシュなどのようなもの。

正確性とデータ検証

間違ったデータを返している場合に、高速で高速なAP​​Iはどれほど良いでしょうか?このシナリオは非常に一般的であり、最終的にはユーザーエクスペリエンスがはるかに悪くなります。人々は「ダウン」を理解しています...彼らはアプリが間違ったデータを表示している理由を理解していません。優れたAPI監視ツールを使用すると、メッセージペイロードの行き来を詳細に調べることができます。 JSONとXMLの解析、複雑なアサーション、スキーマの検証、データ抽出、動的変数、マルチステップモニターなどは、送受信されるデータが完全に正しいことを検証するために必要です。

また、クライアントがAPIで認証する方法を検証することも重要です。 API固有の優れた監視ツールは、OAuth、クライアント証明書との相互認証、トークン認証などを理解します。


これにより、APIモニタリングが「従来の」メトリック、APMおよびロギングツールと異なる理由、およびアプリケーションが実行している全体像を取得するためにそれらがすべて連携する方法を理解できます。

25
John Sheehan

会社で runscope.com を使用しています。無料のものが必要な場合 apicombo.com もできます。基本的に、APIエンドポイントのテストを作成して、ペイロード、応答時間、ステータスコードなどを検証できます。その後、テストの実行をスケジュールできます。また、いくつかの基本的な統計情報も提供します。

4
Andy Mok

私はそれを行うためにいくつかのアプリケーションと方法を試しましたが、最高の(私の会社と関連プロジェクトにとって)キー=値のペア(IPソース、操作結果、経過などのこの操作に関連するすべての情報を持つ原子エントリ)を記録することです時間など、各ノード/サーバーの特定のログファイルで)) Splunk で監視します。 RESTとjsonデータを使用すると、アプローチが異なる可能性がありますが、十分にサポートされています。

インストールとセットアップは非常に簡単です。 (ほぼ)リアルタイムデータ(応答時間、操作結果)を監視し、イベントに関する通知を送信し、DWHを実行できます(その他多くのこと、多くのプラグインがあります)。

オープンソースではありませんが、1日あたり50MB未満のログを使用する場合は無料で試すことができます(以前はどのように動作していたのか、今はエンタープライズライセンスを使用しているので100%確信はありません)。

探しているものを実現する方法を説明する小さなチュートリアルがあります: http://blogs.splunk.com/2013/06/18/getting-data-from-your-rest-apis-into-splunk /

1
exoddus