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

AppSignalを使用したRubyonRailsアプリケーションの監視

実稼働環境でアプリケーションを実行および保守するときは、アプリケーションの動作に自信を持って、アプリケーションが期待どおりに機能していないことを知りたいと考えています。少なくとも、エラーを追跡し、パフォーマンスを監視し、アプリケーション全体で特定の指標を収集したいと考えています。

私たちは開発者であり、保守可能なソリューションが大好きなので(そうですか?)、ツール、統合、依存関係が混雑して、すべてを追跡するのが難しくなることも望んでいません。

この投稿では、AppSignalをRuby on Railsアプリケーションに追加して、アプリケーションの動作を明確に把握できるようにします。

コードをフォローする場合の前提条件:

  • www.appsignal.comのアカウント
  • Dockerがインストールされ、実行されています(docker-composeを使用するには )。*この投稿のサンプルアプリケーションを使用する場合にのみ必要です

AppSignalの設定

AppSignalを独自のRailsアプリケーションに追加する場合は、このセクションをスキップできます。その場合、Dockerに関連する手順や、投稿全体でRailsサーバーを再起動する方法を無視することもできます。代わりに、通常どおりにアプリケーションを再起動/再デプロイします。

サンプルアプリケーションを使用して開始し、Dockerを使用してマシン上で実行します。

次のコマンドを実行して、リポジトリのクローンを作成し、依存関係をインストールして、アプリケーションを実行します。

$ git clone --branch appsignal-setup/start-docker --single-branch https://github.com/choncou/sample_rails_app appsignal-setup
$ cd appsignal-setup
$ yarn start:compose

これを初めて実行するときは、Dockerイメージをビルドしてすべての依存関係をダウンロードするのに時間がかかる場合があります。完了すると、Railsserver、PostgreSQLデータベース、およびRedisが起動します。ログにリクエストが表示され、http:// localhost:3000/で実行中のアプリケーションが表示されます。

サンプルアプリケーションについて

私たちが使用しているアプリケーションは非常に最小限であるため、注意すべき点はわずかです。

Postがあります モデル、PostsController 、および/postsを介して公開されたすべてのCRUDアクション ルート。

PagesControllerによってレンダリングされたホームページもあります 、バックグラウンドジョブCreateRandomPostsJobをエンキューします ランダムな投稿を非同期で生成します。

最後に、バックグラウンドジョブ処理にSidekiqを使用しています。

私たちの小さなブログプラットフォームにも、すでにアクティブなユーザーがいます。スクリプトがあります(./bin/traffic )アプリケーションのトラフィックを模倣するために定期的にいくつかのリクエストを行うサーバーと一緒にバックグラウンドで実行されます。

それでおしまい。製品をリリースしたばかりで、すべてが完璧に機能しています...

または、少なくとも、アプリケーションのパフォーマンスとユーザーがエラーに遭遇したことについてのユーザーレポートが表示されるようになるまで、私たちはそう考えています。

では、何が起こっているのかをどうやって理解するのでしょうか?開発環境で作業しているときは、エラーを調べるのが簡単です。しかし、アプリケーションが本番環境で実行されている場合、これはより困難になります。これらのサーバーログを検索するよりも、エラーを見つけるためのより良い方法が必要です。

救助へのAppSignal!

AppSignal入門

AppSignalをアプリケーションに追加して、監視の旅を始めましょう。www.appsignal.comでアカウントにログインする必要があります。

新規のAppSignalユーザーの場合は、アプリケーションを追加するための以下のページが表示されます(既存のユーザーは[アプリの追加]をクリックする必要があります)。

[Rubyにインストール]を選択すると、簡単な手順がいくつか表示されます。

  1. Gemfileにgemを追加します

    # Gemfile
    gem 'appsignal'
  2. bundle installを実行してgemをインストールします Dockerコンテナの内部。yarn compose:shでアクセスできます。

    $ yarn compose:sh
    # We are now in a bash console within a docker container
    $ bundle install
    # Stay in this console for the next command
  3. AppSignalをインストールする

    インストール中に、次の2つのプロンプトに応答する必要があります。

    • Do you want to change how this is displayed in AppSignal? (y/n): n
    • How do you want to configure AppSignal? :入力1 環境変数だけでなく構成ファイルを使用するためです

    AppSignalセットアップページに表示されるAPIキーを使用します:

    $ bundle exec appsignal install <your-api-key>
    ...
    ...
    #####################################
    ## AppSignal installation complete ##
    #####################################
     
      Sending example data to AppSignal...
      Example data sent!
      It may take about a minute for the data to appear on https://appsignal.com/accounts
     
      Please return to your browser and follow the instructions.

インストールスクリプトを実行すると、ブラウザでAppSignalのセットアップが完了したことがわかります。次に、「アプリに移動」して、開発環境のAppSignaldashboardを表示できます。

インストールコマンドは、config/appsignal.ymlを作成します これにより、さまざまな環境に合わせてAppSignal設定を構成できます。詳細については、AppSignalRubyの構成ドキュメントをご覧ください。

config/appsignal.yml内 プッシュAPIキーです。通常、このファイルからそれを削除し、代わりに環境変数を使用します。この投稿では、それは必要ありません。

新しいgemをインストールしたため、変更が有効になるようにアプリケーションを再起動する必要があります。最も簡単な方法は、ctrl-cでドッカーコンテナを停止することです。 サーバーを実行しているターミナルウィンドウ内でdockerを起動します-次のコマンドで再度作成します:

$ yarn start:compose

依存関係が変更されるとDockerイメージが再構築されるため、これにはしばらく時間がかかる場合があります。

AppSignalメインダッシュボード

AppSignalをインストールしてアプリケーションを実行したので、ダッシュボードを表示できます。 AppSignalで実行しているすべてのアプリケーションと環境を表示するには、appsignal.com/accountsにアクセスしてください。

アプリケーション名をクリックすると、AppSignalがすぐに監視できるものを調べることができます。

トラフィック生成スクリプトにより、数分以内に一部のデータがすでに収集されます。

メインダッシュボードから、いくつかの重要なアプリケーションメトリックの概要を把握できます。次に、AppSignal内のより具体的な領域のいくつかを掘り下げていきます。

AppSignalのエラーダッシュボード

エラーページには、アプリケーションによって報告されたすべてのエラーのリストがあります。インストールスクリプトを実行すると、テストエラーがAppSignalに送信されました。かなり定期的に発生しているように見えるエラーもあることがわかります。エラーをクリックすると、詳細が記載されたページが開き、問題のデバッグに役立ちます。

この場合、バックトレースセクションから、アプリケーションのホームページ(/)で確認できます。 )app/controllers/pages_controller.rb:7 homeで検証エラーが発生しています 。

その他のAppSignalダッシュボード

サイドバーの[ダッシュボード]の下に、AppSignalがすでにいくつかの異なるダッシュボードを提供していることがわかります。

「概要」ダッシュボードはすべてのアプリケーションで利用でき、以下を提供します:

  • アプリケーションのエラー率
  • スループット
  • 応答時間
  • 詳細について掘り下げることができるその他の最近の活動

また、2つの魔法のダッシュボードがあります。1つはアクティブジョブ用で、もう1つはSidekiq用です。 AppSignalには、Railsアプリケーションで自動的に機能する多くの人気のあるフレームワークとgemの統合が組み込まれています。

これらのダッシュボードを表示すると、その統合のアクティビティに関連する情報を確認できます。アクティブなジョブダッシュボードには、各キュー内のジョブの数、各ジョブの記録された期間などのグラフが表示されます。見てください!

アプリのパフォーマンス

パフォーマンス→問題リストの内部 、AppSignalが測定するアクションのリストを表示できます。これらの測定値は、アプリケーションのどの部分が多くのパフォーマンスを消費しているかについての貴重な洞察を提供できます。

たとえば、アクションPostsController#indexの問題をクリックします。 、コントローラーのパフォーマンスをさらに深く掘り下げることができます。最も多くの時間が費やされた場所、または最も多くのオブジェクトの割り当てが行われた場所の内訳をすばやく確認できます。

AppSignalのクイックウィンと隠し宝石:Pumaの使用

AppSignalから手間をかけずに入手できる隠された宝石(Rubyの種類ではない)がいくつかあります。例を挙げて、これらを簡単に起動して実行できるかどうかを見てみましょう。

config/puma.rbの内部 、次の行を追加します:

# config/puma.rb
plugin :appsignal

アプリケーションを再起動する前に、次の環境変数の12行目以降をdocker-compose.ymlに追加します。 :

# docker-compose.yml
APP_REVISION: "latest_version_tag"

Pumaサーバー構成とdocker-compose構成を更新したため、ctrl-cを使用してdockerコンテナーを再起動する必要があります。 そしてstart-updocker-yarn start:composeで再度作成します 。

新しい洞察の追跡

サーバーが再起動したら、サーバーを約1分間実行してから、AppSignalダッシュボードに戻ってページを更新します。現在、新しい情報が掲載されている2つの主要な領域があります。

1つ目は、新しく自動生成されたPumaメトリクスマジックダッシュボードです。AppSignalにはPumaとの統合が組み込まれているため、アプリケーションサーバーのアクティビティに関する情報が得られます。 pluginの指定 構成ファイルで、Pumaサーバーに関するメトリックを報告するminutelyprobeがアクティブ化されました。

最後に、AppSignalダッシュボード全体に、デプロイメントマーカーがあります。APP_REVISIONを設定できます。 環境変数を、git commit SHAなど、アプリケーションの現在のバージョンを判別するのに役立つ任意の値に変更します。

AppSignalダッシュボードの[Deploys]セクションを表示して展開の履歴を確認し、展開によってインサイト(エラー/パフォーマンスの問題リストなど)をフィルタリングすることもできます。デプロイ間でパフォーマンスや信頼性がどのように変化したかを確認できるため、どの変更によって新しいバグが発生した可能性があるかを簡単に把握できます。

次へ:Rubyアプリのカスタムインストルメンテーションとモニタリング

この投稿では、アプリケーションでAppSignalを設定および使用して、実際のコードの可視性を高める方法を示しました。

AppSignalがRailsと、SidekiqやPumaなどのアプリケーションの依存関係の一部に自動的に統合される方法を示しました。 AppSignalは、すぐに使用できる多くのRubyフレームワークとgemで動作します。 AppSignalのRuby統合の完全なリストはここにあります。

このシリーズのパート2では、Ruby on Railsアプリケーションにカスタムインストルメンテーションとモニタリングを追加して、より深い洞察を得る方法について説明します。

次回まで!

P.S。 Ruby Magicの投稿をマスコミから離れたらすぐに読みたい場合は、Ruby Magicニュースレターを購読して、投稿を1つも見逃さないでください。


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

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

  2. Ruby on Railsとは何ですか?なぜそれが役立つのですか?

    Ruby on Rails(RoRの場合もある)は、最も人気のあるオープンソースのWebアプリケーションフレームワークです。 Rubyプログラミング言語で構築されています。 Railsを使用すると、単純なものから複雑なものまで、アプリケーションの構築に役立ちます。Railsで実行できることには制限がありません。 フレームワークとは何ですか? フレームワークは、ソフトウェアを作成するときに使用する特定の構造を提供するコード、ツール、およびユーティリティのコレクションです。 この構造により、コードがより整理されます。 正しく使うことを学ぶと、作業が簡単になります。 レールは正確に何を