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

StatsDとAppSignalのスタンドアロンエージェントを使用したシステムの監視

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

Node.js用のAppSignalAPM、およびRubyAPMとElixirAPMは、アプリ自体を自動的にインストルメント化します。ただし、AppSignalは、デフォルトではこれらの衛星プロセスを監視しません。あらゆる場所で監視を拡張し、すべてのデータを1つのアプリに収めるために、AppSignalのスタンドアロンエージェントをインストールできます。

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

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

スタンドアロンエージェントを使用して、以下を監視できます。

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

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

仕組み

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

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

StatsDとは何ですか?

StatsDは、任意のデータを収集および集約するための標準です。メトリックとパフォーマンス情報のロギングに焦点を当てています。マシンのフットプリントが小さいUDP接続を介して軽量のテキストプロトコルを使用します。

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

KEY:VALUE|TYPE

KEYの場所 は任意の文字列であり、VALUE は数字です。タイプ値は、数値の処理方法を定義します。

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

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

サポートされていない他のメトリックタイプは、黙って無視されます。

StatsDへのデータの送信

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

echo -n "myscript.myevent.counter:1|c" | nc -4u -w0 localhost 8125

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

Socatも機能します:

echo -n "myscript.myevent.counter:1|c" | socat - udp:localhost:8125

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

backup_size=$(du -m /backups | cut -f1)
echo -n "backup.data:$backup_size|g" | nc -4u -w0 localhost 8125

整数に限定されません。 StatsDは浮動小数点数でも機能します:

echo -n "network.latency:0.2|g" | nc -4u -w0 localhost 8125

タグの使用

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

KEY:VALUE|TYPE|#TAGS

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

echo -n "backup.data:$backup_size|g|#backups,env:production" | nc -4u -w0 localhost 8125

AppSignalのデータを確認する方法を少し学びます。

インストルメンテーション言語

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

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

import time
 
# measure time taken for function
start = time.process_time()
train_my_model()
training_time = time.process_time() - start
 
# send value to statsd
import socket
 
UDP_IP = "127.0.0.1"
UDP_PORT = 8125
MESSAGE = b"model.training.time:" + bytes(str(training_time), 'utf-8') + b"|t"
 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

java.netを使用すると、Javaでも同様の結果を得ることができます。 ライブラリ:

byte[] buffer = "mybatch.exception.counter:1|c".getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket packet = new DatagramPacket(
    buffer, buffer.length, address, 8125
);
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.send(packet);

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

$msg = "mywebsite.active_users:$ACTIVE_USERS|g";
$len = strlen($msg);
 
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 8125);
socket_close($sock);

StatsDクライアント

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

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

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

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

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

ダッシュボードの作成

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

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

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

グラフの追加をクリックします ボタンはグラフビルダーを表示します:

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

メニューから関心のある指標を選択してください。

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

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

平均とパーセンタイルがより明確に表示されるため、タイミングデータはエリアグラフで見栄えが良くなります。

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

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

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

>

まとめ

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

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

  • StatsDリファレンス。
  • カスタムメトリックを送信する方法。
  • AppSignalでダッシュボードを作成します。
  • Kafkaの問題の特定と解決スタンドアロンエージェント。

  1. Defragglerを使用して、起動時にディスク、ファイル、およびシステムファイルをデフラグします

    デフラグラー は無料のディスクデフラグソフトウェアで、ドライブ全体を処理しなくても、必要な個々のファイルをすばやくデフラグできます。新しいバージョンでは、起動時にシステムファイルをデフラグすることもできます。 WindowsPC用のDefraggler このコンパクトでポータブルなWindowsアプリケーションは、NTFSおよびFAT32ファイルシステムをサポートします。 Defragglerは、完全なOSサポートを備えた起動プロセス中に完全なオフラインデフラグを提供することにより、他の無料のデフラグツールをはるかに超えてDefragglerの機能をプッシュします。 さらに、UIは新し

  2. GCE、クラウドストレージ、PubSubを使用してRubyで稼働時間監視システムを構築する

    稼働時間の監視には、Webサイト、API、およびサーバーの可用性のチェックが含まれます。モニターは、指定された間隔内で特定のエンドポイントをプローブして、それが使用可能かどうかを判別します。目標は、システムのSLAで指定されているように、契約レベルの可用性を達成し、契約が満たされていない場合の違いを判断することです。 この記事では、Prometheusblackbox_exporterに基づく稼働時間監視システムを構築します。カスタムHTTP監視システムを構築するのは簡単かもしれませんが、エクスポーターの周りにラッパーを構築することで、他の多くのプローブ手法にアクセスし、システムの他の要素を