ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

MackerelでAzureの監視

クラウドインテグレーション事業部所属の自称魚介系エンジニアの松尾です。

ForgeVision Advent Calendar 8日目の記事です。

個人的に今回はさほど間を開けずの投稿となります。
鯖のネタを楽しみにされている方には申し訳ないのですが、今シーズンはネタが尽きてきた(魚だけに)ので、今回鯖のお話を見送る旨予めお詫び申し上げます。。。

お話できるような鯖のネタはないのですが、ネタが尽きない監視サービスは・・・そうです!Mackerelです!!

これまでのブログでは主にAWSとMackerelの連携について記載させていただいておりましたが、今回は趣向を変えてAzureとの連携方法について紹介させていただきます。

私がMackerelを使い始めた頃は、Azureでインテグレーションが可能なサービスは3つしかなかったのですが、今ではApp Service、Functions、Application Gatewayなど、Azureには欠かせないサービスもインテグレーションできるようになりました!!
まさにブログ化にするには、時は満ちた・・・という感じですね!!

なお、これまでのMackerelに関する投稿は以下の通りです。
気になる記事がございましたら、是非ご一読下さい!!

techblog.forgevision.com
techblog.forgevision.com
techblog.forgevision.com
techblog.forgevision.com
techblog.forgevision.com
techblog.forgevision.com

Mackerelインテグレーションの概要

まず、実際にインテグレーションを行う前に、Mackerelのインテグレーション機能について説明します。

インテグレーション機能について、Mackerelサイトでは以下のように説明されています。

Azureインテグレーションを用いるとAzureクラウド製品をMackerelのホストとして管理し、メトリックを監視できます。本機能はTrialプランとStandardプランのみの提供となります。
※AWSインテグレーションでも同様の説明がされております。

私の理解では、自らが保有するクラウドサービス(AWS、Azureなど)のアクセス権限をMackerelに付与することで、APIを使って自動的にメトリックを取得してくれる機能と考えてます。(おおむね間違ってはいないと思います・・・)

EC2やAzureVMなどのIaaSサービスはMackerelエージェントをインストールすることでMackerelへメトリックをPushしますが、PaaSやSaaSサービス(RDS、LB、Web Appsなど…)はエージェントをインストールすることができませんので、このインテグレーション機能を用いることでメトリックの取得が可能となります。
※厳密にはMackerel公式プラグインでも監視可能ですが、導入の容易さと継続的な運用を考えるとインテグレーションの方がかなり楽です。

詳細は以下Mackerelサイトをご参照下さい。 mackerel.io

事前準備

Mackerel側では基本的にオーガニゼーションの作成が完了していれば問題ございませんが、先にサービス・ロール作成していると監視までの設定がスムーズにできます。

なお注意点として、上記Mackerelサイトに記載の通り、プランはTrialまたはStandardプランのみでインテグレーションの設定が可能であるため、その点はご留意下さい。

Azure側では以下のリソースを作成しております。

  • Azure VM
  • App Service
  • Azure Database for MySQL サーバー

また、Mackerel側で監視対象を区別するため、各リソースに以下のタグを付与しております。

キー
Mackerel True

Azure側の設定

サービスプリンシパルの作成

まず初めに、Azure側でMackerelへアクセス許可を与えるためのサービスプリンシパル(特定のAzureリソースにアクセスするのに使用するID)を作成します。

Azureポータルにログインし、Azure Active Directoryの管理画面にアクセスします。

f:id:matsuo1017:20201207234504p:plain
Azureポータル検索画面

Azure Active Directoryの管理画面で、左ペインの「アプリの登録」を選択し、中央ペインで「+新規登録」を押下します。

f:id:matsuo1017:20201207234754p:plain
アプリの登録①

アプリケーションの登録画面で以下の通りの指定を行い、「登録」を押下します。

  • 名前
    • Mackerelインテグレーション
      ⇒ どういった指定でも問題はありませんが、識別しやすい名前をお勧めします。
  • サポートされているアカウントの種類
    • この組織ディレクトリのみに含まれるアカウント (フォージビジョン株式会社 のみ - シングル テナント)
      ⇒ デフォルト
  • リダイレクトURI
    • 空欄
      ⇒ デフォルト

f:id:matsuo1017:20201208001133p:plain
アプリの登録②

アプリケーションの登録が完了したら、先ほどのアプリケーションの一覧画面から登録したアプリケーションを選択します。

f:id:matsuo1017:20201208001957p:plain
アプリの登録③

アプリケーションの詳細画面でクライアントIDテナントIDを控えておきます。
※Mackerel側のインテグレーション設定時に必要になります。

f:id:matsuo1017:20201208003715p:plain
アプリの詳細①

Mackerelからのアクセスを許可するためのシークレットの作成を行います。
左ペインの「証明書とシークレット」を選択し、中央ペインで「+新しいクライアントシークレット」を押下します。

f:id:matsuo1017:20201208004305p:plain
アプリの詳細②

クライアントシークレットの追加画面で以下の通りの指定を行い、「追加」を押下します。

  • 説明
    • Mackerelインテグレーションに利用
      ⇒どういった指定でも問題はありませんが、どこで利用されているか識別できる内容をお勧めします。
  • 有効期限
    • 1年
      ⇒ セキュリティ的には有効期限の指定をお勧めしますが、ローテーションし忘れると、期限経過後にMackerelからアクセス不能になるためご注意下さい!

f:id:matsuo1017:20201208005635p:plain
アプリの詳細③

クライアントシークレット追加後、シークレットの値を必ず控えること。
※Mackerel側のインテグレーション設定時に必要になります。
※暫く時間が経過すると確認不可となるためご注意ください!!

f:id:matsuo1017:20201208005740p:plain
アプリの詳細④

権限の追加

前項でMackerelからのAzureへのアクセス許可の準備が整いましたので、次にメトリックを読み取るための権限を付与します。

サブスクリプションにアクセスします。

f:id:matsuo1017:20201208014823p:plain
サブスクリプション①

サブスクリプションの一覧画面でMackerelからのアクセスを許可するサブスクリプションを選択します。

f:id:matsuo1017:20201208015244p:plain
サブスクリプション②

サブスクリプション詳細画面の左ペインで「アクセス制御(IAM)」を選択し、中央ペインの「ロールの割り当てを追加」を押下します。

f:id:matsuo1017:20201208020749p:plain
アクセス制御(IAM)①

ロールの割り当て追加画面で、以下の通りの設定を行い、「保存」を押下します。

  • 役割
    • 閲覧者
  • アクセスの割当先
    • ユーザー、グループ、またはサービス プリンシパル
  • 選択
    • アプリケーション登録時に指定した名前(今回の場合は「Mackerelインテグレーション」)

f:id:matsuo1017:20201208021336p:plain
アクセス制御(IAM)②

アクセス制御(IAM)画面でロールが割り当たっていることを確認します。

f:id:matsuo1017:20201208021929p:plain
アクセス制御(IAM)③

Mackerel側の設定

Azureインテグレーション

Azure側の準備が整ったのでMackerel側の設定を進めます。

Mackerelにログインし、オーガニゼーションの詳細ページを表示します。

f:id:matsuo1017:20201208153342p:plain
Mackerel OverView

Azureインテグレ―ション」タブを選択し、「Azureインテグレーションを登録」を押下します。

f:id:matsuo1017:20201208153752p:plain
Mackerelオーガニゼーション画面(設定後)

Azureインテグレーション画面で以下を入力し、「作成」を押下します。

  • Azureアカウント
    • Azure側で控えたテナントID/クライアントID/シークレットキーを入力します。
      内容に間違いが無ければ「有効」ステータスとなります。
    • インテグレーションを行うリソースのリージョンを指定します。今回は「東日本」リージョンですべてのリソースを作成しているため、「Japan East」を選択します。
      ※リージョンごとにインテグレーション設定が必要となりますのでご注意下さい。
  • メトリックを収集するサービス
    • インテグレーションを行うAzureリソースを指定します。今回は事前に作成いていた以下のリソースを追加します。
      ※事前にサービス・ロールを作成している場合は併せてご指定下さい。
      • Virtual Machines
      • App Service
      • Database for MySQL
  • タグを指定して登録するホストを絞り込む
    • インテグレーション対象のリソースを絞り込む場合はタグを指定します。今回は事前にタグを付与しているため、「Mackerel:True」を指定します。
      ※絞り込みが必要ない場合は指定不要です。
  • 基本設定
    • インテグレーションの名前を入力します。今回は利用しているリージョンが識別できるよう「AzureIntegrationJapanEast」と指定します。
    • 任意のメモを入力します。

f:id:matsuo1017:20201208163650p:plain
Azureインテグレーション画面

インテグレーションが完了すると設定時に選択したリソースが表示されます。

f:id:matsuo1017:20201208164126p:plain
Mackerelオーガニゼーション画面(設定後)

早速ホストの一覧画面を確認すると既に登録ずみだったAWSのリソースと共にAzureのリソースが存在しているこが確認できました。
2つのクラウドサービスのリソースが一画面に表示されるのは感慨深いですね・・・。

f:id:matsuo1017:20201208165350p:plain
Mackerelホスト画面

各リソースのメトリック群も紹介しますので、ご参考になれば・・・。

Azure VM

f:id:matsuo1017:20201208172342p:plain
Azure VMメトリック

App Service

f:id:matsuo1017:20201208172414p:plain
AppServiceメトリック

Azure Database for MySQL

f:id:matsuo1017:20201208172446p:plain
Azure Database for MySQLメトリック

Azureインテグレーションの開始方法については以上となります。
今回は特に触れませんでしたが、MackerelではTeamsへもアラートの通知が可能ですので、Microsoftのサービス同士で連携させるのも面白そうですね!

最後までお読みいただきありがとうございました!!

次の配信について

今回はAzureとの連携方法についてご紹介させていただきました。
(前回のブログの宣言通りです!!) Mackerelで残りのインテグレーションできるクラウドサービスと言えば・・・

それでは次回もお楽しみに!!