Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケット...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
hico00
April 19, 2019
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケットを作成する #sa_study
2019/04/19に行ったスタジオ・アルカナ社内勉強会で使用したスライドです。
hico00
April 19, 2019
More Decks by hico00
See All by hico00
自分だけのアバターを簡単につくろう&アバターでビデオ会議! #sa_study
hico00
0
570
PHPでもVtuberになりたい! #phperkaigi
hico00
0
220
[PHPカンファレンス2019]当日スタッフをおすすめしたい話
hico00
0
290
Other Decks in Technology
See All in Technology
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
170
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
480
専門領域のAIをどう評価するか
bengo4com
2
300
Classmethod Company Deck
satoshi7
1
740
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
200
Local CI × GitHub Actions
gogutan
3
230
Refining Active Record
shugo
0
170
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
900
Rust で関数型ドメインモデリング
takonda
0
170
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
780
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
310
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
120
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Google's AI Overviews - The New Search
badams
0
1.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Being A Developer After 40
akosma
92
590k
Marketing to machines
jonoalderson
1
5.9k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
A designer walks into a library…
pauljervisheath
211
25k
Designing for Performance
lara
612
70k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Typedesign – Prime Four
hannesfritz
42
3.2k
My Coaching Mixtape
mlcsv
0
360
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
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
ご静聴ありがとうございました。