Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケット...
Search
hico00
April 19, 2019
Technology
0
130
Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケットを作成する #sa_study
2019/04/19に行ったスタジオ・アルカナ社内勉強会で使用したスライドです。
hico00
April 19, 2019
Tweet
Share
More Decks by hico00
See All by hico00
自分だけのアバターを簡単につくろう&アバターでビデオ会議! #sa_study
hico00
0
560
PHPでもVtuberになりたい! #phperkaigi
hico00
0
200
[PHPカンファレンス2019]当日スタッフをおすすめしたい話
hico00
0
280
Other Decks in Technology
See All in Technology
Git in Team
kawaguti
PRO
3
350
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
8
4.1k
M5製品で作るポン置きセルラー対応カメラ
sayacom
0
170
セキュアな認可付きリモートMCPサーバーをAWSマネージドサービスでつくろう! / Let's build an OAuth protected remote MCP server based on AWS managed services
kaminashi
3
290
AWS IoT 超入門 2025
hattori
0
310
【Oracle Cloud ウェビナー】クラウド導入に「専用クラウド」という選択肢、Oracle AlloyとOCI Dedicated Region とは
oracle4engineer
PRO
3
130
ニッポンの人に知ってもらいたいGISスポット
sakaik
0
110
Modern_Data_Stack最新動向クイズ_買収_AI_激動の2025年_.pdf
sagara
0
240
能登半島地震で見えた災害対応の課題と組織変革の重要性
ditccsugii
0
500
Wasmのエコシステムを使った ツール作成方法
askua
0
120
[Keynote] What do you need to know about DevEx in 2025
salaboy
0
160
ユーザーの声とAI検証で進める、プロダクトディスカバリー
sansantech
PRO
1
130
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
1
280
Mobile First: as difficult as doing things right
swwweet
224
10k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Into the Great Unknown - MozCon
thekraken
40
2.1k
Documentation Writing (for coders)
carmenintech
75
5k
Automating Front-end Workflow
addyosmani
1371
200k
Navigating Team Friction
lara
190
15k
Gamification - CAS2011
davidbonilla
81
5.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
A better future with KSS
kneath
239
18k
Transcript
Laravelのログにエラーが吐き出されたら自動的にBacklogにロ グ内容を記載したチケットを作成する 20190419 ARCANA Meetup#49 Hikari Fukasawa @hico00
依頼されました リーダー 「CloudWatchから発行されるバグチケットが見辛いから、 エラー内容とか追記されるようにしてっ!」
当時の通知仕様 1. エラーが発生すると、laravel.log に stacktrace が吐き出される。 2. CloudWatch で "[stacktrace]"
の文字列がログファイルに吐き出されると、アラートが発生する ようなアラームを設定。 3. アラートが発生すると、Backlogにメール(AWS SNS)でチケット登録する。 参照: メールによる課題登録 4. チケットが登録されたら、CloudWatch上で該当時間のログファイルを確認。(余裕があれば、 チケットの件名を書き換えたり)
None
確かに見辛いというか、めんどかった
やりましょう すでにCloudWatchでアラームは設定されているので、AWS SDKを使ってログ内容を取得する ような Lambda 関数を作成します。 laravel.logにstacktraceが吐き出されているので、それの内容をすべて抽出。
構成 CloudWatch ‑> SNS ‑> Lambda ‑> SNS (Backlogのメール課題登録)
CloudWatch から渡されるデータ { AlarmName: 'php7app-stg20-ERROR', AlarmDescription: null, AWSAccountId: '217903947487', NewStateValue:
'ALARM', NewStateReason: 'Threshold Crossed: 1 datapoint [1.0 (20/03/19 09:27:00)] was StateChangeTime: '2019-03-20T09:42:59.895+0000', Region: 'Asia Pacific (Tokyo)', OldStateValue: 'OK', Trigger: { MetricName: 'php7app-stg20-ERROR', Namespace: 'LogMetrics', StatisticType: 'Statistic', Statistic: 'SUM', ・・・省略 } }
AWS SDK(JS) 使うメソッド 1. describeMetricFilters() 2. filterLogEvents()
describeMetricFilters 指定されたメトリクスフィルタの一覧を取得する https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_Delete MetricFilter.html CloudWatchから渡される情報だけだと足りないので、詳細を取得する。 metricName と metricNamespace の2つをパラメーターで渡す。
describeMetricFiltersのレスポンス { metricFilters: [{ filterName: 'stg20-ERROR', filterPattern: 'stacktrace', metricTransformations: [Array],
creationTime: 1553058610295, logGroupName: 'kimisuka-stg-20/php7app/srv/current/storage/logs/laravel.log' }] }
filterLogEvents 指定されたロググループからのログイベント一覧を取得する https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_FilterL ogEvents.html describeMetricFilters で取得したデータを元に取得する。 logGroupName, filterPettern... limit:取得件数 startTime/endTime:時間範囲をUnixタイムスタンプ
(ミリ秒)で指定
filterLogEventsのレスポンス { events: [ { logStreamName: 'php7app1', timestamp: 1553249141154, message:
'[2019-03-22 19:05:40] staging.ERROR: Undefined variable: input { ingestionTime: 1553249146221, eventId: '34638613326711879619236554788766527172305841119978192896' }, { logStreamName: 'php7app1', timestamp: 1553249141154, message: '[stacktrace]', ingestionTime: 1553249146221, eventId: '34638613326711879619236554788766527172305841119978192897' }, ... 省略 ] }
request.logの取得 laravel.logと同じディレクトリに存在しているので、logGroupName の "laravel.log"箇所を書き 換えて取得。
None
おわりに AWS Lambda関数を作成するとき、ブラウザ上で直接コードを書くことはおすすめしません… (ブラウザで開きっぱなしとかにしてると、セッションが切れて強制的にログインし直す必要が 出てきた時、保存されてない変更内容は…(お察し))
参考 CloudWatchでエラーログの内容を通知させたい | Qiita https://qiita.com/onooooo/items/f59c69e30dc5b477f9fd
ご静聴ありがとうございました。