【プロジェクト管理】SRE(Site Reliability Engineering) - j-komatsu/myCheatSheet GitHub Wiki

SRE(Site Reliability Engineering)とは?

初学者向け解説

SRE(Site Reliability Engineering)は、Googleが開発したシステム運用とソフトウェアエンジニアリングの融合手法です。
主な目的は、システムの信頼性(Reliability)を高めながら、運用コストを削減することです。

SREの特徴

特徴 説明
自動化 手動作業を減らし、効率的な運用を目指す
信頼性向上 障害を未然に防ぎ、システムの安定稼働を確保
エラーバジェット 許容可能なエラー率を定義し、開発と運用のバランスを取る
モニタリング システムの状態を可視化し、問題発生時に迅速に対応

SREの一般的なフロー

graph TD;
    A[開発] -->|コードのリリース| B[デプロイ]
    B -->|システム監視| C[モニタリング]
    C -->|問題検出| D[インシデント対応]
    D -->|フィードバック| A

例:エラーバジェットの考え方

例:

  • 許容される年間ダウンタイム: 43分(99.99%の可用性)
  • もし年間ダウンタイムが43分を超えた場合、新機能のリリースは一時停止し、信頼性の向上に注力する。

専門者向け解説

SREの役割とスキルセット

役割 詳細
モニタリングとアラート設計 システムの状態を常に監視し、適切な閾値でアラートを設定
インフラ管理 IaC(Infrastructure as Code)を活用し、インフラをコードで管理
CI/CDの最適化 継続的デリバリーとデプロイの自動化を推進
キャパシティプランニング システムの負荷を予測し、適切なリソースを確保
ポストモーテム 障害発生後の分析を行い、再発防止策を策定

SREの技術スタック

分野 使用技術
モニタリング Prometheus, Grafana, Datadog
CI/CD Jenkins, GitHub Actions, ArgoCD
インフラ管理 Terraform, Kubernetes, Helm
ロギング ELK Stack, Loki, Fluentd
クラウド AWS, GCP, Azure

SREの問題対応プロセス

sequenceDiagram
    participant Dev as 開発チーム
    participant SRE as SREチーム
    participant System as システム
    System->>SRE: アラート発生
    SRE->>Dev: インシデント報告
    Dev->>SRE: 初期診断と対応策検討
    SRE->>System: 応急処置適用
    System->>SRE: 状態確認
    SRE->>Dev: ポストモーテム作成
    Dev->>SRE: 改善策実装

例:Kubernetes環境でのAuto Healing

入力:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:v1
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 3
          periodSeconds: 5

出力:

  • Kubernetesが /health チェックを定期的に行い、異常を検出したらPodを再起動。
  • システムの可用性向上。

このように、SREはシステムの信頼性向上のための様々な手法を提供し、自動化や可観測性を活用して運用の効率化を図ります。