以下の内容はhttps://tech.guitarrapc.com/entry/2019/03/28/020631より取得しました。


Azure Storage QueueをApplication Insightsで監視する

あるあるなQueueの監視ですが、自前でやらなきゃいけないならServerlessにぺちって任せるのは楽ちんですよ、というのはよくあるパターンです。 実際にQueue Storageのモニタリングをしてみましょう。

概要

Azure Storage QueueやService Busなどのキューサービスは、疎結合な構成を組んだ時に中心を担うため、そのキュー長が想定よりたまっていないか、推移はどうなっているかなどが気になります。

この監視を、Azure FunctionsのTimer Triggerで行ってみましょう。

Disclaimer

Datadogや複数のモニタリングサービスは、AzureのAPIをたたいて自分でクラウドリソースのメトリクスを見に行ってくれます。もしそれらで済むならこの記事は不要です、すぐに閉じましょう。この記事は、自分でリソースの状態をポーリングするときの対応例です。

Consumption Planを前提に毎30秒監視しています。(2 * 60 * 24 * 30 = 86400run) 無料枠内ですが、料金がどうなっても私は責任を取りかねます。(免責事項)

なぜ AzureFunctions なのか

モニタリングはアプリケーションの内部リソースと、クラウドなどの外部リソースで分けて考えられます。

アプリがスケールしたときに個別のアプリのメトリクスが見たければ、アプリケーションで監視するのが妥当なことは多いです。一方で、アプリケーションの外にあるリソースは、アプリケーションからモニタリングする必然性はありません。おのずと次のような欲求が高まってきます。

  • アプリケーション自身のリソースをモニタリングに消費したくない
  • モニタリング自身がスケールして重複した値が取れてほしくない
  • アプリケーション自身が、どのようなリソースに依存んして動いているのか関心がない

自前でメトリクスを見たいときは、どこかで実行します、がアプリケーションでは実行したくありません。監視対象を定義しておいて、メトリクスを取得するだけのシンプルな監視の場合、Serverlessでアプリケーションとは別個の存在として実行させるのが便利です。

Azure Storage Queueなら、Azure FunctionsのConsumption Plan + Timer Triggerが定時ポーリング監視になり、定性モニタリングとして負荷なく実行できるでしょう。

監視対象

Azureでキューといえば、Azure Storage QueueとService Busがありますが、さくっとStorage Queueで確認してみましょう。ここではmyqueueというキューを用意して監視することにします。

  • myqueue : Storage Queue APIで通常投げつけるQueue。主にこの子が気になる
  • myqueue-poison : WebJobsで失敗した時に自動的に作成されるQueueで-posisonが末尾につく。手動でなんとかすることになる

なお、Storage QueueはDead Letter Queue (DLQ) に対応していないのでまぁほげもげ。

実行環境

  • Function Runtime: v2
  • Language: C# (.NET Core 2.1)
  • Trigger: Timer Trigger (毎30秒)
  • Metrics: Queue Length
  • Monitoring: Application Insights

Azure Functions

Azure Functionsは、v2においても裏でApplication Insightsを使っています。 とはいえ、明示的にMicrosoft.ApplicationInsightsパッケージを取り込まないと、アプリからApplication Insightsをたたけないので入れておきます。

dotnet add package Microsoft.ApplicationInsights

メトリクスを送信するため、Azure FunctionsのApplication ConfigでApplication InsightsのInstrumentation Keyを設定します。もしAzure FunctionsのApplication Insightsにメトリクスを飛ばすのでいいならAPPINSIGHTS_INSTRUMENTATIONKEYでいいでしょう。

Queueに接続するため、QueueがあるStorage AccountのConnection Stringsを設定しておきます。ここでは、queue_storage_connection_stringとしました。

では実際に実行してみましょう。コードはこのような感じになります。

https://gist.github.com/guitarrapc/c39eeed2933ab8c8147e4243b1fd0aaa

これで毎10秒ごとにQueueの長さをモニタリングして、Application Insightsに投げられます。ローカルで実行した場合、コンソールにQueueの長さがでるでしょう。

Application Insights の確認

今回はAzure FunctionsのApplication Insights連携に乗っかているので見てみます。

ちょうどQueueを投げてなかったので0が継続して取れているのがわかります。

QueueLength を Application Insights で監視

あとはAzure Monitorという名のApplication Insightsの閾値によるActionでWebhookなりを投げるといいでしょう。Bodyの調整できない子ですが。

Azure Monitor | Microsoft Azure

Tips

Cloud Tableとか絡んでくると、いまだにMicrosoft.WindowsAzure.Storage パッケージが安定なので、AzureのNuGetパッケージつらい。

Ref

やろうとしたら、だいたいすでにやってるKloudさんつよい。v1ですが、だいたいやっていることは一緒です。

Monitoring Azure Storage Queues with Application Insights and Azure Monitor - Kloud Blog




以上の内容はhttps://tech.guitarrapc.com/entry/2019/03/28/020631より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14