Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Laravelのログにエラーが吐き出されたら自動的にBacklogにロ
グ内容を記載したチケットを作成する
20190419ARCANAMeetup#49
HikariFukasawa@hico00
依頼されました
リーダー
「CloudWatchから発行されるバグチケットが見辛いから、
エラー内容とか追記されるようにしてっ!」
当時の通知仕様
1.エラーが発生すると、laravel.logにstacktraceが吐き出される。
2.CloudWatchで"stacktrace"の文字列がログファイルに吐き出されると、アラートが発生するよ
うなアラームを設定。
3.アラ...
確かに見辛いというか、めんどかった
やりましょう
すでにCloudWatchでアラームは設定されているので、AWSSDKを使ってログ内容を取得する
ようなLambda関数を作成します。
laravel.logにstacktraceが吐き出されているので、それの内容をすべて抽出。
構成
CloudWatch‑>SNS‑>Lambda‑>SNS(Backlogのメール課題登録)
CloudWatchから渡されるデータ
{
AlarmName: 'php7app-stg20-ERROR',
AlarmDescription: null,
AWSAccountId: '217903947487',
NewStateValu...
AWSSDK(JS)
使うメソッド
1.describeMetricFilters()
2.filterLogEvents()
describeMetricFilters
指定されたメトリクスフィルタの一覧を取得する
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/AP...
describeMetricFiltersのレスポンス
{
metricFilters: [{
filterName: 'stg20-ERROR',
filterPattern: 'stacktrace',
metricTransformati...
filterLogEvents
指定されたロググループからのログイベント一覧を取得する
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API...
filterLogEventsのレスポンス
{
events: [
{
logStreamName: 'php7app1',
timestamp: 1553249141154,
message: '[2019-03-22 19:05:40] s...
request.logの取得
laravel.logと同じディレクトリに存在しているので、logGroupNameの"laravel.log"箇所を書き
換えて取得。
おわりに
AWSLambda関数を作成するとき、ブラウザ上で直接コードを書くことはおすすめしません…
(ブラウザで開きっぱなしとかにしてると、セッションが切れて強制的にログインし直す必要が
出てきた時、保存されてない変更内容は…(お察し))
参考
CloudWatchでエラーログの内容を通知させたい|Qiita
https://qiita.com/onooooo/items/f59c69e30dc5b477f9fd
ご静聴ありがとうございました。
Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケットを作成する #sa_study
Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケットを作成する #sa_study
Nächste SlideShare
Wird geladen in …5
×

Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケットを作成する #sa_study

232 Aufrufe

Veröffentlicht am

2019/04/19に行ったスタジオ・アルカナ社内勉強会で使用したスライドです。

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Laravelのログにエラーが吐き出されたら自動的にBacklogにログ内容を記載したチケットを作成する #sa_study

  1. 1. Laravelのログにエラーが吐き出されたら自動的にBacklogにロ グ内容を記載したチケットを作成する 20190419ARCANAMeetup#49 HikariFukasawa@hico00
  2. 2. 依頼されました リーダー 「CloudWatchから発行されるバグチケットが見辛いから、 エラー内容とか追記されるようにしてっ!」
  3. 3. 当時の通知仕様 1.エラーが発生すると、laravel.logにstacktraceが吐き出される。 2.CloudWatchで"stacktrace"の文字列がログファイルに吐き出されると、アラートが発生するよ うなアラームを設定。 3.アラートが発生すると、Backlogにメール(AWSSNS)でチケット登録する。 4.チケットが登録されたら、CloudWatch上で該当時間のログファイルを確認。(余裕があれば、 チケットの件名を書き換えたり)
  4. 4. 確かに見辛いというか、めんどかった
  5. 5. やりましょう すでにCloudWatchでアラームは設定されているので、AWSSDKを使ってログ内容を取得する ようなLambda関数を作成します。 laravel.logにstacktraceが吐き出されているので、それの内容をすべて抽出。
  6. 6. 構成 CloudWatch‑>SNS‑>Lambda‑>SNS(Backlogのメール課題登録)
  7. 7. 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', ・・・省略 } }
  8. 8. AWSSDK(JS) 使うメソッド 1.describeMetricFilters() 2.filterLogEvents()
  9. 9. describeMetricFilters 指定されたメトリクスフィルタの一覧を取得する https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_Delete MetricFilter.html CloudWatchから渡される情報だけだと足りないので、詳細を取得する。 metricNameとmetricNamespaceの2つをパラメーターで渡す。
  10. 10. describeMetricFiltersのレスポンス { metricFilters: [{ filterName: 'stg20-ERROR', filterPattern: 'stacktrace', metricTransformations: [Array], creationTime: 1553058610295, logGroupName: 'kimisuka-stg-20/php7app/srv/current/storage/logs/laravel.log' }] }
  11. 11. filterLogEvents 指定されたロググループからのログイベント一覧を取得する https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_FilterL ogEvents.html describeMetricFiltersで取得したデータを元に取得する。 logGroupName,filterPettern... limit:取得件数 startTime/endTime:時間範囲をUnixタイムスタンプ(ミリ秒)で指定
  12. 12. 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' }, ...省略 ] }
  13. 13. request.logの取得 laravel.logと同じディレクトリに存在しているので、logGroupNameの"laravel.log"箇所を書き 換えて取得。
  14. 14. おわりに AWSLambda関数を作成するとき、ブラウザ上で直接コードを書くことはおすすめしません… (ブラウザで開きっぱなしとかにしてると、セッションが切れて強制的にログインし直す必要が 出てきた時、保存されてない変更内容は…(お察し))
  15. 15. 参考 CloudWatchでエラーログの内容を通知させたい|Qiita https://qiita.com/onooooo/items/f59c69e30dc5b477f9fd
  16. 16. ご静聴ありがとうございました。

×