開発者向け
オブザーバビリティは、開発者の生産性を向上させ、アプリケーションのパフォーマンスを改善し、より良い意思決定と迅速な問題解決によってビジネスの成功を促進するため、開発者にとって非常に重要です。 このガイドでは、オブザーバビリティを効果的に活用するためのベストプラクティスと推奨事項を提供します。
開発者にとってオブザーバビリティが重要な理由
開発者は以下の主要な目的でオブザーバビリティを使用します:
- 迅速な問題の特定と解決:
- オブザーバビリティにより、開発者は問題を素早く特定して診断でき、問題解決までの時間 (MTTR) を 短縮し、ソフトウェアデリバリーのパフォーマンスを全体的に向上させることができます
- 本番環境でのシステムの動作を理解し、十分な情報に基づいた意思決定と運用改善を可能にします
- 顧客体験の向上:
- システムの動作を分析することで、パフォーマンスと信頼性を最適化し、より良い顧客体験とユーザー満足度の向上につながります
- オブザーバビリティツールを使用してユーザーの操作を監視し、UI/UX の問題を迅速に特定して対処できます
- チームの効率性とイノベーションの向上:
- オブザーバビリティプラットフォームは運用データの単一の情報源を提供し、チーム間のコラボレーションを促進し、トラブルシューティングの時間を短縮します
- 自動化されたインサイトとアラートにより、開発者は手動でのデバッグに費やす時間を減らし、イノベーションにより多くの時間を費やすことができます
- データに基づく意思決定:
- オブザーバビリティはシステムパフォーマンスに関する詳細なインサイトを提供し、コードの改善やリソース割り当てに関するデータ駆動の意思決定を可能にします
- 改善が必要な領域を特定することで、組織の投資を最適化し、市場投入までの時間を短縮できます
- 複雑性の管理:
- オブザーバビリティは、システムの相互依存関係を包括的に可視化することで、最新のクラウドネイティブおよびマルチクラウド環境の複雑性を管理するのに役立ちます
- 複雑性を整理し、関連するデータに焦点を当てることで、よ り効率的な開発プロセスを促進します
コード品質のベストプラクティス
-
課題追跡メトリクスのモニタリング:
- JIRA や Trello などの課題追跡プラットフォームを使用して、以下のようなメトリクスを追跡します:
- チケットがコードレビューからテストレビューに移動し、進行中に戻る回数。高い数値は、スキル不足、高い複雑性、または不適切なツールの使用を示す可能性があります。
- チケットが外部依存関係によってブロックされる回数。高い数値は、依存関係間の高い結合度や高い複雑性を示す可能性があります。
- 推奨事項:
- Amazon Q Developer のようなツールを使用して、自動コードレビューで生産性とコード品質を向上させます。Amazon Q Developer は、ソフトウェア開発タスクの速度を最大 80% 向上させ、急速な開発サイクル中のヒューマンエラーの可能性を減らすことでコード品質の向上に貢献します。
- 改善点を特定し、継続的な改善の考え方を育むために、レトロスペクティブの一環としてメトリクスの定期的なレビューをスケジュールします。
- JIRA や Trello などの課題追跡プラットフォームを使用して、以下のようなメトリクスを追跡します:
-
パフォーマンスメトリクス用のコード計装:
- コードの実装のパフォーマンス効率とスケー ラビリティを評価することで、コード品質の間接的な測定を可能にするために、以下を測定できるようにコードを計装します。
- RED メソッド: マイクロサービスのリクエスト、エラー、所要時間をモニタリングします。これにより、サービスのパフォーマンスと信頼性に関する洞察が得られます。
- USE メソッド: システムリソースの使用率、飽和度、エラーを追跡します。これにより、ボトルネックとリソースの制約を特定できます。
- 他のサービス、データベース、キャッシュなど、リクエスト処理パスにおけるすべての外部依存関係への呼び出しの周りに計装を追加します。これにより、リクエスト処理時間の突然の変化を調査するために必要な情報を提供し、問題の根本原因をより迅速に特定できます。
- 推奨事項:
- リクエストのレイテンシーとエラー率に SLO (Service Level Objective) を設定し、それを使用してより良い品質とパフォーマンスのための改善を推進します。
- 重要なデータフローとリクエスト処理パスを実行する自動テストに計装の検証を追加します。
- システムパフォーマンスとコード品質測定のベースラインを作成する自動負荷テストタスクを構築します。
- 単一のリクエストのパフォーマンスへの影響を特定できるように、計装に文脈を追加します。
- 計装の追加に関連する手動作業を減らすために、SDK が提供する自動計装を設定して活用します。
- コードの実装のパフォーマンス効率とスケー ラビリティを評価することで、コード品質の間接的な測定を可能にするために、以下を測定できるようにコードを計装します。
効率的なロギングとモニタリング
- json などの構造化されたログフォーマットを使用します。既存のアプリケーションでは、ログ変換機能を使用してより多くのコンテキストを注入し、フィールドを追加または削除することを検討してください。
- 意味のあるシグナルを導き出し、シグナル間で相関関係を取れるように、十分なメタデータを含む広範なイベントフォーマットを使用します。
- OpenTelemetry または ADOT SDK を使用して、シグナル間の相関関係を可能にし、問題特定時間 (MTTI) を短縮し、結果として復旧時間 (MTTR) を短縮するための追加コンテキストをログに注入します。
- ログレベルを適切に使用します - これによりログの量を制御し、取り込みのコストを抑えることができます。
- ERROR は、予期しない、および予期される全てのエラー状態に使用します。根本原因分析を加速できるように、できるだけ多くの追加コンテキストを加えます。
- INFO は、ユーザーログインなどの一般的な実行時イベントに使用します。これらはコンテキストを提供し、重要です。
- DEBUG は、アプリケーションのフローと状態をより深く理解するために、処理パス内の呼び出しをログに記録するために使用します。
- PII や PHI などの機密性の高いデータのログ記録は避けます。要件がある場合は、データ保護ポリシーの使用や、取り込み時のデータの編集を検討してください。IAM ポリシーを使用して、生データを閲覧できる人を制御します 。
- 埋め込みメトリクスフォーマット (EMF) を使用してログ内にメトリクスを埋め込み、オブザーバビリティプラットフォームへの API 呼び出し回数を減らし、コストを削減します。
- requestId などのカーディナリティの高いディメンションを持つメトリクスには EMF を使用しないでください。
- アラート:
- 異常検出を使用して、アラートの厳格なしきい値設定を避けます。これにより、システムの使用状況が時間とともに変化した場合のしきい値更新のオーバーヘッドを避け、アラートノイズを減らすことができます。
- Metric Math と組み合わせアラートを使用して、特定の障害に対して生成される個々のアラートの数を減らします。
- SLO が危険にさらされているか、失敗している場合にのみアラートを発生させます。これにより、チームが不必要に起こされることを避け、認知的およびコンテキストの過負荷を減らすことができます。
- 障害通知に対してアクションを取れる人がいる場合にのみアラートを発生させます。
- 可能な場合はアラートの解決を自動化します。例えば、オートスケーリング、レプリカやスタンバイインスタンスへの自動フェイルオーバーなど、ネイティブのプラットフォーム設定を活用します。
- 通知を受けた人が、確認すべきダッシュボード、使用すべきプレイブック、影響を受けるサービスを素早く特定できるように、アラート通知に十分なコンテキストを追加します。
- ダッシュボード:
- ペルソナ/ステークホルダーごとに 1 つ以上のダッシュボードを作成します。
- ペルソナ/ステークホルダーごとに 1 つ以上のダッシュボードを作成します。