自分のサービス向けに低コストで外形監視をサーバレスで行うためにOSSを開発したので、その紹介を行います。
YAML定義ファイルを使用し、AWSやGCPのサーバレス環境を使用して監視することができます。
機能概要
YAMLを使用して監視対象/通知対象の設定を行います。
コマンドラインからの外形監視やクラウド環境へのデプロイを行う事ができます。
現在(ver:0.3.2)は通知対象にSlack、クラウド環境にGCPのCloud Functionsのみ対応しています。
使用方法
インストール方法
Pythonを使用して作られているので、PyPIからpipコマンド経由でインストールする事ができます。
pip install monitapi
定義ファイルの作成方法
定義ファイルはYAMLを使用して作成します。
監視対象と通知対象を一つのファイルで定義します。
標準出力としてログも出力されるので、Slackへの通知が必要ない場合は notification_targets
を記述しない事も可能です。
- サンプル (targets.yaml)
monitor_targets:
- github-monitapi
method: "GET"
url: https://github.com/fealone/monitapi
status_code: 200
timeout: 5
retry: 3
notification_targets:
- notification-to-slack:
type: slack
endpoint: {Incoming webhooksのエンドポイント}
payload:
blocks:
-
type: section
text:
type: mrkdwn
text: "Target: {{url}}, Status: {{status_code}}, Expect: {{expected_status_code}}, Message: {{message}}"
詳細は公開しているドキュメントに記載しているので、そちらを確認してください。
コマンドによる実行
コマンドを使用して外形監視を実行する事ができます。
cronを使用したサーバによる監視などを想定しています。
- 監視の実行
monitapi monitor targets.yaml
APIによる実行
APIを実行し、エンドポイントにリクエストする事で外形監視を実行する事もできます。
外形監視用のサーバを公開し、外部からスケジューラを使用して実行する場合などを想定しています。
- APIの実行
monitapi serve
- 監視の実行
curl http://{host}:8000/monitoring
Cloud Functionsへのデプロイ
現在、クラウド環境としてCloud Functionsへデプロイする事が可能です。
Cloud Schedulerを組み合わせて監視する事を想定しています。
monitapi deploy cloud_functions --name monitapi-example --file targets.yaml --options '{"--region": "asia-northeast1"}'
- 監視の実行(動作確認)
curl http://{host}/monitoring
監視環境の構築
実際に外形監視を実行するための環境を構築する流れを紹介します。
cronによる監視
monitapiをインストールし、crontabを登録して実行します。
今回は環境を汚染しないためにvenvの上で実行します。
- インストール
python -m venv /opt/monitapi
source /opt/monitapi/bin/activate
pip install monitapi
- crontabの登録
*/10 * * * * /opt/monitapi/bin/monitapi monitor {targets.yamlのパス}
Cloud Functionsによる監視
Cloud FunctionsとCloud Schedulerを組み合わせる事で、無料/低コストで監視環境を構築する事ができます。
Cloud Functionsは月200万回、Cloud Schedulerは3個のJobまで無料なので、その範囲であれば無料枠に抑える事ができます。
また、通知先もSlackのIncoming webhooksに対応しているので、これを組み合わせれば完全に無料で外形監視の仕組みを構築する事も可能です。
- Cloud Functionsへのデプロイ
export GOOGLE_APPLICATION_CREDENTIALS=credentials.json
export GOOGLE_CLOUD_PROJECT={project_id}
monitapi deploy cloud_functions --name monitapi-example --file targets.yaml --options '{"--region": "asia-northeast1"}'
- Cloud Schedulerの登録
- GCPコンソールからCloud Schedulerへアクセスする
CREATE JOB
を押下する- Name, Frequency(監視頻度), Timezoneを入力する
- Targetを
HTTP
にし、 URLにCloud Functionsのリクエスト先を入力するhttp://{host}/monitoring
- HTTP methodを
GET
に変更する CREATE
を押下して保存する
おわりに
monitapiはOSSとして公開しているので、何かあれば以下のリポジトリへよろしくお願いします。