Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

名前空間を使用したモノリシックアプリケーションでの監視データの構造化

名前空間とは何ですか?

AppSignalで監視されているアプリケーションで発生することはすべて、名前空間の下に記録されます。名前空間は、フォルダのように機能し、イベント、問題をグループ化し、データを管理可能なチャンクに監視します。

デフォルトでは、すべてのアプリケーションは3つのデフォルトの名前空間で始まります:webbackground 、およびfrontend

  • Web名前空間はすべてのHTTPリクエストを保持します。 RailsやSinatraなどのMVC指向のフレームワークでは、これにはコントローラーアクションが含まれます。
  • バックグラウンド名前空間は、バックグラウンドジョブ、ライブラリ、およびタスクからのアクティビティを保持します。
  • フロントエンド名前空間は、JavaScript統合のためにAppSignalによって送信されたイベントをログに記録します。

AppSignalは、組み込みのアプリケーションごとおよび統合ごとのルールを使用して、着信イベントをマップします。ただし、これらのマッピングはいつでも変更でき、アプリケーション構造をモデル化するための新しい名前空間を作成することもできます。

Rubyで名前空間を試す

Ruby on Rails(ROR)アプリケーションで名前空間を試してみましょう。 rails newを使用して新しいRailsプロジェクトを作成した後 Rails統合を設定すると、webが見つかります ダッシュボードの名前空間。

AppSignalは、いずれかのコントローラーからトランザクションを受信するとすぐに名前空間を表示します。

残りのデフォルトの名前空間は、アクティビティが含まれるまで表示されません。物事をより面白くするために、バックグラウンド名前空間に何かを追加しましょう。これは、Sidekiqをプロジェクトに追加した後のダッシュボードの外観です(サンプルリポジトリのコードを確認してください)。

AppSignalは、Sidekiqをジョブプロセッサとして認識するため、アクションをバックグラウンド名前空間に割り当てます。 AppSignalは、一般的なバックグラウンドプロセッサのほとんどと統合されていますが、省略した場合は、いつでも手動でインストルメンテーションをジョブに追加できます。

カスタム名前空間の作成

大規模なモノリシックアプリケーションでは、デフォルトの名前空間が一般的すぎると感じる場合があります。大きなWebサイトは通常、静的コンテンツ、動的ページ、APIエンドポイントなどのWebサービスを提供します。これらのほとんどはすべてwebに掲載されます 名前空間。

また、アプリケーションのすべての部分に異なる優先順位があります。ログインページの問題は、内部管理パネルの問題よりもはるかに緊急です。ただし、AppSignalは、名前空間内のすべての問題を同等に扱います。アクティビティが多い場合、最も重大な問題を特定するのが難しい場合があります。

したがって、名前空間を優先度と責任範囲別に整理する必要があります。次に、個別の通知ポリシーを添付して、関係者のみに警告することができます。この推論に従って、login_pageのカスタム名前空間を作成できます。 、api_endpoints 、およびadmin_panel

Rubyで新しい名前空間を作成するには、Appsignal.set_namespaceを使用します 。 urgent_backgroundという名前空間にジョブを作成する次のコードを見てください。 :

class FetchPricesWorker
    include Sidekiq::Worker
 
    def perform
        Appsignal.set_namespace("urgent_background")
 
        # worker code ...
 
    end
end

この変更を行ってアプリを再起動すると、これらの新しいジョブは新しく作成された名前空間に表示されます:

ダッシュボードのアクション名を確認することで、実際のジョブがログに記録されたことを確認できます。

カスタム名前空間は、すべての統合でも機能します。

名前空間を無視する

カスタム名前空間のもう1つの利点は、アプリケーションの関係のない部分からのイベントを無視できることです。たとえば、admin_panelからのイベントを無視することを選択できます 完全に。

名前空間を無視するには、次の3つの手順が必要です。

  1. 監視したくない部分をカスタム名前空間に割り当てます。
  2. 名前空間を無視するように統合を構成します。
  3. アプリを再起動します。

Rubyの場合、AppSignal構成ファイルにignore_namespacesオプションを追加します。

production:
  ignore_namespaces:
    - "admin_panel"

名前空間を無視すると、ソースのすべてのトランザクションとスパンデータがスキップされます。カスタムメトリックデータは引き続き報告されます。

ElixirとJavaScriptの統合には同様のオプションがあります。詳細については、名前空間を無視するガイドを確認してください。

モノリシックアプリケーションの名前空間

名前空間がどのように機能するかがわかったので、名前空間を使用してモノリシックアプリケーションをパーティション分割する方法をいくつか調べてみましょう。

決まったルールはありませんが、パーティショニングは2つの戦略に要約されます。開始点として、それらの1つまたは両方の組み合わせを選択できます:

  • 役割別 :プロジェクト内の機能ユニットまたは論理ユニットに名前空間を割り当てます。したがって、billingなどの名前空間を定義することが賢明であると思われる場合があります。 、sign_in またはsign_upadmin_panel 、およびhomepage 。 AppSigalダッシュボードを一目見れば、アプリケーションの各部分で何が起こっているのかがわかります。このアプローチは、コードを明確な境界でうまく分割できる場合にうまく機能します。
  • 重大度別 :ここでは、優先順位付けデバイスとして名前空間を使用します。コードのどの部分がcriticalであるかを確認するのはあなた次第です 、importantmedium 、またはlow 。このアプローチにより、最初に対処したい問題をすぐに分類できます。

ユーザーのサインインと登録を処理するコントローラーがあるとします。ロールごとにパーティションを作成することを選択した場合、それらをuser_loginにマップできます。 名前空間。

# in Rails we use before_action callback to change
# the namespace before the request starts
class LoginController < ApplicationController
    before_action :set_appsignal_namespace
 
    def set_appsignal_namespace
        # Sets the namespace
        Appsignal.set_namespace("user_login")
    end
 
    # controller actions ...
end

ただし、優先名前空間を使用する場合は、課金を担当するコントローラーがcriticalに入る可能性があります。 名前空間。

class BillingPageController < ApplicationController
    before_action :set_appsignal_namespace
 
    def set_appsignal_namespace
        Appsignal.set_namespace("critical")
    end
end

これらから継承するコントローラーは、親と同じ名前空間を共有します:

# any controllers that inherit from LoginController
# are also part of the "user_login" namespace
class RegistrationController < LoginController
 
    # there’s no need for before_action here
    # this controller already reports to the parent’s namespace
 
end

これまで見てきたように、ジョブとタスクは自動的にbackgroundに割り当てられます 名前空間。可能な限り、それらをより具体的なものに割り当てる必要があります。たとえば、データベースのクリーンアップジョブをdatabaseに入れることができます。 このような名前空間:

class ActiveJobDatabaseCleanupJob < ActiveJob::Base
  queue_as :default
 
  def perform(argument = nil, options = {})
    Appsignal.set_namespace("database")

優先順位は仕事にも役立ちます。重要でないタスクをlowに割り当てることができます たとえば、このRakeタスクのように:

task :unimportant_job do
 
  # Run this rake job in the low namespace
  Appsignal.set_namespace("low")
 
  # job code ...
 
end

場合によっては、手動トランザクションを使用してアクションをログに記録する必要があります。次の例のように、カスタムメーラージョブをコーディングする名前空間を作成しながら定義できます。

class Job
    def perform
 
        # Create a transaction for this job and set the namespace
        transaction = Appsignal::Transaction.create(
            SecureRandom.uuid,
            "mailer",
            Appsignal::Transaction::GenericRequest.new(ENV.to_hash)
        )
 
        # job code ...
 
    end
end

名前空間と通知

チームの全員がすべての問題について通知を受ける必要があるわけではありません。フロントエンドスペシャリストは、バックエンド開発者ほどバックグラウンドジョブを気にしません。それでも、バックエンドに問題がある場合は知りたい場合があります。バックエンド開発者は、webでパフォーマンスの問題が通知されることを確実に望んでいます。 名前空間。名前空間を使用すると、通知を適切な人にルーティングできます。

名前空間ごとの通知機能の設定

特定の名前空間に対してのみアクティブな通知グループを作成できます。たとえば、webのエラーについてメールを送信できます。 名前空間、またはfrontendの問題について#frontendSlackチャネルにメッセージを送信します 名前空間。

名前空間ごとの通知グループを作成するには、[アプリの設定]>[通知]>[通知機能]に移動し、[統合の追加]をクリックします 。

統合の1つを選択し、その名前を入力します。送信するメッセージのタイプと名前空間を選択します。たとえば、#frontendのSlack通知を作成しましょう チャネル。

まだここにいる間に、バックエンド開発者向けの2番目の通知を作成します。

発生しているすべてのことについてチームを最新の状態に保つために必要な数の通知機能を構成できます。

名前空間ごとの通知の変更

インシデントが作成されると、AppSignalは通知ポリシーを適用します。このポリシーは、エラーの発生元の名前空間に基づいています。名前空間ごとに個別のポリシーを定義できます。

アプリケーションの名前空間のデフォルトを確認するには、[アプリの設定]>[通知]>[名前空間のデフォルト]に移動します。 。

ここには、すべての名前空間のエラーとパフォーマンスの通知をカスタマイズするためのオプションがあります。

  • すべての発生 :インシデントがトリガーされるたびに、5分間のクールダウンで通知を送信します。
  • 最初の導入 :アプリケーションのデプロイ後の最初のエラーを通知します。
  • 閉じた後の最初 :クローズされた課題が最初に再開されたときに通知を送信します。
  • 通知しない :通知を完全に無効にします。

名前空間ごとのトリガーの作成

トリガーは、AppSignalにインシデントを作成し、メトリックが事前定義された値を上回ったり下回ったりしたときに通知を送信するように指示します。アプリケーションのさまざまな部分でさまざまなしきい値が設定される可能性があるため、名前空間ごとに個別のトリガーを作成する必要があります。典型的な例は、webのスループットが低すぎる場合にアラートを出すトリガーです。 名前空間。

トリガーを作成するには、[異常検出]> [トリガー]に移動し、最初のトリガーを追加をクリックします。 。

左側のメニューでアクショントリガータイプを選択し、関連する名前空間を選択します。次に、アラートをトリガーするしきい値を設定します。

ここでは、通知するグループを定義することもできます。確定するには、トリガーの保存をクリックします 。

結論

名前空間は、アプリケーションの監視データを理解するのに役立ちます。また、通知やインシデントをきめ細かく配信し、ノイズを制限し、誤検知を回避するためにも不可欠です。

カスタム名前空間がRuby、Node.js、およびElixirでどのように機能するかを確認した後、次にこれらを読んで、名前空間の使用方法を学習し続けてください。

  • AppSignalの名前空間
  • 名前空間を使用したグループ化
  • Webhookの監視とバックグラウンドジョブの違いは何ですか
  • Gem 2.2-カスタム名前空間!

  1. Rubyを使用してコマンドラインアプリケーション(CLI)を構築する方法

    多くの人は、RubyがWebアプリケーションではないことを実行できることを忘れています。この記事では、それを改善するのに役立つコマンドラインアプリケーションを構築する方法を紹介したいと思います! 使い慣れているコマンドラインアプリケーションは次のとおりです。 psql rails bundler gem git コマンドラインアプリケーションを構築する方法はたくさんあります。この記事では、そのうちの3つに焦点を当てます。 あなたは学ぶつもりです : ARGVアレイ OptParseライブラリ トールの宝石 始めましょう! RubyARGV定数 コマンドラインア

  2. Excel の VBA を使用したデータ検証ドロップダウン リスト (7 アプリケーション)

    データ検証ドロップダウン リストは、さまざまな Excel 関連のタスクを実行するための非常に便利な機能です。 VBA の実装 は、Excel で操作を実行するための最も効果的、迅速、かつ安全な方法です。この記事では、データ検証ドロップダウン リストの 7 つの異なるアプリケーションを紹介します。 VBA マクロを使用して Excel で . ワークブックをダウンロード ここから無料の練習用 Excel ワークブックをダウンロードできます。 Excel のデータ検証ドロップダウン リストに VBA を使用した 7 つのメソッド このセクションでは、データ検証ドロップダウン リストの 7