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
190
[PHPカンファレンス2019]当日スタッフをおすすめしたい話
hico00
0
280
Other Decks in Technology
See All in Technology
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
190
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
480
Snowflake Intelligence × Document AIで“使いにくいデータ”を“使えるデータ”に
kevinrobot34
1
120
Android Audio: Beyond Winning On It
atsushieno
0
2.9k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
200
「その開発、認知負荷高すぎませんか?」Platform Engineeringで始める開発者体験カイゼン術
sansantech
PRO
2
640
Apache Spark もくもく会
taka_aki
0
140
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
950
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい勘所を集めてみました! - / How to start Scrum that is not written in the Scrum Guide 2nd
takaking22
1
170
Modern Linux
oracle4engineer
PRO
0
160
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
260
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
What's in a price? How to price your products and services
michaelherold
246
12k
Statistics for Hackers
jakevdp
799
220k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Documentation Writing (for coders)
carmenintech
74
5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.1k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
Into the Great Unknown - MozCon
thekraken
40
2k
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
ご静聴ありがとうございました。