1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mackerelを入れてGoogle chat spaceに通知するまで

Last updated at Posted at 2023-11-11

はてなが作った監視ツールでMackerelというのがあり、値段もお手頃で自動監視を行うにはピッタリです。
以前は監視を仕掛けて、Slackに飛ばしていたのですが、当社ではGoogle chat spaceを使っているのでそちらでも投稿できるようにしてみました。あまり他にこういった記事がないので使っている人にはお役に立つかもしれません。

仕組み

Mackerelで上がったアラートをGASでGoogle chat spaceに投稿できるフォーマットに修正して投稿する。

Mackerel登録

サイトからアカウント登録

image.png

メールで認証

image.png

監視対象ホストの登録

image.png

ホストにエージェントをインストール

image.png

こちらで登録を確認
image.png

アラートのメトリクス設定

image.png

Google Chat Spaceの設定

※Google Workspace課金している人のみ

Spaceの作成

image.png

アプリと統合からWebhookの設定

image.png

image.png
こうして作成したWebhookのアドレスを控えておきます。

GASでAPI作成

// APIにしてPOSTで受ける形式にする場合は必ずdoPostという関数にする必要あり
function doPost(e) {
  // JSONをパース
  if (e == null || e.postData == null || e.postData.contents == null) {
    return;
  }
  var requestJSON = e.postData.contents;
  var requestObj = JSON.parse(requestJSON);

   //GoogleChatで設定したWebhookのURLを設定
  const WEBHOOK_URL = "(Webhookのアドレス)"; 

// 監視名称に”%”という文字を含む場合はメトリクスアラート、それ以外は外形監視アラート
if (requestObj["alert"]["monitorName"].indexOf('%') > 0){
  // メトリクス
  var orgName = requestObj["orgName"];
  var event = requestObj["event"];
  var imageUrl = requestObj["imageUrl"];
  var host = requestObj["host"]['name'];
  var host_url = requestObj["host"]['url'];
  var metricLabel = requestObj["alert"]['metricLabel'];
  var metricValue = requestObj["alert"]['metricValue'] ?? '-';
  var isOpen = requestObj["alert"]['isOpen'];
  var status = requestObj["alert"]['status'];
  var alert_url = requestObj["alert"]['url'];

  //メッセージを作成
  var msg = '【Mackerel Alert】\n';
  msg += 'orgName: '+orgName+'\n';
  msg += 'event: '+event+'\n';
  msg += 'host: '+host+'\n'
  msg += 'metricLabel: '+metricLabel+'\n';
  msg += 'metricValue: '+metricValue+'\n';
  msg += 'isOpen: '+isOpen+'\n';
  msg += 'status: '+status+'\n';
  msg += 'imageUrl: '+imageUrl+'\n';
  msg += 'alert_url: '+alert_url+'\n';
  msg += 'host_url: '+host_url+'\n';
}else{
  // 外形監視
  var orgName = requestObj["orgName"];
  var monitorName = requestObj["alert"]['monitorName'];
  var memo = requestObj["memo"];
  var isOpen = requestObj["alert"]['isOpen'];
  var status = requestObj["alert"]['status'];

  //メッセージを作成
  var msg = '【Mackerel Alert】\n';
  msg += 'orgName: '+orgName+'\n';
  msg += 'monitorName: '+monitorName+'\n';
  msg += 'isOpen: '+isOpen+'\n';
  msg += 'status: '+status+'\n';
  msg += 'memo: '+memo+'\n';
}
  //メッセージを連想配列に格納
  var message = {
    'text' : msg
  };

  //HTTPリクエストのパラメータを設定
  var options = {
    'payload' : JSON.stringify(message),
    'myamethod' : 'POST',
    'contentType' : 'application/json'
  };

  //Google Chatへ投稿(WebhookURLへHTTP POSTを実行)
  var response = UrlFetchApp.fetch(WEBHOOK_URL,options);
}

デプロイ

image.png

外部アクセス可能な設定でデプロイ

image.png

デプロイIDとウェブアプリをコピーして控える

image.png
ここのウェブアプリのURLがAPIになります。

引き続きMackerelの設定

通知チャンネルにWebhookを追加

image.png

上記のウェブアプリURLをここに入力。通知するイベントも必要なものにONしておく。
image.png

他にも必要なメトリクス、外形監視あれば設定

image.png

どうテスト?

Apache Benchとかで負荷かけてもいいのですが、簡単にメトリクスのしきい値下げてみるのでいい気がします。

投稿イメージ

image.png

最後に

いかがでしょうか?一応安全のためにメールでも通知するようにしておりますが、ここまでやっておけば自動監視もなんとかできるのではないでしょうか?この仕組みを使って初動を早めることができればと思っております。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?