Observability のベストプラクティスを実現：Datadog Service Scorecards によるサービスレベルの自動評価と可視化

## はじめに
こんにちは、Datadog Japan で Sales Engineer をしている [**AoTo**](https://qiita.com/AoTo0330) です。

この投稿は **[<font color="#6495ED">AoTo Advent Calendar 2023</font>](https://qiita.com/advent-calendar/2023/aoto) 17日目**の記事です。

**Observability のベストプラクティス、あなたは取り組めていますか？**

この問いかけに、自信を持って Yes と答えられる方は少ないのではないでしょうか。

こうしたペストプラクティスの取り組み状況を把握するために、Datadog Service Catalog の機能である [**Service Scorecards**](https://docs.datadoghq.com/tracing/service_catalog/scorecards/) は、Observability の実現を支える組織と文化のベストプラクティスに基づいた実装を行えているかを可視化してくれます。

今回は、Service Scorecards の概要から Scorecards を設定して Observability のベストプラクティスを実現するまでを解説します。

活用方法については、**Datadog の公式ブログ**にもご参照ください。

https://www.datadoghq.com/ja/blog/service-scorecards/

https://www.datadoghq.com/ja/blog/datadog-custom-scorecards/

## Service Scorecards の概要
[**Service Scorecards**](https://docs.datadoghq.com/tracing/service_catalog/scorecards/) は[**Datadog Service Catalog**](https://docs.datadoghq.com/tracing/service_catalog/) を活用するためのソリューションの1つで、現在**公開ベータ版**で提供されています。Service Scorecards によって、<INS>Datadog で監視されている対象のサービスそれぞれが Datadog での情報を十分に活かしせる状態になっているか</INS>を可視化出来ます。

Datadog は、[Production Readiness](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#production-readiness)・[Observability のベストプラクティス](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#observability-best-practices)・[オーナーとドキュメント](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#ownership-and-documentation)の3つのカテゴリの合計10個の合否ルールに対して、メタデータを使用して各サービスを自動的に評価します。これにより、チームがサービスの改善点を知り優先順位を付けるための出発点となります。

これに加えて、セキュリティ要件、内部ツール、バージョン監査、統合チェックなど、サービス品質を測定する独自の方法を測定するために[**カスタムスコアカード**](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#creating-custom-rules/)を作成できます。

## スコアカードの設定
Service Catalog ページを確認すると、**Datadog APM, USM, RUM** によって収集されたアプリケーションサービスの情報がリストやマップの形式で確認できます。

この他にも yaml ファイルによる[ユーザー定義のサービスを設定](https://docs.datadoghq.com/tracing/service_catalog/setup/#create-user-defined-services)したり、Infrastructure・Logs・Network などのデータから[追加のサービスを検出](https://docs.datadoghq.com/tracing/service_catalog/setup/#discover-additional-services)したり、[Backstage](https://docs.datadoghq.com/integrations/backstage/) や [ServiceNow](https://docs.datadoghq.com/integrations/servicenow/#service-ingestion) に登録された[データをインポートする](https://docs.datadoghq.com/tracing/service_catalog/setup/#import-data-from-other-sources)ことでサービスを定義できます。

Scorecards ページから各ルールを有効化することで、これらのルールの単位で適用されたルールを元にスコアが表示されます。さらに、Service Catalog ページから各サービスを選択すると、Scorecards タブからサービスの各ルールへの対応状況が確認できます。

Scorecards の機能を有効化した後は、スコアカードのルールへの対応が必要となります。それぞれどのようなルールが設定されているか見ていきましょう。

## Production Readiness
[**Production Readiness**](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#production-readiness) の項目ではその名の通り、各サービスが本番環境で稼働するための準備が整っているかを表すルールが定められています。


### SRE チームの Production Readiness
この項目では SRE チームがサービスを運用するための適切な状態であるかを確認するために、ームがサービスのパフォーマンスを追跡するために [**SLO**](https://docs.datadoghq.com/service_management/service_level_objectives/) を定義しているかや、潜在的な問題に迅速に対応できるように [**Monitor**](https://docs.datadoghq.com/monitors/) が設定されているかなどを確認するルールがあります。

これらのルールは、各サービスに紐づいた <INS>[**SLO**](https://docs.datadoghq.com/service_management/service_level_objectives/) や [**Monitor**](https://docs.datadoghq.com/monitors/) が設定されているか</INS>で自動的に評価されます。

:::note info
Scorecards が設定されていなくとも、Service Catalog ページから各サービスを選択した際に確認できる Setup Guidance タブの [Monitors] と [SLOs] を確認することで、それぞれの項目が設定されているか確認できます。
![SetupGuidance.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/112d5f5f-a5f1-67b9-8c3e-eec51e82fe5b.jpeg)
:::

このカテゴリは、<INS>Datadog を利用したサービスの健全性の把握と障害への対応を行うため</INS>に重要な項目です。

### 他チームの Production Readiness
この項目では他に、 SRE チームと連携するチームによる準備状況として、インシデント対応チーム向けにインシデントのとラブルシューティング時に対処をするオンコール レスポンダーを指定しているか、開発チーム向けに過去3ヶ月以内にサービスの新しいバージョンをリリースしたかを確認するルールがあります。

**オンコールのルール**は、[**PagerDuty integration**](https://docs.datadoghq.com/ja/integrations/pagerduty/) や [**OpsGenie integration**](https://docs.datadoghq.com/ja/integrations/opsgenie/) などのインシデント管理サービスとの統合を行った上で、<INS>[各サービスの URL が設定されているか](https://docs.datadoghq.com/tracing/service_catalog/integrations)</INS>で評価されます。
![On-callIntagrations.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/65d60a0b-b062-c5b9-4d2d-b46eac468df4.jpeg)

**3ヶ月以内でのバージョンリリース**のルールは、<INS>[**Datadog CI Pipeline**](https://docs.datadoghq.com/ja/continuous_integration/pipelines/) を利用したてデプロイパイプラインの可視化を行った上で[関連するデプロイパイプラインが設定](https://docs.datadoghq.com/ja/tracing/service_catalog/guides/streamlining-development-lifecycle-with-ci-visibility/)されているか</INS>で評価されます。
![SoftwareDelivery.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/42e3df24-7486-c15d-7826-bc01a2eed592.jpeg)

これらのルールは、各サービスに設定されたメタデータによって評価されるため、<INS>上記の integrations や Datadog CI Pipeline Visibility を利用していない場合に有効化をする必要はありません</INS>。

## Observability のベストプラクティス
[**Observability のベストプラクティス**](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#observability-best-practices)の項目では、**Cloud Native Computing Foundaton(CNCF)** 配下の文書である [**Observability Whitepaper**](https://github.com/cncf/tag-observability/blob/main/whitepaper.md) でも言及されているベストプラクティスを実装できているかを確認できるルールが定められています。

この項目では、トラブルシューティングの迅速化やパフォーマンスの問題の特定を行うための、[監視テレメトリデータを関連づけ](https://github.com/cncf/tag-observability/blob/main/whitepaper.md#correlating-observability-signals)しているかを確認するルールがあります。

このカテゴリは、<INS>Deployment tracking と Log correlation を設定しているか</INS>で自動的に評価されます。

**Deployment tracking のルール**は、<INS>[デプロイメントの追跡](https://docs.datadoghq.com/ja/tracing/services/deployment_tracking/)に基づいて、`version`タグによるコードのバージョンを記録してデプロイを追跡できているか</INS>で評価されます。

**Log correlation のルール**は、<INS>[ログとトレースの接続](https://docs.datadoghq.com/ja/tracing/other_telemetry/connect_logs_and_traces/)に基づいて、ログに trace_id をはじめとするトレースコンテキストが挿入され、Datadog 上で表示できているか</INS>で評価されます。

:::note info
Scorecards が設定されていなくとも、Service Catalog ページから各サービスを選択した際に確認できる Setup Guidance タブの [Version Tagging] と [Log Correlation] 確認することで、それぞれの項目が設定されているか確認できます。
![SetupGuidanceAPM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/c46a7b37-522e-88fd-d868-42f1e88a82a9.jpeg)
:::

このカテゴリは、<INS>Datadog で Observability のベストプラクティスの1つである監視テレメトリデータの関連づけが行えているかを確認する</INS>ために重要な項目です。

## オーナーとドキュメント
[**オーナーとドキュメント**](https://docs.datadoghq.com/tracing/service_catalog/scorecards/#ownership-and-documentation)の項目では、各サービスを管理するチームや関連するドキュメントを整備できているかを確認できるルールが定められています。

この項目では、各サービスを管理する責任があるチームを明確にしているか、各サービスのに関連するリポジトリ・ドキュメント・ランブック・ダッシュボードへ他のチームもアクセスできるかどうかを確認するルールがあります。

**チーム定義のルール**では、<INS>[**Datadog Teams**](https://docs.datadoghq.com/ja/account_management/teams/) 機能を利用してチームを Datadog 内で定義された上で関連するチームが設定されているか</INS>で評価されます。
![TeamsDefiined.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/cb56bb31-5e76-d08d-f4d2-0cbb07da3c54.jpeg)

**コンタクト定義のルール**では、<INS>E メールや Slack, Microsoft Teams, Skype などのチャットツールで管理責任者への連絡先が設定されているか</INS>で評価されます。
![ContactsDefined.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/7e6244bf-b9fe-fb77-30db-37c4c1d868b7.jpeg)

**コードリポジトリとドキュメント定義のルール**では、<INS>リポジトリ・ドキュメント・ランブック・ダッシュボードのリンクが設定されているか</INS>で評価されます。
![DocsDefined.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2363567/de372a2b-27ce-230b-1e06-bec96d81e48c.jpeg)

このカテゴリは、<INS>Datadog を中心に開発・運用を行なっていく</INS>上では積極的に利用することが推奨されます。

## おわりに
**Datadog Service Scorecards** は Datadog に情報や知識を集約し、Datadog を中心とした DevOps や SRE の実践を効率化するためのソリューションです。

全ての Datadog ユーザーは**追加の課金を必要とせず**に Scorecards を設定できるので、サービスの所有者・エンジニア・マネージャー・関係者がサービスのパフォーマンス・信頼性・可用性を向上させるに役立てられます。

Datadog を活用している場合でも、この機能をまだ使ったことも多いように思います。是非これを機に触ってみてはいかがでしょうか🐶