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

Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ

Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ

SRE Kaigi 2025でお話した資料です。

Kazuhiko Yamashita

January 25, 2025
Tweet

More Decks by Kazuhiko Yamashita

Other Decks in Technology

Transcript

  1. © GO Inc. 2 SREの生き様は失っていません、信じてください GO株式会社 山下 和彦 所属 開発本部

    ソフトウェア開発統括部  バックエンド開発部   バックエンド1グループ @pyama86
  2. © GO Inc. 5 ベネフィットがあるなら出せ 0% 100% 時間 完成度 リリース

    断続的に 再発を繰り返し 破滅 100%教 動くなら出せ派
  3. © GO Inc. 9 SLI/SLO SLI - Service Level Indicator(サービスレベル指標)

    SLO - Service Level Objective(サービスレベル目標) 例: HTTPステータスコードの比率、レスポンスのレイテンシ 例: ステータス200が99.99%以上、99%tailのレイテンシが3msec以内
  4. © GO Inc. 17 セマンティック監視 1. 合成監視 例:「トップページにアクセス → ログイン

    → ページ 遷移 → ログアウト」といった 一連のユーザー操作をスクリプト化し、定期的に実行 することでサービスの稼働状況を確認する。操作フ ローのどこかが失敗した場合、ユーザーに影響が出て いると判断できる。
  5. © GO Inc. 18 4大シグナル 1. レイテンシ 2. トラフィック 3.

    エラー 4. サチュレーション O’Reilly社 SRE サイトリライアビリティエンジニアリング初版 P61 6.6 4大シグナルより引用 “ユーザーが直接利用するシステムで、メトリクスを4つだけ 計測できるなら、この4つに集中してください”
  6. © GO Inc. 20 監視の原則 無視できるアラートは 出すな!!!!!!!(意訳) ※正確な内容は O’Reilly社 SRE

    サイトリライアビリティエンジニアリング初版 P66 6.10 原則の取りまとめを参照
  7. © GO Inc. 21 足し算する監視 1. 障害をきっかけに監視アラートを追加 a. 傾向を早く掴む 2.

    障害が自動復旧するようなスクリプトを実装 a. Mackerelのcommand句などを活用
  8. © GO Inc. 24 オブザーバビリティを高めるには 1. それぞれのテレメトリーが相互にリンク されており、掘り進めるように調査できる ようにする 2.

    自動計装に加えて、手動計装も追加する 3. 可能な限り細かい粒度でテレメトリデータを 取得する
  9. © GO Inc. 25 以前の俺 def process_order(order_id): print(f"Checked inventory for

    {order_id}") check_inventry(order_id) print(f"Payment started for {order_id}") payment_process(order_id) print(f"Order {order_id} completed") order(order_id) [12:34:56.623] Checked inventory for 1 [12:34:56.923] Payment started for 1 [12:34:57.323] Order 1 completed これが最高だと思ってた時期が僕にもありました
  10. © GO Inc. 35 システムのパフォーマンス・チューニング システムとは、ハードウェア、ソフトウェア、ネットワークなどが組み合わさったもの システム全体のパフォーマンス向上には、それぞれの要素に対するチューニングが必要 トラフィックが多い場合の対策 • LB(ロードバランサ)を設置し、負荷を分散

    • リバースプロキシを配置し、キャッシュを活用 • クラウドサービスならCDNを適切に活用 • データベースのリードレプリカを増やす 「金で殴る」という表現について • SREの視点では「負け」 • いかに妥当なコストで問題を解決するかが重要
  11. © GO Inc. 36 アプリケーションのパフォーマンス・チューニング アプリケーションのパフォーマンス・チューニング • コードや設定を変更し、処理速度を向上させることを指す • 例:SQLクエリのチューニングによるデータベースのパフォーマンス向上

    初手としての対応 • テレメトリデータを拡充 • APM(Application Performance Monitoring)サービスの導入 APMサービスの役割 • アプリケーションの内部動作を可視化 • ボトルネックの特定を支援 パフォーマンス分析の変化 • 以前はDBのスロークエリを重点的に分析 • 近年はスロークエリの監視を行いつつ、 APMを最初に確認するほうが問題を見つけやすい
  12. © GO Inc. 37 パフォーマンス・チューニングにおけるジレンマ SREと開発チームの役割分担 • SREがパフォーマンス改善の調査を担当 • 実際のコード改修は開発チームに任されることが多い

    課題:開発チームの優先度 • 新機能開発が優先され、パフォーマンス改善や可用性の担保が 後回しになることがある 対応策 1. SREの取り組みを組織的なものにする 2. 全部やればええやろ
  13. © GO Inc. 38 SREの取り組みを組織的なものにする 可用性の重要性 • 可用性が落ちる=サービスが利用できない状態 • どんなに新機能を作っても、ユーザーに使われなければ価値を生み出さない

    可用性の担保は組織全体の責務 • SREだけでなく、開発者や管理者も責任を持つべき • 管理者や経営層を含めた優先度の調整・合意形成が不可欠 ダッシュボードの活用 • SREだけが見るものではなく、開発者や管理者も活用すべき • ダッシュボードを通じて全体の状況を把握し、問題があれば優先度を 調整する
  14. © GO Inc. 39 全部やればええやろ SREの主体的な対応 • 開発チームの対応が遅れる場合でも、 SREが問題を解決できれば ユーザー視点では問題が解消される

    • 可能な範囲でSREがコードや設定変更を行い、 システムの可用性や パフォーマンスを改善するアプローチが有効 @941さんのXから引用 https://x.com/941/status/1703357155729195467
  15. © GO Inc. 40 どうすればSREがアプリケーションのパフォーマンス・チューニング できるようになるのか 1. 計算量で考える • スロークエリやN+1問題は、計算資源の浪費によるものが多い

    • スロークエリ → 過剰なテーブル走査 • N+1問題 → 不要なクエリの繰り返し実行 • 「計算量を削減する」視点が重要 • アルゴリズムやデータ構造の知識を身につけ、ボトルネックに気づきやすくする 2. 道具を磨く • エディター、Linuxコマンド、SaaSなどのツールを活用する • エディターの設定 : タグジャンプを活用し、コードを追いやすくする • Linuxコマンド : strace や tcpdump を使いこなし、システムの内部動作を観察 • SaaSの活用 : 監視やログ収集を効率化し、迅速な問題解決を可能にする 3. 引き出しを増やす • 計算量の問題を把握するだけでなく、それを改善する手法を知ることが重要 • データベース最適化 : インデックスの適切な利用、 SQLチューニング、ER図の読み解き • キャッシュ戦略 : HTTPリクエストの遅延対策 • 指数バックオフリトライ : 通信失敗時の再試行 • 多様な技術の引き出しを持つことで、柔軟な解決策を提供できるようになる
  16. © GO Inc. 41 どうすればSREがアプリケーションのパフォーマンス・チューニング できるようになるのか 4. Linuxの仕組みを理解する • カーネルチューニング

    やプロセス間通信の理解でシステム全体のパフォーマンス向上 • バッファ管理やカーネルパラメータの意味を理解し、システムの挙動を把握 • Linuxはソフトウェアの基盤であり、学ぶことで広範な技術知識が得られる 5. ルールチェンジする柔軟な発想を持つ • 直接的に「処理を速くする」以外のアプローチも考える • 仮想待合室の導入: ユーザーアクセス数を制御 • 機械学習を用いたアプローチ : ルールベースではない判定 • スループットを物理的に抑制する施策も有効な解決策になり得る
  17. © GO Inc. 42 趣味開発を通じたスキル向上 趣味開発を通じたスキル向上 • 実際に自分でサービスや仕組みを作り、運用を体験するのが効率的 • AIを活用すれば、対話的に学習しながら簡単な

    Webアプリケーションを構築可能 得られる学び • ブログシステム程度の実装でも、 Web表示からDB書き込みまでの流れを理解できる • ライブラリの問題点を深掘りする機会になる • 実際に不具合を発見することもあり、システム理解が深まる SREにとっての趣味開発の価値 • インフラ視点だけでなく、開発スキルも伸ばせる • 開発チームとの共通理解が深まり、より効果的な SRE活動が可能になる • 実践的な知識が身につき、本番環境でのトラブルシューティングにも活かせる
  18. © GO Inc. 45 シフトレフト 構成管理のガードレール整備 • インフラ構成管理において、意図しないホストやポートの公開がないかをワークフローで検知 • コンテナの権限が適切かを自動でチェックし、必要に応じて修正

    • アプリケーションエンジニアがクラウド設定を行うケースが増加 • 誰が作業しても問題が発生しない仕組みの自動化が重要 ヒヤリハットのコード化 • 小さなミスやインシデント予兆を放置せず、 それをコードとして記録・防止 • 「過去に問題を引き起こした変更」をガードレールに反映し、再発防止を徹底 AIを活用したレビューの導入 • AIを活用したコードや構成ファイルの自動レビューが可能に • インシデントリスクを低減するため、 AIレビューの導入を検討 早い段階で問題を検出し、リスクを低減するアプローチ
  19. © GO Inc. 46 多層防御 多層防御の重要性 • セキュリティ対策を複数組み合わせる考え方 • 一つの対策が突破されても、他の対策で防御可能

    多層防御のメリット • ヒューマンエラーのリスク軽減 • 脆弱性発見時の影響を最小化 • インシデントの未然防止
  20. © GO Inc. 47 ソフトウェアのバージョンアップ ソフトウェアのバージョンアップの重要性 • 脆弱性の放置リスク ◦ 脆弱性を狙うボットが多数存在

    ◦ 更新が遅れたソフトウェアが攻撃対象になりやすい 対策方法 • ライブラリ・パッケージの自動更新 ◦ Dependabot や Renovate を活用し、定期的に更新 • OSレベルのセキュリティ対策 ◦ Linuxディストリビューションの自動アップデート機能を活用 ◦ OSの脆弱性を継続的に修正
  21. © GO Inc. 48 異常・変更検知 異常・変更検知の重要性 • システム内の異常な振る舞いを検知し、迅速に対応 異常検知システムの導入 •

    データ流出や不審なネットワーク通信を監視 • 普段通信しない経路へのアクセスを遮断(ネットワーク監視ツールの活用) 変更検知の強化 • ファイル配置やプロセス変更をリアルタイム監視 • 意図しない変更が発生した際に即座にアラート発報 誤検知対策 • 正常なデプロイによるノイズアラートを除外 • 機械学習を用いたルールベースではないフィルタリングも有効
  22. © GO Inc. 50 影響範囲を特定するための情報保全 ログの保全 • 監査ログやデータベースクエリログを収集 • 改ざん防止のため外部システムに保存

    • インシデント発生時の調査を容易にする ストリーミングの活用 • 特に重要なログはリアルタイムでストリーミング保全 • 影響範囲の特定を迅速化
  23. © GO Inc. 51 利用できるバックアップを確保する ランサムウェア対策 • 攻撃を受けた際に備え、暗号化されていないバックアップを確保 • ゼロからの復旧を避けるため、定期的なバックアップと検証を実施

    リストアの検証 • バックアップデータの有効性を確認するため、定期的にリストアテストを実 施 • リストアテストを自動化し、復旧可能性を常に維持
  24. © GO Inc. 54 障害対応には矜持がある 障害対応に対する考え方( SRE視点) • 偶発的な障害は、今夜にも再発する可能性がある •

    根本対応をいかに早く行うかが重要 • 個人としては即日での根本対応を目指すべき 暫定対応(止血対応)のリスク • 一時的な対応が習慣化すると、根本対応が後回しになる • 結果として障害の再発を招く危険性がある SREとしての矜持 • 障害対応に対して責任を持ち、早急に根本対応を実施することが重要
  25. © GO Inc. 55 結び SREの役割と信条 • サービスの安定稼働に必要なことは、壁を作らずすべてやる • モニタリング、障害対応、セキュリティ、パフォーマンスチューニング、

    フロントの実装、RFPの作成など全部やる SREの醍醐味 • やることは多いが、それがSREの面白さ • SREはサービスの安定稼働を担保するためのエンジニアリング SREに求められるスキルとキャリアの魅力 • 多岐にわたるスキルが必要だが、その分やりがいも大きい • SREとしてのキャリアや開発エンジニアとの往来がおすすめ