雑なやつ

レベルを上げて技術で殴りたい

VPS を式年遷宮する その3 サーバの監視周り - Mackerel 導入

概要

サーバ監視を目的として Mackerel を導入、SSH ログイン時 Slack へ通知するスクリプトを組み込んだ。
その際の作業内容を記述する。

環境

サーバ

ローカル

  • macOS 10.15.6 Catalina
  • iTerm2

1. Mackerelの導入

Mackerel とは

株式会社はてな が開発・運用しているサーバ監視サービス。
mackerel.io

数年程利用していますが、グラフやアラート時系列といった UI が見やすく、
各種設定も分かりやすいのでお勧めです。
Free プランと Standard プランが存在するが、個人用途なら Free プランで十分です。

サーバへのインストール

mackerel-agent のインストールは非常に簡単です。
Mackerel のダッシュボードにて、新規ホストを追加する際に提示されるワンライナーコマンドを実行するだけで完了します。

$ sudo wget -q -O - https://mackerel.io/file/script/setup-all-apt-v2.sh | MACKEREL_APIKEY='<API Key>' sh

私の環境ではパッケージが足りず失敗したので、必要パッケージを導入しました。

$ sudo apt install gnupg

監視ルールの設定

サーバに異常が出た際、通知するための監視ルールを設定します。
Free プランでは監視ルール数の上限が結構少ないので、 厳密な設定が必要な場合は有償プランを検討してください。

f:id:ram1009:20200807223238p:plain
mackerel-monitors

Slack 通知の設定

監視ルールに抵触した場合は通知を送信できます。
送信先には様々なサービスが選択でき、複数サービスへ同時送信も可能です。

f:id:ram1009:20200807232442p:plain
Mackerel の通知チャンネル一覧

Slack へ通知を行う際には下記の2つが必要です。

  • 通知するチャンネル名
  • Slack の Webhook URL

f:id:ram1009:20200807233423p:plain
Slack 通知の設定

実際に Slack へ通知が送られた例は以下の通り。

f:id:ram1009:20200807235651p:plain
Slack 通知の例

2. SSH ログイン時通知スクリプト導入

SSH ログイン時に実行するスクリプト/var/local/script/ に設置する。

$ sudo vim /var/local/script/sshlogin.sh

---
#!/bin/sh
#WebHookUrl
WEBHOOKURL="<WebHookUrl>"
#Slack送信チャンネル
CHANNEL=${CHANNEL:-"#server"}
#Slack送信名
BOTNAME=${BOTNAME:-"SSH_Login"}
#Slackアイコン
FACEICON=${FACEICON:-":ghost:"}
#Slackメッセージ
MESSAGE=${MESSAGE:-"$1が$2から$3にログインしました"}

curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOT    NAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}${WEBMESSAGE}\" }" ${WEBHOOKURL}     >/dev/null

/etc/ssh/sshrc に下記を記述する。

$ sudo vim /etc/ssh/sshrc
--- 
if [ $PS1 ]; then
  /var/local/script/sshlogin.sh "$USER" "$SSH_CLIENT" "$HOST_NAME"
fi

SSH でログインを行うと Slack へ下図のような通知が届きます。

f:id:ram1009:20200807235139p:plain
SSH ログイン時の Slack 通知例

参考文献

SSHログイン時にコマンド実行 | technote

SSHでログインしたらSlackに通知する方法 | Step On Board