ちょうどええ!ロギング に行ってきた #アーキ部

ちょうどええ!ロギング に参加しました。簡単に所感をまとめます。

architect-club.connpass.com

所感

今回はロギングがテーマ。

もちろん、ロギングだけに限った話ではないと思うけど、技法は複数の戦術に繋がることがあり品質特性や戦術ごとに整理する必要があるというのは重要な観点だなと思いました。この視点はあまりなかったので目から鱗

ロギングの分類と品質特性のまとめが分かりやすくてよかった。自分の場合、ログ設計はフォーマットとかログローテとかを例外設計とセットでやってたくらいだったかもしれない。

アラートストーミングはあるある。ノイズになったりストレージやコストを逼迫する要因になる。たかがログ出力と思わず、積み重なると影響が大きくなりがちなのは意識する必要がありそう。あと、タイムシフトロガー便利そう、なるほど。

今後、ログや障害の解析に AI を活用するのが主流になるのかもしれない。AI ではなくてそれに近いものはこれまでにもあったと思うけど。(datadog とかにもあったような気がする)

以下、メモから抜粋。

scrapbox.io

  • タイムシフトロガー
    • 一定期間だけログを溜めておく
    • エラー発生時に遡ってログを取得できる
    • 詳細なログを出力してもストレージを圧迫しない
  • ロギングガイドライン
  • ひとによってログ出力の粒度が異なる
  • ログ形式が統一されていない
    • 分析ツールが活用できない
  • Logging Best Practices: 12 Dos and Don'ts | Better Stack Community
  • terasolunaorg.github.io
  • ログ出力 — ∇Nablarch 6u3 ドキュメント
  • 非機能要求
    • 実装なくてもアプリケーションは仕様通りに動く
    • 出力内容を仕様に落とし込む
  • モニタリング
  • セキュリティ
  • オブザーバビリティ
  • Software Architecture in Practice (4th)
  • ロギングの技法は多岐に亘る
  • ロギングの目的は複数ある
  • 戦術からログを分類する
  • トレースログ
    • オブザーバビリティ
    • トレースID
    • Enter/Exit
    • AOP
  • モニタリングログ
    • 可用性/オブザーバビリティ
    • メトリクス
    • どういうメトリクスを取得したいか
  • リモート呼び出しログ
    • 診断容易性
      • 問題があったときに原因を追いやすくする
      • 責任範囲分析
    • req/resp rawデータ
      • 機密情報はマスキングする
  • 監査ログ
    • セキュリティ
    • who/where/what
    • 誰がどこからアクセスして何を参照したか
  • 業務イベントログ
    • 機能要求に基づく
    • 業務上のイベントを記録する
    • スキーマ設計する
  • システム利用状況の統計
  • 障害追跡ログ
    • 診断容易性
    • 障害の検知/解析
    • スタックトレース
    • Exception に実行時のコンテキストを載せる
  • 障害検知ログ
    • 可用性
    • アラートストーミング
    • 緊急を要するイベントのみフィルタリングしてログ出力する
  • プログレスログ
    • 現在の実行状況を分かるようにする
    • 終了予想時刻を出しておくと便利
  • デバッグログ
    • 解析容易性
    • 個人の裁量に寄りがち
      • 一律禁止にするのもアリ
    • O/RマッパーのSQLログ
  • トラブルが起きたときの対応を予測して設計する
    • 役に立つログ
  • 偽陽性
    • ノイズ
    • オオカミ少年問題
    • アラートストーミング
      • AI活用
      • いつも無視されてるものは自動で静観する
  • 偽陽性対策
    • 例外設計
    • 予期する例外
      • 明示的にハンドリングする
    • 予期しない例外
    • サーキットブレーカー
      • 予期しない例外に寄せて障害検知する
  • ドメイン層で例外を発生させるケース
    • プログラミングミス起因のパースエラーに限る
  • 戦術xロギング
    • ログレベル/ログカテゴリでは足りない
    • 出力抑制
  • SLF4J
  • アプリケーション側で明示的に出力するもの
    • 監査ログ
    • 業務イベントログ
    • モニタリングログ
  • コードとログを汚さないように
  • 技法は複数の戦術に繋がることがある
    • 品質特性/戦術ごとに整理する