ブレッドクラムの紹介
本番環境でエラーに対処したことがありますか。何をしようとしても 、開発環境またはステージング環境で問題を再現することはできませんか?多くの場合、次のステップは、本番環境でデバッグログをスローして、より多くのデータを収集することです。ログをリクエストと関連付ける良い方法がない場合、特にインシデントの際にイライラする可能性があります。
役立つ機能を追加しました。これはブレッドクラムと呼ばれます。
ブレッドクラム ログイベントに非常によく似ていますが、エラーと一緒に保存および報告されます。ログのように、ブレッドクラムにはメッセージが含まれますが、メタデータ(ハッシュマップの形式)を保持することもできます。ブレッドクラムのセットは、リクエスト(またはジョブの呼び出し)の存続期間を通じて収集され、エラーが報告されない限りすぐに削除されます。
スタックに独自のブレッドクラムを追加するのは簡単です。 Honeybadger.add_breadcrumb
を呼び出すだけです コードのどこでも:
Honeybadger.add_breadcrumb("Loading User", metadata: {
user_name: user_name,
})
その後にエラーが報告された場合は、ブレッドクラムスタックに表示されます:
ああuser_name
空に見えます。問題が発生する可能性があります。
Honeybadger Rubyライブラリには、パンくずリストを自動的に収集するためのRuby&Railsへのフックが含まれています。たとえば、本番環境で送信されたすべてのログメッセージ(Logger
を介して送信されます) クラス)は、ブレッドクラムとしてキャプチャおよび作成されます。また、Rails Instrumentationと連携して、コントローラーアクション、SQLクエリ、アクティブなジョブ呼び出しなどのブレッドクラムを収集します...
どのように使用できますか?
ブレッドクラムは現在、Rubyクライアントから入手できます。バージョン4.4.0
に更新する必要があります 無効になるため、構成で必ず有効にしてください。 デフォルトでは、5.0.0
をリリースするまで あらゆるねじれを確実に解決するための、宝石のバージョン。
試してみて、問題が発生した場合はお知らせください。
ブレッドクラムが正式に導入されたので、それらを拡張する方法の簡単な例を見てみましょう。 Railsアプリでブレッドクラムを有効にすると、標準のインストルメンテーションブレッドクラムが無料で添付されますが、もっと必要な場合はどうすればよいですか?
アプリがHTTPリクエストを送信するたびにブレッドクラムを作成するとします。この情報は、デバッグ時に役立つ場合があります。
これを実現する簡単な方法は、Honeybadger.add_breadcrumb
を呼び出すことです。 リクエストの呼び出しごとに。
def send_a_message
res = conn.post("/message", { user: user.id, body: "Hey!" }.to_json)
Honeybadger.add_breadcrumb("Request: /message", metadata: { user: user.id })
res
end
ここでは、/message
へのすべてのPOSTの後にブレッドクラムを保存します 。このメッセージを送信した後にアプリが次にエラーをスローしたときは、どのユーザーがメッセージを送信したか、エラーに関連していつ発生したかを確認する必要があります、Yay!
add_breadcrumb
が必要になるため、これは少し面倒です。 リクエストを送信する各場所に電話してください。 注意したい ただし、あります このようなブレッドクラムを作成する利点。このメソッドでキャプチャするメタデータについて非常に具体的にすることができます。多くの場合、これは本番環境のバグによって動機付けられたターゲット情報を収集するための優れた方法です。
本当に、いつどこでリクエストが出たのか知りたいだけです。図書館が私のためにほとんどの仕事をしてくれるといいのですが;)
少しごまかして、人気のあるファラデーリクエストライブラリを使用していると仮定します。
タスクを実行するために独自のミドルウェアを構築することもできますが、代わりにRailsインストルメンテーションをブローカーとして使用したいと思います。幸い、faraday_middleware gemによって提供されるミドルウェアがあり、イベントを発行します。 gemがGemfile
にあることを確認します また、instrumentation
を確認してください ミドルウェアが接続に注入されます。
connection = Faraday.new do |conn|
conn.use :instrumentation
conn.adapter Faraday.default_adapter
end
アプリ内で接続を共有しない場合、これには少し作業が必要になる可能性があります。怠惰な場合は、ConnectionOptionsの前に追加して、すべてのリクエストでミドルウェアが有効になっていることを確認することもできます。ただし、これにより、アプリ内で発生するファラデーリクエストが計測され、宝石も含まれるようになるので注意してください(必要な場合もあります)。
Railsインストルメンテーションを使用すると、いくつかの優れた副作用があります。1つは、他のユースケース(一般的なロギング目的など)に対して複数のサブスクリプションを作成できることです。
ファラデーリクエストがインストルメント化されたので、サブスクライブしてブレッドクラムの作成に取り掛かることができます:
ActiveSupport::Notifications.subscribe "request.faraday" do |_, _, _, _, data|
method = data[:method].to_s.upcase
metadata = data.to_h.slice(:url, :status).merge({method: method})
Honeybadger.add_breadcrumb("#{method}: #{metadata[:url]}", category: "request", metadata: metadata)
end
Honeybadgerは、送信リクエストごとにブレッドクラムを追加しています!
リクエストからいくつかのデータポイントのみを検査していることに注意してください。機密データがブレッドクラムのメタデータに漏洩する可能性が高いため、送信または応答の本文のペイロードは追加しません。
どうなるか教えてください!
ブレッドクラムがデバッグツールボックスの追加に役立つことを願っています。試してみて、追加してほしいものがあれば、私たちに一言お願いします。
-
ObjectRocketでのメトリックダッシュボードの紹介
元々は2019年9月9日にObjectRocket.com/blogで公開されました Rackspace ObjectRocketでの私たちの使命は、お客様のデータベースを自動操縦に置くことです。そのため、データについて心配する必要がなく、優れたアプリの構築に集中できます。ただし、データベースが自動操縦になっている場合でも、システムの可観測性を維持することは重要な目標です。 データストアで何が起こっているのか、最新のアプリケーションの変更がデータベースのパフォーマンスにどのような影響を与えているのかを正確に把握することは非常に重要です。 そのため、新しいプラットフォームのCockro
-
新しい Linux テスト ラップトップの紹介:Lenovo G50
これは一大イベントでしょう。最近、有名な T61 と T400 マシンを含め、テストとレビューに使用した合計 4 台のラップトップを廃止しました。つまり、Linux のインストールなどをすべて行うには、新しいコンピューターが必要でした。だから、レノボG50。 Nvidiaカードが付属しているため、古いLGハードウェアを引き続き使用するため、古くてスペックが弱いにもかかわらず、その点でまだ役に立ちます.しかし、私のディストリビューションのテストのほとんどは、この真新しい野獣に焦点を当てています.UEFI、セキュアブートなどについて話しているので、ここには非常に重要な点があります.私のレビュー