この記事について
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で発生させたエラーです)
最後に
lambdaの処理は、Railsでのエラーを前提にしているので他のフレームワークだと情報が正しく表示されない可能性はあります。
カスタマイズは、sentryのwebhookパラメータを覗けばできると思います。