1. SLIとSLOの確定
サービスの主目的を軸にして、必要な信頼性目標を立てることは重要です。サービスレベルの効果を満たすための必要最小のパフォーマンス指標を「SLI」、その目標値を「SLO」と呼びます。
- SLI (Service Level Indicator): サービスレベルの測定指標
- SLO (Service Level Objective): 測定指標の目標値
例:
- SLI: リクエスト応答時間の測定値
- SLO: 99%のリクエストが500ms以内に応答する
サービスの性質と信頼性をユーザーに絶えず提供するためには、このような目標の設定が必要です。
2. SLI観測のための実装例
目次
リクエスト応答時間
CloudFront を利用する場合
取得データ
標準ログまたは、リアルタイムログにおける、time-taken の取得が有効です。
- time-takenとは
- サーバーが、ビューワーのリクエストを受信してからレスポンスの最後のバイトを出力キューに書き込むまでの秒数のこと。
- 注意点:ネットワークのレイテンシーやTCPバッファリングにより、ビューワー側から見た場合の時間は「time-taken」より長くなることがあります。
- また、x-edge-result-type を併せて利用することにより、キャッシュヒット有無を確認できます。
以下がx-edge-result-typeの主な値となります。
値 | 意味 |
---|---|
Hit | キャッシュからオブジェクトを送り返しました。 |
RefreshHit | キャッシュにオブジェクトがありましたが、有効期限切れのためオリジンに問い合わせた値です。 |
Miss | キャッシュ内にオブジェクトがなく、オリジンにリクエストを転送した値です。 |
Error | 最後まで送信が完了せず、エラーが発生した場合の値です。 |
取得データの分析
CloudFrontのメトリクスでは、time-takenを表示できないため、OpenSearchを利用する。設定方法はこちらを参照。
ALBを利用する場合
アクセスログにおけるrequest_processing_time、target_processing_time、response_processing_timeの3つの値取得を行い、それぞれの値を合計することでリクエスト応答時間を算出できます。
- request_processing_time
- ロードバランサーがリクエストを受け取った時点からターゲットにリクエストを送信するまでの合計経過時間。
- target_processing_time
- ロードバランサーがターゲットにリクエストを送信した時点から、そのターゲットが応答ヘッダーの送信を開始した時点までの合計経過時間。
- response_processing_time
- ロードバランサーがターゲットから応答ヘッダーを受け取った時点から、クライアントへの応答の送信を開始した時点までの合計経過時間。
3. トイルの削減
SREにおいて“トイル”とは、価値を生み出さない運用作業を指します。GoogleのSRE思想では、トイルを完全になくすのではなく、全作業の50%以下に抑えることが推奨されています。
トイル削減の実践例:手作業の削減
- インフラ構築におけるIaCの導入
- Terraform や AWS CDK、AWS CloudFormationの利用で、AWSインフラの手動構築を自動化する。
- アプリケーションリリース
- CI/CD パイプラインを構築することで、テストからリリースまでのプロセスを自動化。
AWS CodePipeline, GitHub Actions, Jenkinsなどが有効。
- CI/CD パイプラインを構築することで、テストからリリースまでのプロセスを自動化。
- パッチ適用
- AWS Systems Manager における Patch Managerの利用で、セキュリティパッチを自動的に適用する。
- 障害調査 etc.