🕊️

Lambdaのお気軽なモニタリングにDashbirdが便利そう

2023/04/16に公開

Lambdaを書いていて、デプロイにはSAMやServerless Frameworkを利用している、みたいな人は多いと思う。私もその一人で、基本的には終始VSCodeとにらめっこしている。

時々「ちゃんと動いてるかな~」とCloudWatchのダッシュボードを眺めに行くことがあるが、MFAを抜けてマネジメントコンソールまで辿り着くのが結構面倒くさい。
セキュリティ面では本末転倒感はあるが、対象のログはまったく機微なものではないし、何かあったらLambda&SNSでアラートすればよいのだが、もう少しお手軽にモニタリングが可能な仕組みが作れたらいいなと思った。

猫も杓子もChatGPTなご時世だし、とりあえず聞いてみることにした。

それはそうなんだけど。SaaSのFreeプランとかで手軽に済まないかなと思っている。

相手がAIだと分かっていてもお礼を言ってしまう人の良さがどうしようもなく伺えてしまう。
さて、logglyはなんだか見たことありそうな名前をしているが、Dashbirdのほうは完全に初見。

https://www.loggly.com/
https://dashbird.io/

logglyに関しては日本語記事がいくつか見つかった。
一方Dashbirdに関しては全くなさそう(2023年4月現在、Qiitaにひとつ中の人によるPR記事のようなものがあったぐらい)で、個人でならある程度無料で使い続けられそうだったので、今回はDashbirdを試してみた。

Dashbirdをはじめる

このあたりを見ればアカウントを作るところからの手順が分かるので、これにしたがって進めればよい。
https://dashbird.io/docs/quickstart/setting-up-dashbird/

途中でCloudFormationスタックを作成する。

作成されるリソースはIAMポリシーとロール(DashbirdDelegationRole)だけ。
Dashbirdが持つAWSアカウント(458024764010)からのAssumeRoleを受け入れる。対応しているAWSサービスの読み取りアクションが許可されているのみなので、やりたい放題されるのではと慌てたりする必要はない。

Now we connect our AWS account with Dashbird. Dashbird has created a CloudFormation template that automatically creates a role in your AWS account delegating read-only access to various services in your account. Dashbird uses this role to get the metrics, logs, and traces data for the services in your account.

(実際に流されるテンプレートの抜粋)

cloudformation.yml
  DashbirdDelegationRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              AWS:
              - arn:aws:iam::458024764010:root
            Action:
              - 'sts:AssumeRole'
            Condition:
              StringEquals:
                'sts:ExternalId': !Ref ExternalId
      Path: /
      RoleName: !Sub 'DashbirdDelegationRole-${DashbirdAccountId}'
      Policies:
        - PolicyName: Resources
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: 'apigateway:GET'
                Resource: '*'
              - Effect: Allow
                Action: 'apigateway:HEAD'
                Resource: '*'
              - Effect: Allow
                Action: 'apigateway:OPTIONS'
                Resource: '*'
              - Effect: Allow
                Action: 'appsync:get*'
                Resource: '*'
              - Effect: Allow
                Action: 'appsync:list*'
                Resource: '*'
	      ...

スタックの作成が終わったら、Outputの値をもとの画面に転記すればセットアップが完了。
こんな感じのダッシュボードが見られるようになる。

注: だいぶ時間が経ってからの図

見て回ってみる

ダッシュボード左下の"Errors"からLambda関数のエラーが一覧できる。
特別な設定を加えたわけではなく、ここまでのダッシュボードのセットアップを終えただけで、関数の実行失敗や、WARNログの出力が確認できる。

他には、リソースの設定や運用状況がWell-Architect Lensに沿っているかを確認したり、

カスタムダッシュボードを作成することも可能。

Errors,Alarms,Insightsの通知は、デフォルトではメールが送信される設定になっている。
無料プランではSlackへの送信も設定可能。

感想: 結構便利そうじゃない?

紹介した機能が提供する情報にはマネジメントコンソールからリーチできたり、頑張ればCloudWatchまわりのサービスによって充足できたりするものがほとんどだが、特に個人開発やPoCフェーズでは、モニタリングにあまり時間や労力を割けない/割きたくないケースが往々にしてあると思う。そういった場合にとりあえず入れとけ、の選択肢にはなり得るかも。
そもそも当初はログ監視だけできれば良かったので、無料でこれだけの機能にアクセスできている時点で結構お得感があるなと思った。

気になったこともいくつかあるので、列挙しておく。

  • 対応しているサービスのチョイスが絶妙なので、ハマらないとちょっとツラいかもしれない。VPC/EC2のモニタリングもまとめてやりたいんじゃ!となった瞬間に選択肢から消える。

    Dashbird monitors Lambda functions, API Gateways (REST and HTTP), SQS queues, ECS containers, Kinesis, Step-Functions, DynamoDB tables, SNS, ELB, RDS, OpenSearch and AppSync.

  • セットアップが終わってからしばらくはLambda関数の実行ログが取得されなかった。しばらく(1,2週間ぐらい?)経ったあとにWARNINGログの通知が来てはじめて取得できていることに気付いたが、このログがトリガーなのか、Lambda関数をいくつか新しく作成/削除したのがトリガーだったりするのか、はたまた他の理由なのかは分からない。
  • ダッシュボードによくあるチャットウィンドウがあり、「分からんことがあったらこれで聞いてくれよな!」みたいな感じだったので上記の件について質問をしてみたが、1ヶ月ぐらい経っても未読だったので、これは機能していないっぽい。

Discussion