IOpipeとは
IOpipeは、AWSのLambdaのinvocationのカウントだったり、エラーだったりをモニタリングしたり、アラートをあげて通知したりできるサーバーレスアーキテクチャ用のDevOpsプラットフォームです。
これまでは、cloudwatchlogsのtriggerなどを駆使してslackに通知したり、タスク管理ツールに起票したり、メールで通知したりしてきたと思いますが、IOpipeを導入することで、いい感じにやれます。
詳細はこちら
機能について
サインアップ後、下記の手順でチュートリアルを行っていきます。
- チームの作成 - プロジェクトの作成 - Lambdaのモニタリング画面の確認 - アラートの設定
チームの作成
自分でチームを作成したり、招待をもらうことで他のチームにjoinすることができます。
チームに対してプロジェクトが紐づいているようです。
プロジェクトの作成
実際にアプリケーションのモニタリング用にプロジェクトを作成します。
プロジェクトを作成するとトークンが生成されます。
トークンを従来のLambdaにSDKと一緒に噛ませることでIOpipeにデータを送信するといった仕組みです。
自分で用意したLmabda関数にSDKをインストールします。
現在は、 Node.js
, Python
, Java
に対応。
①まずはサーバーレスの環境用意
yarn add serverless yarn add @iopipe/iopipe
②任意のserverless.ymlを準備
service: testiopipe provider: name: aws runtime: nodejs8.10 profile: <profile> stage: <stage> region: <region> functions: hello: handler: handler.hello events: - http: path: / method: get cors: true
③コードの準備
var iopipe = require("@iopipe/iopipe")({ token: "" }); module.exports.hello = iopipe(async (event, context) => { return { statusCode: 200, body: JSON.stringify({ message: event }) }; });
以上!
Invocationのモニタリング
下記のような画面でモニタリングできます。
上記のモニタリング画面では、指定した時間帯、または直近15m
,1h
,4h
, 24h
でのinvocation数、success数、error数が確認できます。
アラート機能
アラート機能では、各ファンクションに対してルールを割り当て、それに対してアラートを検知し通知することができます。
ルールを作成します。
選べるメトリックの種類は、Invocation Duration
, Errors
, Invocation Count
, Custom Metric
, Custom Number Metric
, Trace Measure
, Process ID
の中から選択が可能です。
選択後は、Equal To
, Grater Than
等でしきい値を設定できます。
こういったルールを複数組み合わせることも可能です。
hook機能
アラート発生時にhook先にeventを送信することができます。
現在は、Email
, Slack
, Webhook
, Lambda Function
の4つが対応しているので、割と何でもできます。
送信されるイベントデータには下記のようなデータが含まれています。
{ "created": 1536055382323, "event": { "id": "<uuidv4っぽいやつ>", "url": "<endpoint>" }, "func": { "name": "Alert matching function iopipetest-test-fatality" }, "functionIds": ["<arn>"], "global": false, "hook": { "id": "<uuidv4っぽいやつ>", "value": "<endpoint>", "created": , "type": "webhook" }, "hooks": [{ "id": "<uuidv4っぽいやつ>", "value": "", "created": , "type": "slack_channel" }, { "id": "<uuidv4っぽいやつ>", "value": "<endpoint>", "created": , "type": "webhook" }], "id": "<uuidv4っぽいやつ>", "latestEventFunctions": [], "latestEventId": "<uuidv4っぽいやつ>", "muteUntil": , "name": "TEST IOpipe Alert", "project": { "teamName": "MyTeam", "teamId": "<uuidv4っぽいやつ>", "id": "<uuidv4っぽいやつ>", "name": "MyProject", "token": "<token>", "active": true, "created": }, "ruleConjunction": "or", "rules": [{ "id": "<uuidv4っぽいやつ>", "metric": "count", "operand": "10", "operator": "gt", "result": false, "range": 300000, "total": 0, "name": null, "funcs": [] }, { "id": "<uuidv4っぽいやつ>", "metric": "errors", "operand": "1", "operator": "gte", "result": true, "range": 300000, "total": 1, "name": null, "funcs": [{ "id": "<lambda arn>", "total": 1, "result": null }] }], "status": "alarm", "statusTimestamp": 1536137758986, "timestamp": 1536138774900, "transition": true, "transitionFromNow": "a few seconds ago" }
料金について
現在は、Startupプラン(無料)、Teamプラン(有料)、 Enterpriseプラン(有料)と3パターンあります。
Startup | Team | Enterprise | |
---|---|---|---|
メンバー数 | 1チームにつき1人まで | 無制限 | 無制限 |
プロジェクト数 | 1プロジェクトまで | 5プロジェクトまで | 無制限 |
関数呼び出し回数 | 月に100万回 | 月に500万回 | 無制限 |
データ保存期間 | 7日間 | 30日間 | カスタム出来るらしい |
他にもプランにより使える機能も異なるようです。
気になる方はこちらを確認してください。
まとめ
Lambda等のサーバーレス構成のアプリケーションって何をどう保守・運用するのか。とても難しいと思います。
これまでは、そもそもサーバーが無いのに何を監視するのか、エラーだけ通知すればいいのか等、各所で議論されていたと思います。
このツールを活用することで、何か出来そうな気がしてます。