【SignalFx - Infrastructure Monitoring】SignalFxでホストの監視をやってみる

記事タイトルとURLをコピーする

こんにちは、MS部の高橋(大)です。

SignalFx について

みなさん SignalFxをご存知でしょうか。2013年に設立、US は San Mateoに本社を掲げ、SaaS型の監視プラットフォームを提供しています。
 signalfx.com 

創業は Facebook社で監視ソリューションを開発いたエンジニアで、SignalFx はその流れを汲んでいます。

モニタリング機能の "SignalFx Infrastructure Monitoring" と、APM機能の "SignalFx Microservices APM™" の2つの機能を提供しています。

サービスごとに料金が異なります。詳細は SignalFx の公式ページをご覧ください。
SignalFx - Pricing

SignalFx の特徴

SignalFx の特徴は リアルタイム性 Tail-Basedのトレーシング(APM) です。

バッチを利用しないストリーミングにより、通常は10秒, 最小で 1秒の間隔で、リアルタイムに値の収集と解析が可能となっています。
またこの特性を活かし、値をサンプリングしない(全ての値を取得する)、Tail-Basedのトレーシング(APM) を実現可能にしています。

サンプリングしないAPMは値の全てが収集可能であり、エラーを取りこぼしません。

[caption id="attachment_72833" align="aligncenter" width="814"]https://www.apmdigest.com/apm-in-a-digital-world-part-1 https://www.apmdigest.com/apm-in-a-digital-world-part-1[/caption]

画像の上図は、サンプリングされたトレースが表示されています。サンプリングされているため、エラーの記録が完全ではありません。
下図は全てトレースされているもので、エラーが全て記録されています。

完璧なエンドユーザーエクスペリエンスを提供するために、パフォーマンスの問題は正確、かつリアルタイムに解決することが大切になります。このようなアプリケーションの監視には、ずばり SignalFxは適しているのではないでしょうか。サンプリングを行わないリアルタイムのAPMを提供しているものは、現状 SignalFx だけです。
(他にあれば誰か教えてくださいm( )m)

本記事では、まずモニタリング機能の "Infrastructure Monitoring" のご紹介をします。

やること

"Infrastructure Monitoring" の監視機能を利用して、以下を試してみます。

  1. AWSとの連携
  2. ホスト(EC2)にAgentを導入
  3. ホスト,CloudWatch から値を取得する
  4. 監視設定(アラートを通知してみる)

AWSとの連携

まず管理画面から "INTEGRATIONS" を選択します。

 

検索欄に 「AWS」 と入力し、「Amazon Web Services」のロゴをクリックします。

AWSとの接続はAWSマネジメントコンソールから行います。詳細はSingnalFx公式ドキュメントの  Connect to AWS CloudWatch の項目を参照してください。

AWSとの接続ができたら、どのサービス値を SignalFxがインポートするか指定しましょう。
"Built-in Namaspaces" で、 CloudWatch の値全てを取得するのか、あるいは特定のサービスの特定のタグが付いたリソースのみインポートするかを選択します。

下の図では、EC2に「Name:SignalFx Test - taisei takahashi」タグがついたもの、またAWS Lambdaの全リソースの値をインポートするよう設定しています。

ホスト(EC2)にAgentを導入

次にホスト(EC2)に Smart Agent と呼ばれるエージェントを入れます。
今回は Amazon Linux 2 にインストールします。

はじめに "INTEGRATIONS" のページに移り、 "SignalFx SmartAgent"  をクリックします。

"SETUP" タブから、インストール対象のOSを探します。
Amazon Linux 2 なので、Linuxのコマンドを実行します。

curl -sSL https://dl.signalfx.com/signalfx-agent.sh > /tmp/signalfx-agent.sh
sudo sh /tmp/signalfx-agent.sh YOUR_SIGNALFX_API_TOKEN --realm YOUR_SIGNALFX_REALM

上記コマンドの "YOUR_SIGNALFX_REALM" がオーガナイゼーションに紐づく値です。
"SETUP" タブからコマンドを確認すれば、オーガナイゼーション用に準備された REALM があるコマンドが用意されています。

デフォルトのままだとホスト名がEC2のローカルIPで登録され、管理に不便です。
コンフィグファイル /etc/signalfx/agent.yaml に hostname という Config option を加えます。

$ cat /etc/signalfx/agent.yaml
...

hostname: SignalFx Test - taisei takahashi

ちなみにConfigファイルを編集後、Agent の再起動は不要です。ファイルが編集されると、数秒後には変更が適用されています。

The Smart Agent automatically picks up any changes to the configuration file, so a restart is not required.   https://docs.signalfx.com/en/latest/integrations/agent/smart-agent-quickstart.html

Agent のステータスや、監視項目はコマンドから確認ができます。

$ sudo signalfx-agent status
SignalFx Agent version:           4.7.8
Agent uptime:                     191h23m34s
Observers active:                 host
Active Monitors:                  13
Configured Monitors:              13
Discovered Endpoint Count:        5
Bad Monitor Config:               None
Global Dimensions:                {host: SignalFx Test - taisei takahashi, AWSUniqueId: i-xxx_ap-northeast-1_xxx}
Datapoints sent (last minute):    654
Datapoints failed (last minute):  0
Events Sent (last minute):        6
Trace Spans Sent (last minute):   0

Additional status commands:

signalfx-agent status config - show resolved config in use by agent
signalfx-agent status endpoints - show discovered endpoints
signalfx-agent status monitors - show active monitors
signalfx-agent status all - show everything

ホスト,CloudWatch から値を取得する

次はホストとCloudWatchから取得してきた値を、管理画面から見てみます。
まずホストからの値を見てみましょう。

"INFRASTRUCTURE" の "Hosts" から、先程設定したホストをクリックします。
CPU Used(%) の値を見てみると、10秒間隔(デフォルト)で値が取得されれていることが分かります。

[caption id="attachment_72940" align="alignnone" width="1024"] グラフが "Line" だと見にくいので、"Column" で表示しています[/caption]

次は EC2の CloudWatchの値を見ます。
"INFRASTRUCTURE" の "AWS - EC2 Instances" から、対象の EC2インスタンスを選択します。

うまく表示できていなくて恐縮なのですが、CloudWatchと同様、5分間隔で値が取得されています。

監視設定(アラートを通知してみる)

値がとれましたので、監視設定を行い、アラートを飛ばしてみます。

メニューの [ALERTS]-[Detectors]-[NEW DETECTOR] を選択します。

"Detector Name" はCPU使用率の監視を行うため、「CPU Used %」とします。

監視設定を進めます。監視対象の Signalと、ホストを選択します。

今回は単純に「CPU使用率が閾値を超えたらアラート通知する」という設定にするため、 "Static Threshhold" を選択します。 "Outlier Detection" 等も用意されているので利用することが可能です。

閾値を入力します。 80% で進めます。

アラートメッセージを指定できます。特に今回は変更しません(スクショはデフォルトです)。

"Rule Name" を確認して、問題なしなら "ACTIVATE ALERT RULE" をクリックします。

アラートが作成されました。

アラート通知を確認する

CPU使用率を一気に 100%まで上げます。

メールが送信されました。

 

アラートが飛んだことが確認できましたので、CPU使用率を下げます。すると以下のメールが送信されます。

 

今回はアラート送信先をメールアドレスで指定しました。
他にも VictorOps や Amazon EventBridge といった各種ツールとの Integrationが用意されているため、柔軟な運用が可能になっています。

終わりに

SignalFxの機能の一つである、SignalFx Infrastructure Monitoring(リアルタイムモニタリング)をご紹介しました。次回は APMをご紹介します。

参考リンク

Qiita - 新しいモニタリング ツール .SignalFxをご紹介いたします。