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

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

アプリケーションを監視するだけでは、システムの全体像を把握するには必ずしも十分とは限りません。多くの場合、サテライト アプリ (またはサポート アプリ) で実行されているサービスは、日常業務に重大な影響を与える可能性があります。データベース サーバーはこのよく知られた例です。バックアップ スクリプトやその他のバックグラウンド ジョブもシステムの速度を低下させる可能性があるため、見落とされることがよくあります。

Node.js 用の AppSignal APM、Ruby APM、Elixir APM は、アプリ自体を自動的にインストルメントします。ただし、AppSignal はデフォルトではこれらのサテライト プロセスを監視しません。監視をどこにでも拡張し、すべてのデータを 1 つのアプリに収めるために、AppSignal のスタンドアロン エージェントをインストールできます。

AppSignal のスタンドアロン エージェント

スタンドアロン エージェントは、Ruby、Elixir、または JavaScript アプリケーションを通常使用するのと同じソフトウェアに基づいています。このソフトウェアはスタンドアロン モードでも実行できます。

スタンドアロン エージェントは以下の監視に使用できます。

  • インフラストラクチャ :システムの一部ですが、アプリケーション コードを実行しないマシン。
  • バックグラウンド ジョブ :集中的な cron ジョブや長時間実行されるデータ処理スクリプトなど。これらのバックグラウンド ジョブがサポートされている言語 (Ruby、Elixir、または Node.js) で記述されている場合は、標準の統合を使用できます。
  • その他の言語 :すぐにサポートされる言語以外の言語で書かれたプログラム。

たとえば、スタンドアロン エージェントを使用すると、Python で記述された機械学習モデルを追跡したり、バックアップ スクリプトを計測したり、Kafka ブローカーを監視したり、Web ファームでホスト メトリクスを収集したりできます。 AppSignal でこのすべての情報を表示して、メイン アプリケーション用にすでに持っているメトリクスを補完できます。

仕組み

エージェントは deb または rpm パッケージとして出荷され、言語の依存関係はありません。 Debian/Ubuntu または Red Hat ベースのシステムで動作します。インストール手順の詳細については、エージェントのドキュメントを確認してください。

インストールが完了すると、エージェントは数分で設定され、デーモンとして永久に実行され続け、インフラストラクチャをサイレントに監視します。さらに、エージェントには、AppSignal ダッシュボードにログインしたカスタム データを中継する StatsD サーバーが含まれています。

StatsD とは何ですか?

StatsD は、任意のデータを収集および集計するための標準です。メトリックとパフォーマンス情報のログ記録に重点を置いています。マシン内での占有面積が小さい UDP 接続上で軽量のテキスト プロトコルを使用します。

StatsD メッセージは次のようになります。

KEY の場合 は任意の文字列、および VALUE は数字です。 type 値は、数値がどのように処理されるかを定義します。

次の 3 種類の指標をサポートしています。

  • c :これはカウンターです。 呼び出されるたびに増加します。たとえば、active_users:1|c active_users に 1 を加えます カウンター。
  • g :ゲージ 数値を受け取り、更新されるまでそれを保持します。これは、スループット、アクティブ ユーザーの数、キュー内の保留中のタスクの数など、時間の経過とともに増減する値を記録するのに役立ちます。
  • t :タイミングを保存します 価値観。このタイプは、継続時間を追跡するのに最適です。 AppSignal は、記録されたすべてのタイミングの平均、カウント、パーセンタイルを計算します。

サポートされていないその他の指標タイプは、黙って無視されます。

StatsD へのデータの送信

スタンドアロン エージェントは、ポート 8125 で UDP パケットをリッスンします。netcat を使用して、コマンド ラインから StatsD 形式の文字列を送信できます。

 

UDP を使用しているため、応答を待つ必要はありません。

Socat も機能します:

 

これにより、バッチまたは cron ジョブを簡単に計測できるようになります。たとえば、次の行ではゲージを使用して、バックアップ ジョブが生成したデータ量を記録します。

 

整数に限定されるわけではありません。 StatsD は浮動小数点数も処理します。

 

メトリクスにタグを追加できます。 StatsD サーバーは、メッセージの末尾にあるオプションのタグをサポートしています。

同じメッセージ内に複数のタグを適用し、後でフィルタリングするための値を割り当てることができます。

 

AppSignal でデータを確認する方法については、後ほど学習します。

言語のインスツルメンテーション

StatsD サーバーは、UDP パケットを送信できるあらゆる言語と互換性があります。いくつかの例を見てみましょう。

Python は、データ マイニングと機械学習で人気のある言語です。ビルドイン socket を使用して、Python アプリケーションにインストルメンテーションを追加できます。 ライブラリ:

 

Java では java.net を使用して同様の結果を達成できます。 ライブラリ:

 

PHP は、非常に人気のある言語のもう 1 つの例です。 socket_sendto を使用して UDP パケットを送信できます :

 

StatsD クライアント

これまで、すべての言語で組み込みのネットワーク機能を使用してきました。しかし、それだけではありません。多くの言語と製品には、サードパーティの StatsD クライアントまたはアドオンが含まれています。少なくともサポートされているデータ型については、StatsD 準拠のクライアントが機能するはずです。クライアントのリストは、StatsD プロジェクト wiki で見つけることができます。

AppSignal でのホスト データの表示

ホスト メトリクス ダッシュボードにはマシンのリソース使用率が表示されます。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

AppSignal は、スタンドアロン エージェントを実行しているすべてのマシンにエントリを追加します。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

ダッシュボードには、負荷と CPU の平均ディスク、ネットワーク、メモリ、スワップ使用量が表示されます。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

ダッシュボードの作成

AppSignal は、送信した StatsD 値のダッシュボードを自動的に生成しません。これにはカスタム ダッシュボードを作成する必要があります。

まず、[ダッシュボードを追加] をクリックします。 ダッシュボード メニューの下:

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

ダッシュボードに名前を付けます。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

[グラフを追加] をクリックします。 ボタンにはグラフ ビルダーが表示されます:

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

グラフに名前を付け、[指標の追加] をクリックします。 :

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

メニューから興味のある指標を選択します。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

必要に応じて、フィルタリングにタグを使用します。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

次に、[概要に戻る] をクリックします。 。さまざまなグラフ タイプと値単位を試して、表現したいデータに最も適したものを見つけることをお勧めします。

面グラフを使用すると、平均とパーセンタイルがより明確に表示されるため、タイミング データがより見やすくなります。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

折れ線グラフはカウンターやゲージに最適です。

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

結果に満足したら、[グラフの作成] をクリックします。 .

インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

Node.js のパフォーマンス監視ツール (APM) として AppSignal セットを使用している場合、または Ruby (on Rails) APM または Elixir APM を使用している場合は、他の自動的に計測または測定されたメトリクスのダッシュボードを追加することもできることに注意してください。

まとめ

AppSignal のスタンドアロン サーバーを使用してマシンと衛星コードを監視する方法を学びました。内蔵の StatsD サーバーを使用すると、任意のパフォーマンス データを記録し、あらゆるプロセスを計測できます。

スタンドアロン エージェントの使用方法の詳細については、次のリンクを確認してください。

  • StatsD リファレンス
  • カスタム指標を送信する方法。
  • AppSignal でダッシュボードを作成する
  • スタンドアロン エージェントによる Kafka の問題の特定と解決
インフラストラクチャの可視性の向上:StatsD と AppSignal のスタンドアロン エージェントを使用してあらゆるシステムを監視

トーマス フェルナンデス

ゲスト著者の Tomas は、IBM で 10 年間勤務し、開発、サービス提供、データベース管理、クラウド エンジニアリングなど、あらゆることを少しずつ担当しました。彼は現在、独立したコンサルタント兼テクニカル ライターです。

Tomas Fernandez によるすべての記事


  1. DockerでSinatraアプリをAmazonsEC2ContainerServiceにデプロイする方法

    告白の時間。私の開発環境は、Honeybadgerに取り組んできた4年間あまり変わっていません。しかし、その間、Honeybadgerは、機能する約10のサービスに応じて、はるかに洗練されたものになりました。 そのため、ローカル開発のためにDockerに移行しています。すべての開発者がPostgres、Cassandra、Memcachedなどをセットアップする代わりに、docker-composeを使用して事前に作成された環境を起動できます。素晴らしいです。 当然、Docker化されたアプリケーションをデプロイするのはどれほど簡単かと思い始めました。 Dockerを使用したデプロイ D

  2. RailsでのTailwindCSSの使用

    CSSは魔法のようですが、時間がかかります。美しく、機能的で、アクセスしやすいサイトを使用するのは楽しいことですが、独自のCSSを作成するのは大変です。 Bootstrapなどの多くのCSSライブラリは近年爆発的に増加しており、Tailwindは2021年にパックをリードしています。 RailsにはTailwindが付属していませんが、この記事では、TailwindCSSを新しいRubyon Railsプロジェクトに追加する方法を説明します。これにより、設計の実装にかかる時間を節約できます。また、Tailwindのユーティリティクラスを使用した設計のウォークスルーも行います。このチュートリア