エリクシールアプリケーション



テレメトリとは
どこかのアプリケーションの寿命の間にそれはいくつかのパフォーマンスの問題があることは避けられない.それが起こるとき、それはあなたが観測性の若干の種類を持っているより良いです、さもなければ、それはあなたがそれを減速しているものを見つけるためにとる時間をかなり増やします.それは少しclichのように聞こえるかもしれません、しかし、我々がそれを見ることができないならば、我々がシステムを理解することができないことは、100 %本当です.
これはテレメトリが私たちの生活を容易にする場所に来る瞬間です.辞書によると、それは遠くにあるオブジェクトについての情報を収集し、電子的にどこかの情報を送信する科学やプロセスです

オプトメントメトリー
OpenencemTRACEと呼ばれるオープンソースのイニシアチブがあり、OpenCensusとOpenTrackingの融合の結果であり、基本的にはクラウドネイティブソフトウェアのための可観測性フレームワークです.
これは、ツール、API、およびSDKsのコレクションでは、楽器を生成するために使用することができます生成、収集、およびテレメトリデータ(メトリック、ログ、およびトレース)を分析するための分析のためにあなたのソフトウェアのパフォーマンスと動作を理解する.
このガイドの目的は、楽器をどのようにあなたのエリクサーのアプリケーションをするときには、もはやブラックボックスのようにそれを調べるように教えることです.私はこのGithubで見つけることができるデモアプリケーションを作成したこのタスクを支援するためにrepository . Postgresデータベースと外部のHTTP APIと相互作用する非常に単純なフェニックスAPIです.

コア依存関係と設定
我々が計装されて、OpenTelemrationデータを輸出するつもりであるアプリケーションを構築するならば、我々はopentelemetry 依存.
これはOpenTelemRemote APIの実装であり、監視ツリーを開始し、信号の記録およびエクスポートに必要なコンポーネントを処理します.
監視ツリーは次のようになります.
また、この行をアプリケーションに追加する必要がありますstart/2 機能👇OpenTelemetry.register_application_tracer(:my_telemetry_api)次の手順は、アプリケーションの設定です.このブロックを使用すると、私たちのOpenTelemrationスパンは、実際には非常に便利ではないが、心配しないでくださいstdoutにエクスポートされると、我々は後でこのトピックをカバーします.
config :opentelemetry, :processors,
  otel_batch_processor: %{
    exporter: {:otel_exporter_stdout, []}
  }

楽器すべてのもの
次に、我々のアプリケーションを計装を開始する必要がありますし、3つの異なる領域をカバーします.
  • フェニックスHTTPリクエスト
  • ECTOクエリ
  • 外部HTTPリクエスト
  • カスタム計装
  • 私たちはコンポーネントごとに1つのライブラリを使用するつもりです、それらはすべて、それらを初期化する方法とそれらが内部でどのように働くかの両方で非常に類似しています.彼らは単にElixirテレメトリイベントに添付し、それに応じて行動します.

    フェニックスHTTPリクエスト
    このために使用しますopentelemetry_phoenix .
    インストール後、トップレベルのスーパーバイザーが起動する前に、次の行を追加します.OpentelemetryPhoenix.setup()
    楽器ectoクエリ
    インストール前に前のステップと同じようにopentelemetry_ecto 単にあなたのトップレベル監督者が始まる前に、この線を加えてください.(置換してください:blog あなたのアプリケーション名OpentelemetryEcto.setup([:blog, :repo])
    外部機器
    最後に、しかし、少なくとも、外部API呼び出しも非常に一般的です.
    もう一度、必要な依存関係をインストールします.opentelementry_tesla そして、それを次の行で初期化します.OpentelemetryTesla.setup()
    カスタム計装
    あなたのコードの特定のゾーンを計る必要がある場合には、それも使用可能ですopen_telemetry_decorator 図書館.この依存関係をアプリケーションに追加し、2行以上のコードを追加するのも簡単です.
  • use OpenTelemetryDecorator あなたが楽器を使いたいモジュールに
  • @decorate trace("span name") トレースする関数に
  • より多くのオプションについては、文書のドキュメントを見てください.

    次は何ですか.
    この時点で、すべてが正しくインストールされ、設定されている場合は、APIにいくつかのリクエストを行うときに、端末上で何かを見ることができます.
    あなたがいくつかの闘争を持っている場合は、このガイドの冒頭で述べたこのデモリポジトリを見てください.
    ここでは、あなたが何を見るべきかの例です.
    *SPANS FOR DEBUG*
    {span,104045074911526666048778887850624687080,8383464978060949812,undefined,
          9257592285879194880,<<"accounts.list_users">>,internal,
          -576460747138399000,-576460747128681000,[],[],[],undefined,1,false,
          {instrumentation_library,<<"my_telemetry_api">>,<<"0.1.0">>}}
    
    ……何がこのデータに有用ですか?
    それはまさにポイントです、我々はこのデータを情報に変える必要があります.このためには、データを処理してどこかに格納する必要がある.

    弾性スタック上に構築されたアプリケーション性能監視システムであるエラスティックAPMのスクリーンショットです.それはあなたのための有用な情報になるように、このデータは人間が読めるようなファッションで表示することができます.
    次のポストでは、どのように弾力的なAPMにOpenTelemrationデータを送信するには、一歩一歩をお見せします.
    すぐにお会いしましょう!