OpentElementalを使用したGraphSQL APIの監視


GraphSQLは、2012年にFacebookが開発したAPIのクエリ言語です.2015年にオープンソースとなった.GraphSQLは、フロントエンドの開発者やAPIの消費者が、必要以上のデータを要求することができます.この記事では、OpentElementとSignozを使ってgraphql APIを監視する方法を学びます.
GraphSQLは、使いやすさのため、残りの人気の代替となっている.これは、開発者が単一のAPI呼び出しで複数のデータソースからデータをプルすることができます.通常、GraphSQLはサーバーへの単一のエントリポイントとして機能します.そのため、GraphSQL APIの監視は重要です.
あなたのGraphSQL APIについて監視するもののいくつかは次のとおりです.
  • グラフィカルクエリ
  • GraphQL resolver
  • 分散追跡によるクエリ実行の追跡
  • この記事では、Signozを使用します.これは、OpentElementをインストゥルメント層として使用して、Graphical APIを監視します.

    GraphSQL APIを監視するためのOpenTelemrationの使用


    OpenTelemrationは何ですか?


    OpenTelemetry CHERは、テレメトリデータ(ログ、メトリック、およびトレース)を作成して、管理するために器具をアプリケーションに使うのに用いられるツール、API、およびSDKのオープンソースのベンダ不協和的なセットです.それは、クラウドネイティブのソフトウェアアプリケーションの組み込み機能を遠隔測定データ(ログ、メトリック、およびトレース)を作成することを目指しています.下のプロジェクトですCNCF 巨大なコミュニティのバックアップと.

    What is instrumentation?

    Instrumentation is described as the process of enabling your application code to generate telemetry data. OpenTelemetry provides client libraries for instrumentation. It also provides many auto-instrumentation libraries that generate and capture telemetry data for common frameworks and protocols without making any code changes.


    OpenTelementLibraryライブラリを使用すると、ほとんどすべての主要なプログラミング言語で書かれたアプリケーションコードを監視することができます.

    OpenTelemration GraphSQLライブラリの使用


    OpenTelemMetricは、グラフィカルなAPIを監視するライブラリを提供します.ライブラリは、任意のコードを変更せずにあなたのGraphSQLクエリを監視します.OpenTelemrationライブラリは、テレメトリデータを生成し、キャプチャするために使用されます.
    データがキャプチャされると、ストレージと可視化のための選択のバックエンドツールに送信する必要があります.OpentElementでキャプチャされたモニタリングデータをGraphSQLアプリケーションからSigNoz , オープンソースのAPMツール.

    OpenGeneratorによるサンプルGraphSQLアプリケーションの実行


    事前の要件

  • 12より上のノード
  • シグニッツ
  • インストール


    SignozはMacOSまたはLinuxコンピュータにインストールすることができます.
    インストールスクリプトはDockerエンジンをLinuxで自動的にインストールします.しかし、MacOSでは、手動でインストールする必要がありますDocker Engine インストールスクリプトを実行する前に.
    git clone -b main https://github.com/SigNoz/signoz.git
    cd signoz/deploy/
    ./install.sh
    
    Docker SwarmとHelm Chartを使用してSignozをインストールする方法については、ドキュメントを参照できます.

    SIGNOZをインストールするときは、http://localhost:3301
    Signozダッシュボード-それは、アプリケーションとバンドルされているサンプルアプリケーションからサービスを示しています

    サンプルアプリケーションの実行


    次の手順は、サンプルを使用してサンプルGraphSQLアプリケーションを実行する手順です.

  • クローンサンプルGraphSQLアプリリポジトリとルートフォルダに移動します
    我々は、これでサンプルGraphqlアプリを使用されますGitHub repo .
    git clone https://github.com/SigNoz/graphql-opentelemetry-sample.git
    cd graphql-opentelemetry-sample
    

  • 必要な依存関係をインストールする
    あなたはから必要な深さをチェックアウトすることができますpackage.json ファイル.サンプルアプリケーションに必要なすべての依存関係をインストールするnpm
    npm install
    
    OpenTelemMetricは、GraphSQLアプリを計器に次のパッケージが必要です.
    "@opentelemetry/api": "^1.0.3",
    "@opentelemetry/auto-instrumentations-node": "^0.25.0",
    "@opentelemetry/exporter-otlp-grpc": "^0.26.0",
    "@opentelemetry/instrumentation-graphql": "0.27.4",
    "@opentelemetry/resources": "^0.24.0",
    "@opentelemetry/sdk-node": "0.27.0",
    "@opentelemetry/sdk-trace-base": "^1.0.1",
    "@opentelemetry/sdk-trace-node": "^1.0.1",
    "@opentelemetry/semantic-conventions": "^0.24.0",
    

  • トレーサを用いた機器の設定jsファイル
    我々のGraphical APIを計るために、我々は一つをつくりますtracer.js ファイルを使用してサービスをインストゥルメントに使用します.
    Graphicalインストーラをキャプチャするには、OpenTelemrationインストーラーGraphSQLパッケージを追加します.また、configure some parameters あなたのユースケースに基づきます.
    const sdk = new opentelemetry.NodeSDK({
      traceExporter,
      instrumentations: [
        getNodeAutoInstrumentations(),
        new GraphQLInstrumentation({
          allowValues: true,
        }),
      ],
      resource: new Resource({
        [SemanticResourceAttributes.SERVICE_NAME]: serviceName,
      }),
    })
    
    アプリケーションがロードされる前にOpenTementTerriterを初期化する必要があります.あなたのアプリケーションがOpenTelemrationがセットアップされる前にパッケージを必要とし始めるならば、それは問題を作成することができます.次のようにコードを使用してOpentElementを初期化できます.
    const init = require('./tracer')
    init('graphql-service')
    
    サンプルトレーサー.jsファイルはgithubレポで提供されていますhere . アプリケーションの必要性に基づいて削除またはコメントを解除する行を注意してください.
  • OpenTelemrationバックエンドとしてSIGNOZを設定する
    テレメトリデータをエクスポートするためにOpenTelemrationを設定するには、SIGNOZのようなバックエンドツールのOTLP(OpenTelemrationプロトコル)エンドポイントを指定する必要があります.signozがインストールされているマシンのIPアドレスと、signozがlistenしているポート番号から成ります.
    SIGNOZのためのOTLPエンドポイント<IP of the machine>:4317ローカルマシンにSIGNOZをインストールしたら、エンドポイントは127.0.0.1:4317 .

  • GraphSQLサービスを実行する
    OTEL_EXPORTER_OTLP_ENDPOINT=127.0.0.1:4317 \
    OTEL_RESOURCE_ATTRIBUTES=service.name=graphql-service \
    node -r ./tracer.js index.js
    
    オープンGraphSQLインタフェースhttp://localhost:4000/graphql
  • クエリを使用してデータを取得するGraphSQLインタフェース

    SIGNNZダッシュボードによるGraphSQL APIの監視


    Signozダッシュボードでトレースされたトレースを参照するには、いくつかのデータを生成する必要があります.
    以下のGraphSQLクエリを実行しますhttp://localhost:4000/graphql . Signozダッシュボード上で探索されるいくつかの監視データを生成するように、呼び出しの束を作ることができます.
    query{
      userById(id:2){
        email
        name
        location{
          city
          area
        }
      }
    }
    
    さて、ブラウザでSignozダッシュボードを開きます.http://localhost:3301/dashboard . これで気づくことができるはずですGraphql-service ダッシュボードで監視されているサービスの一覧です.
    SIGNOZによって監視されているGraphSQLサービス
    ここでは、あなたがあなたのGraphSQL APIについてSIGNOZでモニターすることができるもののリストです.

    トップエンドポイントのモニタ一覧


    私たちの例のテレメトリ構成は、GraphSQLがローカルに実行されていることを前提としています.
    Signozによって示されるGraphSQLサービスのトップエンドポイントのリスト

    あなたのGrapqlサービスのすべてのイベント(スパン)を調査してください


    すべてのイベントのリストを取得することができますspans 分散追跡に定義されているgraphql-service . 強力なフィルタを使用するTraces SIGNZダッシュボードのタブで、GraphSQLのパフォーマンスを分析します.
    Signozは、GraphSQLサービスに関連するすべてのイベントをキャプチャします.あなたが迅速にパフォーマンスの問題を分析し、デバッグするために強力なフィルタを使用することができます.

    グラフィカルなクエリの各スパンの詳細トレース


    スパンテーブル内の任意のスパンをクリックすると、詳細なトレースページには、グラフのクエリの全体の旅が表示されますが表示されます.
    要求の各部分によって取得された時間に関する情報と共にクエリのシーケンシャルフローを確立することで、待ち時間の問題を迅速に識別することができます.あなたはどのように多くの時間がリゾルバを取るような詳細を見ることができます.関連するGraphSQLクエリも参照できます.
    プロフィールと要求の流れを示すガントチャート

    エラーのトラブルシューティング


    また、GraphSQLクエリのエラーをキャプチャするには、SIGNozダッシュボードを使用することもできます.バックエンドで使用できないデータフィールドを要求すると、GraphSQLインターフェイスにエラーが表示されます.
       query{
         userById(id: 11){
           name
           age
           }
           }
    
    フィールドをクエリできません
    Signozはすべてのエラーコールのリストを取得します.あなたはガントチャートの特定のエラーの詳細を見ることができます.
    特定のトレースをクリックして、エラーメッセージと無効なクエリで操作範囲の詳細ビューを取得します.この場合、リゾルバに関連する内部サーバーエラーが表示されます.
    SignozダッシュボードのGraphSQLクエリから取得したエラートレース
    Signozまた、共通の詳細ビューを提供しますsemantic conventions HTTP、ネットワーク、その他の属性のように.

    結論


    OpenTelemrationはテレメトリデータを生成する世界標準になりつつある.すべての主要なクラウドベンダーはそれを後退させます、そして、それは将来ほとんどの雲のネイティブアプリケーションによって使用されるデフォルトの計装層です.
    それが非常に人気があるようになっている理由の1つは技術の広い範囲をカバーするためです.したがって、アプリケーションが新しいフレームワークを使用して起動した場合は、すぐにアプリケーションを監視することができます.
    アプリケーションでは、GraphSQL APIのほか、アプリケーションが使用している他のすべての項目に対してOpenTelemTermetryを使用できます.Signozと組み合わせると、GraphSQLを使用してアプリケーションを監視するための完全なオープンソースソリューションを持つことができます.あなたはGigthubレポを訪問してSignozを試してみることができます👇

    あなたが質問をするか、何かをセットアップする際にどんな援助も必要とするならば、我々のスラックコミュニティに加わって、我々#support チャンネル.

    更なる読書


    Implementing Distributed Tracing in a Nodejs application