Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Prepalert ~Mackerelアラートにログや集計値を貼り付けてくれるトイル削減ツール~

Prepalert ~Mackerelアラートにログや集計値を貼り付けてくれるトイル削減ツール~

2023/07/11 のMackerel Meetup #14の発表資料です。

ikeda-masashi

July 11, 2023
Tweet

More Decks by ikeda-masashi

Other Decks in Technology

Transcript

  1. Prepalert
    ~Mackerelアラートにログや集計値を貼り付けてくれるトイル削減ツール~
    SREチーム 
    データエンジニア
    池田将士 @mashiike
    18:15 - 18:35

    View Slide

  2. 自己紹介
    ただの酒飲みです。
    『餌を与えないでください。』
    Config 迷人です。

    View Slide

  3. 会社概要 経営理念: つくる人を増やす。    (´・ω・`)モキュ?

    View Slide

  4. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  5. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  6. 皆さん。監視してますか?
    ありますよね? こういう監視ルール
    『5xx エラーが発生したら、Warning』
    『平均レスポンスタイムが500ms以上なら、Warning』

    View Slide

  7. 皆さん。監視してますか?
    発生しますよね? こういうWarningアラート

    View Slide

  8. 皆さん。監視してますか?
    業務時間外 5xx 1件! Warning!!!!! どうする?

    View Slide

  9. 私は。。。 
    ネトゲしてますね 

    View Slide

  10. そもそも、Wariningアラートは緊急度が高くない。
    そこそこな頻度で発生するもの※1
    本当にヤバかったらCriticalアラートがある。
    なんなら、On Callの仕組みがあることも。 
    なので、一旦忘れるのはアリ
    ※1
    例えばALBにAWS WAFを導入している場合
    https://aws.amazon.com/jp/waf/sla/
    によれば、99.95%なので1ヶ月あたり21分程度
    はアクセスできないことがある。
    AWS WAFにアクセスできないとALBは5xxエラー
    を返すので ALB 5xx > 1 のWarningアラートだ
    と、そこそこな頻度で発生する。

    View Slide

  11. そもそも、Wariningアラートは緊急度が高くない。
    そこそこな頻度で発生するもの※1
    本当にヤバかったらCriticalアラートがある。
    なんなら、On Callの仕組みがあることも。 
    なので、一旦忘れるのはアリ
    ※ あとで弊社の藤原が MackerelとGrafana on call の連携の話でLTします。
      そちらもお楽しみに。

    View Slide

  12. しかし、定例でちゃんと振り返る。
    Warningを無視はいずれ
    重大な事故につながる
    【ハインリッヒの法則】
    1
    29
    300
    重大な事故
    軽微な事故
    事故未遂

    View Slide

  13. ところで、ALB 5xx があったのはわかった。
    『このWarning どのエンドポイントで発生したんですか? 』
    『えぇ〜っとちょっとまってくださいねredashでアクセスログを・・・  』
    『あー。/hoge/ ですねぇ。』
    『これアプリケーションのログを見ないとですねぇ。』
    『あー。S3にあるやつかー。Redshiftに取り込んでないんですよね。』
    『github.com/koluku/s3s つかって、調べるか。便利だよねこれ〜』

    View Slide

  14. ところで、ALB 5xx があったのはわかった。
    『このWarning どのエンドポイントで発生したんですか? 』
    『えぇ〜っとちょっとまってくださいねredashでアクセスログを・・・  』
    『あー。/hoge/ ですねぇ。』
    『これアプリケーションのログを見ないとですねぇ。』
    『あー。S3にあるやつかー。Redshiftに取り込んでないんですよね。』
    『github.com/koluku/s3s つかって、調べるか。便利だよねこれ〜』

    View Slide

  15. ところで、ALB 5xx があったのはわかった。
    『このWarning どのエンドポイントで発生したんですか? 』
    『えぇ〜っとちょっとまってくださいねredashでアクセスログを・・・  』
    『あー。/hoge/ ですねぇ。』
    『これアプリケーションのログを見ないとですねぇ。』
    『あー。S3にあるやつかー。Redshiftに取り込んでないんですよね。』
    『github.com/koluku/s3s つかって、調べるか。便利だよねこれ〜』

    View Slide

  16. ところで、ALB 5xx があったのはわかった。
    『このWarning どのエンドポイントで発生したんですか? 』
    『えぇ〜っとちょっとまってくださいねredashでアクセスログを・・・  』
    『あー。/hoge/ ですねぇ。』
    『これアプリケーションのログを見ないとですねぇ。』
    『あー。S3にあるやつかー。Redshiftに取り込んでないんですよね。』
    『github.com/koluku/s3s つかって、調べるか。便利だよねこれ〜』

    View Slide

  17. ところで、ALB 5xx があったのはわかった。
    『このWarning どのエンドポイントで発生したんですか? 』
    『えぇ〜っとちょっとまってくださいねredashでアクセスログを・・・  』
    『あー。/hoge/ ですねぇ。』
    『これアプリケーションのログを見ないとですねぇ。』
    『あー。S3にあるやつかー。Redshiftに取り込んでないんですよね。』
    『github.com/koluku/s3s つかって、調べるか。便利だよねこれ〜』

    View Slide

  18. ところで、ALB 5xx があったのはわかった。
    『このWarning どのエンドポイントで発生したんですか? 』
    『えぇ〜っとちょっとまってくださいねredashでアクセスログを・・・  』
    『あー。/hoge/ ですねぇ。』
    『これアプリケーションのログを見ないとですねぇ。』
    『あー。S3にあるやつかー。Redshiftに取り込んでないんですよね。』
    『github.com/koluku/s3s つかって、調べるか。便利だよねこれ〜』

    View Slide

  19. もしかして、これ自動化できますか? 
    できますよね。これ、
    です。本当にありがとうございます。

    View Slide

  20. そこで作りました『Prepalert』 
    由来は: 『Prepare』+『Alert』
    アラートが来たら、
    ログや集計値をかき集める仕組み

    View Slide

  21. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  22. 動作イメージ
    機能1: アラートのメモに貼り付け 機能2: グラフアノテーションとして貼り付け
    Target Groupは408 Request Timeoutを返してるので
    処理時間が長すぎたんですね。

    View Slide

  23. 動作イメージ
    機能3: 長すぎる場合のS3バックエンド
    長いと、省略して末尾にShow details リンクを付ける。
    簡易S3Viewer機能も

    View Slide

  24. 動作イメージ
    機能 core: 3つのquery_runner (v0.11時点)
    query_runner = データを取得するためのqueryを実行する先
    ● Redshift Data API (SQL)
    ● S3 Select API (SQL)
    ● Cloudwatch Logs Insights API
    (Insights Query)

    View Slide

  25. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  26. 導入方法
    とりあえず、お手元にInstallして
    Initサブコマンドで
    初期設定ファイルを生成してください。

    View Slide

  27. 導入方法
    プロンプトに従って、graph annotationを投稿する先のサービス名とsqs queue名を入れます

    View Slide

  28. 導入方法
    プロンプトに従って、graph annotationを投稿する先のサービス名とsqs queue名を入れます
    するとconfig.hclができてるので。一旦それで中身を見てみます。

    View Slide

  29. 導入方法
    とりあえず。
    なんでもいいんで
    Alertが開いたときに
    『How do you respond to alerts?』
    とメモを貼り付けるConfigができます。
    ※コメントを外すと
    WebhookにBASIC認証がつけられる

    View Slide

  30. 導入方法
    リポジトリの lambda/配下にあるサンプルを参考にLambda関数とかその周りをデプロイして

    View Slide

  31. 導入方法
    MackerelでWebhookを設定すると、アラートが来たときに勝手に
    メモが更新される。

    View Slide

  32. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  33. 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    例えばCloudwatch Logs Insightsの情報を載せたいとき。
    左のような設定を足して

    View Slide

  34. 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    設定をこう変える
    after
    before

    View Slide

  35. 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    かえるとこうなる。
    (横幅が長すぎて・・・見れない)

    View Slide

  36. 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    かえるとこうなる。
    (横幅が長すぎて・・・見れない)
    なので、生ログをのせるときはS3バックエンド
    の設定をおすすめします。
    横スクロールのできるViewerで見れるので。
    メモにリンクが入っていたら、ハイパーリンクにしてワンクリックで飛べるようになってると嬉しぃなぁ(こっそり)

    View Slide

  37. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  38. 導入効果
    Perpalertを導入した結果、定例では以下のような変化があった。
    ● Warningアラートの確認時間が短くなった。
    ● 『後で調べます』が少なくなり。『コレ気になるから調べます』が増えた。
    ● 思わぬ内容を発見できることがあった。
    ○ 謎のタイムアウトの原因
    ○ ログの迷子
    ○ etc…

    View Slide

  39. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  40.  
    今後の展望
    開発・運用そろそろ1年。
    をリリースしたいなぁ・・・

    View Slide

  41.  
    今後の展望
    開発・運用そろそろ1年。
    をリリースしたいなぁ・・・
    しかし、その前に解決したい悩みがある。
    導入しづらい
    ● Lambda関数が2つ
    ● 設定が複雑 (HCLで柔軟性はあれど)

    View Slide

  42.  
    今の悩み - Lambda関数が2つ
    Lambda関数が2つあるのでデプロイ2回
    周りのリソースもなにげに多い。

    View Slide

  43.  
    今の悩み - 設定が複雑
    Lambda関数が2つあるのでデプロイ2回
    周りのリソースもなにげに多い。
    HCLで柔軟にできるが、
    Query対象ごとに設定項目が違うため
    複雑になる。
    今後Query対象が増え
    ると考えると。。。
    もっともっと複雑に

    View Slide

  44.  
    今の悩み
    ● Lambda関数が2つ
    対策: Monlithic Lambda化
    2023年9月中にはv1.0.0 を出したい・・・(決意)
    https://speakerdeck.com/_kensh/monolith-firs
    t-serverless-development?slide=46
    ● 設定が複雑
    対策1: initサブコマンドの強化?
    対策2: Handbook的なの書く?
    対策ex: そもそも設定見直す?

    View Slide

  45. アジェンダ
    ● まえおき
    ● Prepalertについて
    ○ 動作イメージ
    ○ 導入方法
    ○ 例えばCloudwatch Logs Insightsの結果を貼り付けたい
    ○ 導入効果
    ● 今後の展望と今の悩み

    View Slide

  46. まとめ
    Warningアラートを定例で振り返る際に
    毎回調査のためにログの取得やメトリクスの集計が発生していた。
    コレはトイルなのでPrepalertという
    自動ログ取得・メトリクス集計+アラートに関連付け
    を行うツールを作った。
    そろそろ1年なので、v1.0.0を出したいのだが、
    導入がしづらいのが難点。なんとかしたい。
    2023年9月中を目処になんか考えて頑張るぞ!

    View Slide

  47. あと1点。
    (採用担当に挟んどいてって言われたやつ)

    View Slide

  48. \カヤックに興味を持ってくださった方へ/
    ニュースレターへ登録しませんか?
    カヤック社員がどんな風に働いているか?
    どんな制作実績があるか?
    などの情報を定期的に配信しています!

    View Slide

  49. ご清聴ありがとうございました

    View Slide