こんにちは、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[/caption]
画像の上図は、サンプリングされたトレースが表示されています。サンプリングされているため、エラーの記録が完全ではありません。
下図は全てトレースされているもので、エラーが全て記録されています。
完璧なエンドユーザーエクスペリエンスを提供するために、パフォーマンスの問題は正確、かつリアルタイムに解決することが大切になります。このようなアプリケーションの監視には、ずばり SignalFxは適しているのではないでしょうか。サンプリングを行わないリアルタイムのAPMを提供しているものは、現状 SignalFx だけです。
(他にあれば誰か教えてくださいm( )m)
本記事では、まずモニタリング機能の "Infrastructure Monitoring" のご紹介をします。
やること
"Infrastructure Monitoring" の監視機能を利用して、以下を試してみます。
- AWSとの連携
- ホスト(EC2)にAgentを導入
- ホスト,CloudWatch から値を取得する
- 監視設定(アラートを通知してみる)
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をご紹介します。