ジュニアSRE面接質問と回答

Milad Bonakdar
著者
SLO、エラーバジェット、アラート、インシデント対応、Linux、自動化、Kubernetesを中心に、ジュニアSRE面接の実践的な質問を確認できます。
ジュニアSRE面接で見られること
ジュニアSRE面接では、ユーザー影響からシステムの兆候へ順序立てて考えられるかがよく問われます。SLO、エラーバジェット、アラート、インシデント対応、Linuxの状態確認、自動化、コンテナ、Kubernetesの基本運用が中心です。シニアのように話す必要はありません。落ち着いて調査し、インシデント中に明確に共有し、リスクを隠さずに反復作業を自動化できることを示しましょう。
各質問では短い回答を練習し、プロジェクト、学習用ラボ、インターン、オンコールの見学などの具体例につなげて説明できるようにします。
SREの基礎
1. サイト信頼性エンジニアリングとは何ですか?また、DevOpsとどのように異なりますか?
回答: SREは、Googleが大規模な本番システムを確実に実行するためのアプローチです。
主な原則:
- 運用をソフトウェアの問題として扱う
- 運用作業(トイル)に費やす時間は最大50%
- 信頼性と速度のバランスを取るためのエラーバジェット
- 責任追及をしない(Blameless)事後分析
- 段階的なロールアウトと自動ロールバック
SREとDevOpsの比較:
SREは、DevOpsの原則を具体的なプラクティスとメトリクスで実装します。
希少度: 非常に一般的
難易度: 簡単
2. SLI、SLO、およびエラーバジェットについて説明してください。
回答: これらは、信頼性を測定および管理するためのSREの中核となる概念です。
SLI(サービスレベルインジケーター):
- サービスレベルの定量的な測定
- 例:レイテンシー、可用性、エラー率
SLO(サービスレベル目標):
- SLIの目標値
- 例:「リクエストの99.9%が成功する」
エラーバジェット:
- 許容される失敗率(100% - SLO)
- 信頼性と機能速度のバランスを取るために使用
希少度: 非常に一般的
難易度: 普通
3. トイルとは何ですか?また、どのようにして削減しますか?
回答: トイルとは、次のような反復的で手動の運用作業です。
- 手動である(人間のアクションが必要)
- 反復的である
- 自動化できる
- 永続的な価値がない
- サービスの成長とともに直線的に増加する
トイルの例:
- サービスの手動再起動
- サーバー間のファイルコピー
- リソースの手動スケーリング
- 反復的なチケット対応
トイル削減戦略:
SREの目標: トイルを時間の50%未満に抑え、残りを自動化する。
希少度: 非常に一般的
難易度: 簡単〜普通
監視と可観測性
4. 監視と可観測性の違いは何ですか?
回答: 監視: 事前に定義されたメトリクスとアラートを収集
- 既知の未知(Known-unknowns):監視対象を知っている
- ダッシュボード、アラート、メトリクス
- 例:CPU、メモリ、リクエストレート
可観測性: 出力からシステムの状態を理解
- 未知の未知(Unknown-unknowns):予期していなかった問題をデバッグ
- ログ、メトリクス、トレースの組み合わせ
- 任意の質問に答えることができる
可観測性の3つの柱:
- メトリクス: 集計された数値(CPU、レイテンシー)
- ログ: 個別のイベント
- トレース: システムを通過するリクエストフロー
例: Prometheus + Grafana + Loki
希少度: 一般的
難易度: 普通
5. 効果的なアラートをどのように設定しますか?
回答: 優れたアラートは、実用的で意味があり、疲労を引き起こさないものです。
アラートのベストプラクティス:
1. 原因ではなく症状に基づいてアラート:
2. ランブックへのリンクを含める:
3. 適切な重大度レベルを使用する:
4. アラート疲労を避ける:
for:期間を使用して、アラートの頻発を回避- 関連するアラートをグループ化
- 適切な閾値を設定
- 定期的に確認および調整
希少度: 非常に一般的
難易度: 普通
インシデント対応
6. インシデント対応プロセスについて説明してください。
回答: 構造化されたインシデント対応は、影響と回復時間を最小限に抑えます。
インシデント対応の手順:
1. 検知:
- アラートが発生するか、ユーザーが問題を報告
- アラートを確認
- インシデントチャネルを作成
2. トリアージ:
3. 緩和:
4. 解決:
- 根本原因を修正
- メトリクスが正常に戻ることを確認
- 再発を監視
5. 事後分析(責任追及をしない):
希少度: 非常に一般的
難易度: 普通
7. レイテンシーが高くなっているサービスをどのようにトラブルシューティングしますか?
回答: 体系的なデバッグアプローチ:
一般的な原因:
- データベースのスロークエリ
- 外部APIのタイムアウト
- メモリプレッシャー(GCの一時停止)
- ネットワークの問題
- リソースの枯渇
- 非効率なコードパス
希少度: 非常に一般的
難易度: 普通
自動化とスクリプト
8. サービスが正常かどうかを確認し、必要に応じて再起動するスクリプトを作成してください。
回答: ヘルスチェックと自動修復スクリプト:
希少度: 一般的
難易度: 普通
信頼性のプラクティス
9. ランブックとは何ですか?また、なぜ重要ですか?
回答: ランブックとは、運用タスクとインシデントを処理するための文書化された手順です。
ランブックの構造:
2. ボトルネックを特定
- データベースクエリ時間を確認
- 外部API呼び出しを確認
- キャッシュヒット率を確認
- 最近のデプロイを確認
3. 依存関係を確認
緩和手順
簡単な修正 (< 5 分)
- アプリケーションインスタンスをスケールアップ
- キャッシュTTLを一時的に増やす
問題が解決しない場合
- 最近のデプロイをロールバック
- レート制限を有効にする
解決
- 根本原因を修正 (遅いクエリ、非効率なコード)
- 修正をデプロイ
- 30分間監視
- 通常のキャパシティにスケールバック
エスカレーション
30分以内に解決できない場合:
- エスカレーション先: @backend-team
- Slack チャネル: #incidents
- オンコール: PagerDuty のエスカレーションポリシーを使用
関連情報
2. サーキットブレーカー:
3. タイムアウトとリトライ:
希少度: 一般的
難易度: 普通
コンテナ化の基礎
11. Dockerとは何ですか?また、仮想マシンとどのように異なりますか?
回答: Dockerは、アプリケーションをその依存関係とともにパッケージ化するコンテナ化プラットフォームです。
コンテナと仮想マシンの比較:
主な違い:
Dockerの基本:
Dockerfileの例:
ビルドと実行:
Docker Compose(マルチコンテナ):
Docker Composeで実行:
ベストプラクティス:
- 公式ベースイメージを使用
- レイヤー数を最小限に抑える
- rootとして実行しない
- .dockerignoreを使用
- イメージに適切にタグ付け
- 脆弱性をスキャン
希少度: 非常に一般的
難易度: 簡単〜普通
バージョン管理とデプロイ
12. Gitのワークフローと、デプロイをどのように処理するかを説明してください。
回答: Gitは、バージョン管理とデプロイの自動化に不可欠です。
一般的なGitワークフロー:
基本的なGitコマンド:
ブランチ戦略:
1. Gitflow:
main: 本番環境で使用できるコードdevelop: 統合ブランチfeature/*: 新機能release/*: リリースの準備hotfix/*: 緊急修正
2. Trunk-Based Development:
デプロイワークフロー:
1. CI/CDパイプライン (GitHub Actions):
2. デプロイスクリプト:
まとめ
ジュニアSRE面接では、SLO、アラート、インシデント対応、Linuxトラブルシューティング、安全な自動化を実例で説明できるようにしておきましょう。良い回答はコマンドの暗記ではなく、ユーザー影響を確認し、信頼できるシグナルを見て、低リスクで緩和し、学びを記録する流れを示します。


