2
2

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 3 years have passed since last update.

無料版のsentryでslackに通知を送る(lambda利用)

Last updated at Posted at 2020-11-01

この記事について

slackに通知させるには、sentryのintegrationとして用意があるのですが、利用できるのが有料版のみとなっています。

個人でのプロジェクトでの利用で、有料化するつもりはなく、無料版でもできるようにしてみました。
通知の部分のみにフォーカスしているので、sentryの設定などは、説明を省いております。

対象

  • sentryの無料版を利用していて、slackに通知したい
  • awsのアカウントを持っている

方法について

sentryのwebhookを利用します。
送信先にlambdaのURIを指定して、lamdaからslackのwebhookにリクエストします。

手順

  • slackのincoming webhookを設定して、リクエスト先を用意します。(いろいろ記事があるので省略)
  • lambdaを作成し、環境変数SLACK_INCOMING_WEBHOOK_URL に、slackのURIを設定する
  • lambda処理を下記をコピペして保存・デプロイ(サンプルはruby)
require 'json'

def lambda_handler(event:, context:)

    body = JSON.parse(event['body'])
    
    post_query = {
      "attachments": [
        "pretext": "<#{body['url']}|Exception>\r\nproject: #{body['project_slug']}\r\nenvironment: #{body['event']['environment']}\r\ndetail: #{body['event']['metadata']['filename']}`#{body['event']['metadata']['function']}`",
        "color": "#D00000",
        "fields": [
          "title": "#{body['event']['title']}",
          "value": "#{body['culprit']}"
        ]
      ]
    }
    
    uri = URI.parse(ENV['SLACK_INCOMING_WEBHOOK_URL'])
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.post(uri.path, post_query.to_json)

    { statusCode: 200, body: JSON.generate('') }
end

結果

下記のような通知が届きます。
(サンプルはRailsで発生させたエラーです)

スクリーンショット 2020-11-01 19.34.16.png

最後に

lambdaの処理は、Railsでのエラーを前提にしているので他のフレームワークだと情報が正しく表示されない可能性はあります。
カスタマイズは、sentryのwebhookパラメータを覗けばできると思います。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?