Datadogを整理してみた

# 背景・目的

Datadogについて、触る機会がありましたのでこの機会に知識を整理します。

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:--|:--|
|Datadog|任意のスタックでのソフトウェア開発の各フェーズを支援するオブザーバビリティプラットフォーム<BR>下記から構成されている。組み合わしても単独でも利用可能<BR>・ビルド<BR>・テスト<BR>・監視<BR>・デバッグ<BR>・最適化<BR>・セキュリティ|
|インテグレーション|850 個以上のインテグレーションが公式にリストされている<BR>Datadog API の使用によるカスタムインテグレーションも使用可能<BR>Agentはオープンソース|
|ダッシュボード|リアルタイムのパフォーマンスメトリクスがグラフで表示される<BR>iframeに埋め込むことができる|
|モニター|下記をに基づいてアラートと通知<BR>・メトリクスのしきい値<BR>・インテグレーションの有無<BR>・NWエンドポイント|
|イベント|イベントエクスプローラーには、インフラやサービスによって生成された最新イベントが表示される<BR>イベントには以下のものがある<BR>・コードのデプロイ<BR>・サービスヘルスの変更<BR>・コンフィグの変更<BR>・モニタリングアラート<BR><BR>Agentとインストールされたインテグレーションによって収集されたイベントを自動的に収集する<BR>下記を使用して独自カスタムイベントを送信することも可能<BR>・Datadog API<BR>・カスタムAgent チェック<BR>・DogStatsD<BR>・Event email API<BR>ファセット、検索クエリでフィルタリングする|
|インフラストラクチャー|すべてのマシンはインフラリストに表示される<BR>各マシンに適用されたタグを確認できる|
|ホストマップ|インフラストラクチャーメニューにある機能<BR>下記が可能<BR>・可視化<BR>・外れ値の特定<BR>・利用パターンの検出|
|サーバーレス|すべてのコンピューティングリソースをクラウドプロバイダーが管理し、ユーザーはイベント駆動型コードを記述したら、それをクラウドプロバイダーにアップロードして使用できる|
|APM|Datadog Application Performance Monitoring<BR><BR>ログやインフラストラクチャーの監視と合わせて、リクエストの量やレイテンシーなどの重要なメトリクスを監視するために自動生成されたダッシュボードから、個々のリクエストの詳細なトレースに至るまで、アプリケーションのパフォーマンスを深く理解することが可能|
|Cloud Network Monitoring|コンテナからホスト、サービス、アベイラビリティーゾーンまで、Datadog のタグ付きオブジェクト全体のネットワークトラフィックを可視化できる<BR>データセンターからチーム、個々のコンテナまで、何でもグループ化する|
|Synthetic Monitoring|APIや、ブラウザのテストを作成・実行し、アプリケーション上のユーザートランザクションを積極的にシミュレートし、システムの全てのレイヤーで内部および外部ネットワークエンドポイントを監視できる<BR>エラーの検出、回帰の特定、ロールバックの自動化により、本番環境での問題の顕在化を防止できる|
|RUM & セッションリプレイ|ユーザーの活動や体験をリアルタイムに視覚化し、分析することが可能<BR>セッションリプレイを使用すると、ユーザーの Web ブラウジングセッションをキャプチャして表示、ユーザーの行動をよりよく理解することができる<BR><BR>RUM エクスプローラーでは、ロードタイム、フロントエンドエラー、ページの依存関係を視覚化できる。これに加えて、ビジネスとアプリケーションのメトリクスを関連付け、アプリケーション、インフラストラクチャー、ビジネスのメトリクスの問題を 1 つのダッシュボードでトラブルシューティングできる|
|Cloud SIEM|Security Information and Event Management<BR>アプリケーションやインフラストラクチャーに対する脅威を自動検出<BR>例えば、下記のようなものがある<BR>・標的型攻撃<BR>・脅威のインテルリストに一致するシステムと通信する IP<BR>・安全でないコンフィギュレーション|
|Log Management|アプリとインフラで生成されたすべてのログを送信して処理できる<BR>インデックスを作成せずに、Live Tailを使用してリアルタイムにログを観察できる|
|モバイル版 Datadog|オンコールエンジニアやビジネスユーザーが、ノートパソコンを開かずにサービスの状態をフォローし、問題を迅速にトリアージするための重要なデータを提供する|
|Datadog サイトの概要|・世界中にサイトを提供している<BR>・各サイトは完全に独立している<BR>・サイト間でデータを共有できない|
|

# 概要
## はじめに

下記を基に整理します。

https://docs.datadoghq.com/ja/getting_started/
> Datadog は、任意のスタックでのソフトウェア開発の各フェーズを支援する可観測性プラットフォームです。このプラットフォームは、ビルド、テスト、監視、デバッグ、最適化、セキュリティ確保のための多様な製品から構成されており、これらは単独で使用することも、カスタマイズされたソリューションとして組み合わせることも可能です。

- 任意のスタックでのソフトウェア開発の各フェーズを支援するオブザーバビリティプラットフォーム
- 下記から構成されている。組み合わしても単独でも利用可能
    - ビルド
    - テスト
    - 監視
    - デバッグ
    - 最適化
    - セキュリティ

## Datadog の開始

下記を基に整理します。

https://docs.datadoghq.com/ja/getting_started/application/

### インテグレーション
> Datadog では、850 個以上のインテグレーションが公式にリストされています。
Datadog API の使用によるカスタムインテグレーションも使用可能です。
Agent はオープンソースです。
インテグレーションの構成後は、データセンターやオンラインサービス内のすべてのデータが Datadog で一元管理されます。

- 850 個以上のインテグレーションが公式にリストされている
- Datadog API の使用によるカスタムインテグレーションも使用可能
- Agentはオープンソース
- インテグレーションの構成後は、データセンターやオンラインサービス内のすべてのデータが Datadog で一元管理される

### ダッシュボード
> ダッシュボードには、リアルタイムのパフォーマンスメトリクスがグラフで表示されます。

> - スクリーンボードにあるすべてのグラフは、同じマウス操作で閲覧可能。
> - 棒グラフはイベントです。これによってコンテキストにメトリクスを与えることができます。
> - グラフ内の特定のタイムフレームをクリックアンドドラッグで拡大表示できます。
> - グラフ内にマウスポインターを合わせて、イベントストリームを移動させることができます。
> - ゾーン、ホスト、総使用量別に表示。
> - Datadog はグラフの JSON エディターを公開します。これにより、数式と関数をメトリクスに適用できます。
> - グラフのスナップショットをストリームに表示して共有できます。
> - グラフを iframe に埋め込むことができます。これにより、自社のデータやその他の情報へのアクセス権を付与しなくても、サードパーティにライブグラフを提供することができます。

- リアルタイムのパフォーマンスメトリクスがグラフで表示される
- iframeに埋め込むことができる

### モニター
> モニターは、メトリクスのしきい値、インテグレーションの有無、ネットワークエンドポイントなどに基づいて、アラートと通知を提供します。
> - Datadog に報告される任意のメトリクスを使用できます。
> - デバイス単位やホスト単位など、複数のアラートの設定
> - アラートメッセージで @ を使用することで適切な相手に通知を届けることができます。
> - ダウンタイムをスケジューリングすると、システムシャットダウン時やオフラインメンテナンス時などに通知を停止できます。

- 下記をに基づいてアラートと通知
    - メトリクスのしきい値
    - インテグレーションの有無
    - NWエンドポイント
- 任意のメトリクス
- デバイス単位、ホスト単位
- アラートメッセージで@を使用して、適切な相手に通知できる
- ダウンタイムをスケジューリングすると、シャットダウン時やオフラインメンテナンス時などに通知を停止できる

### イベント
> イベントエクスプローラーには、インフラストラクチャーやサービスによって生成された最新のイベントが表示されます。
イベントには以下のようなものがあります。
> - コードのデプロイ
> - サービスヘルスの変更
> - コンフィギュレーション変更
> - モニタリングアラート

- イベントエクスプローラーには、インフラやサービスによって生成された最新イベントが表示される
- イベントには以下のものがある
    - コードのデプロイ
    - サービスヘルスの変更
    - コンフィグの変更
    - モニタリングアラート

> イベントエクスプローラーは、Agent とインストールされたインテグレーションによって収集されたイベントを自動的に収集します。
また、Datadog API、カスタム Agent チェック、DogStatsD、Event email API を使用して、独自のカスタムイベントを送信することも可能です。
イベントエクスプローラーでは、ファセットや検索クエリでイベントをフィルタリングします。イベントを属性でグループ化またはフィルタリングし、イベント分析でグラフィカルに表現します。


- Agentとインストールされたインテグレーションによって収集されたイベントを自動的に収集する
- 下記を使用して独自カスタムイベントを送信することも可能
    - Datadog API
    - カスタムAgent チェック
    - DogStatsD
    - Event email API
- ファセット、検索クエリでフィルタリングする

### インフラストラクチャー
> すべてのマシンはインフラストラクチャー リストに表示されます。
各マシンに適用されたタグを確認できます。タグ付けによって各マシンの目的を示すことができます。
Datadog では、サーバーの分類が自動的に試みられます。新しいマシンにタグ付けすれば、既にそのタグに設定されている情報に基づいて、そのマシンの統計情報を即座に確認できます。タグ付けの詳細については、こちらを参照してください。


- すべてのマシンはインフラリスト二表示される
- 各マシンに適用されたタグを確認できる

### ホストマップ
> ホストマップは、インフラストラクチャーメニューにある機能です。この機能を使用すると、以下のことができます。
> - 環境のすばやい可視化
> - 外れ値の特定
> - 利用パターンの検出
> - リソースの最適化

> 詳細については、ホストマップを参照してください。

- ホストマップは、インフラストラクチャーメニューにある機能
- 下記が可能
    - 可視化
    - 外れ値の特定
    - 利用パターンの検出

### サーバーレス
> サーバーレスでは、すべてのコンピューティングリソースをクラウドプロバイダーが管理し、ユーザーはイベント駆動型コードを記述したら、それをクラウドプロバイダーにアップロードして使用できます。Datadog Serverless は、サーバーレスアプリケーションを実行している AWS Lambda 関数からのメトリクス、トレース、ログを 1 つのビューにまとめて表示します。このため、エラー、高レイテンシー、またはコールドスタートを生成している関数に絞り込むことにより、パフォーマンスを最適化できます。

- すべてのコンピューティングリソースをクラウドプロバイダーが管理し、ユーザーはイベント駆動型コードを記述したら、それをクラウドプロバイダーにアップロードして使用できる
- Datadog Serverless は、サーバーレスアプリケーションを実行している AWS Lambda 関数からのメトリクス、トレース、ログを 1 つのビューにまとめて表示する
- エラー、高レイテンシー、またはコールドスタートを生成している関数に絞り込むことにより、パフォーマンスを最適化できる

### APM & Continuous Profiler
> Datadog Application Performance Monitoring (APM またはトレース) を利用すると、ログやインフラストラクチャーの監視と合わせて、リクエストの量やレイテンシーなどの重要なメトリクスを監視するために自動生成されたダッシュボードから、個々のリクエストの詳細なトレースに至るまで、アプリケーションのパフォーマンスを深く理解することができます。アプリケーションに対してリクエストが行われると、Datadog は分散システム全体でトレースを確認できるため、このリクエストに対して何が起こっているかについての体系的かつ正確なデータを表示できます。

- Datadog Application Performance Monitoring
- ログやインフラストラクチャーの監視と合わせて、リクエストの量やレイテンシーなどの重要なメトリクスを監視するために自動生成されたダッシュボードから、個々のリクエストの詳細なトレースに至るまで、アプリケーションのパフォーマンスを深く理解することが可能
- アプリケーションに対してリクエストが行われると、Datadog は分散システム全体でトレースを確認できるため、このリクエストに対して何が起こっているかについての体系的かつ正確なデータを表示できる

### Cloud Network Monitoring
> Datadog Cloud Network Monitoring (NPM) を使用すると、コンテナからホスト、サービス、アベイラビリティーゾーンまで、Datadog のタグ付きオブジェクト全体のネットワークトラフィックを可視化できます。データセンターからチーム、個々のコンテナまで、何でもグループ化します。タグを使用して、送信元と宛先でトラフィックをフィルタリングします。次に、フィルターはフローに集約され、それぞれがカスタマイズ可能なネットワークページとネットワークマップを通じて、1 つの送信元と 1 つの宛先間のトラフィックを示します。各フローには、スループット、帯域幅、再送信数、および IP、ポート、PID レベルまでの送信元/宛先情報などのネットワークメトリクスが含まれます。次に、トラフィック量や TCP 再送信などの主要なメトリクスを報告します。

- コンテナからホスト、サービス、アベイラビリティーゾーンまで、Datadog のタグ付きオブジェクト全体のネットワークトラフィックを可視化できる
- データセンターからチーム、個々のコンテナまで、何でもグループ化する
- タグを使用して、送信元と宛先でトラフィックをフィルタリングする

### Synthetic Monitoring
> Datadog Synthetic Monitoring では、API やブラウザのテストを作成・実行し、アプリケーション上のユーザートランザクションを積極的にシミュレートし、システムの全てのレイヤーで内部および外部ネットワークエンドポイントを監視することができます。エラーの検出、回帰の特定、ロールバックの自動化により、本番環境での問題の顕在化を防止することができます。

- APIや、ブラウザのテストを作成・実行し、アプリケーション上のユーザートランザクションを積極的にシミュレートし、システムの全てのレイヤーで内部および外部ネットワークエンドポイントを監視できる
- エラーの検出、回帰の特定、ロールバックの自動化により、本番環境での問題の顕在化を防止できる

### RUM & セッションリプレイ
> Datadog Real User Monitoring (RUM) では、ユーザーの活動や体験をリアルタイムに視覚化し、分析することが可能です。セッションリプレイを使用すると、ユーザーの Web ブラウジングセッションをキャプチャして表示し、ユーザーの行動をよりよく理解することができます。RUM エクスプローラーでは、ロードタイム、フロントエンドエラー、ページの依存関係を視覚化できるだけでなく、ビジネスとアプリケーションのメトリクスを関連付け、アプリケーション、インフラストラクチャー、ビジネスのメトリクスの問題を 1 つのダッシュボードでトラブルシューティングすることができます。

- ユーザーの活動や体験をリアルタイムに視覚化し、分析することが可能
- セッションリプレイを使用すると、ユーザーの Web ブラウジングセッションをキャプチャして表示、ユーザーの行動をよりよく理解することができる
- RUM エクスプローラーでは、ロードタイム、フロントエンドエラー、ページの依存関係を視覚化できる。これに加えて、ビジネスとアプリケーションのメトリクスを関連付け、アプリケーション、インフラストラクチャー、ビジネスのメトリクスの問題を 1 つのダッシュボードでトラブルシューティングできる

### Cloud SIEM
> Datadog Cloud SIEM (Security Information and Event Management) は、アプリケーションやインフラストラクチャーに対する脅威を自動検出します。たとえば、標的型攻撃、脅威のインテルリストに一致するシステムと通信する IP、安全でないコンフィギュレーションなどがあります。こうした脅威は、Datadog でセキュリティシグナルとして表面化され、セキュリティエクスプローラーで相関およびトリアージできます。

- Security Information and Event Management)
- アプリケーションやインフラストラクチャーに対する脅威を自動検出
- 例えば、下記のようなものがある
    - 標的型攻撃
    - 脅威のインテルリストに一致するシステムと通信する IP
    - 安全でないコンフィギュレーション

### Log Management
> Datadog ログ管理を使用すると、アプリケーションとインフラストラクチャーによって生成されたすべてのログを送信して処理できます。インデックスを作成せずに、Live Tail を使用してリアルタイムにログを観察できます。アプリケーションとインフラストラクチャーからすべてのログを取り込み、フィルターを使用して動的にインデックス化するものを決定し、それらをアーカイブに保存できます。

- アプリとインフラで生成されたすべてのログを送信して処理できる
- インデックスを作成せずに、Live Tailを使用してリアルタイムにログを観察できる
- アプリとインフラからすべてのログを取り込み、フィルターを使用して動的にインデックス化するものを決定しアーカイブできる

### モバイル版 Datadog
> Apple App Store と Google Play Store で提供されている Datadog モバイルアプリは、オンコールエンジニアやビジネスユーザーが、ノートパソコンを開かずにサービスの状態をフォローし、問題を迅速にトリアージするための重要なデータを提供します。組織のダッシュボード、モニター、インシデント、SLO などに、モバイルデバイスから直接アクセスできます。
- オンコールエンジニアやビジネスユーザーが、ノートパソコンを開かずにサービスの状態をフォローし、問題を迅速にトリアージするための重要なデータを提供する

## Datadog サイトの概要
下記を基に整理します

https://docs.datadoghq.com/ja/getting_started/site/

> Datadog では、世界中でさまざまなサイトを提供しています。各サイトは完全に独立しており、サイト間でデータを共有することはできません。各サイトを使用する利点があり（政府のセキュリティ規定など）、世界中の特定した場所にデータを保存することが可能になります。

- 世界中にサイトを提供している
- 各サイトは完全に独立している
- サイト間でデータを共有できない

### 責任の共有
> ユーザーデータを安全に保つ責任は、Datadog と Datadog 製品を活用する開発者の間で共有されます。
Datadog の責任は以下の通りです。
> - Datadog プラットフォームにデータが転送され、保存される際、それを安全に取り扱う信頼性の高い製品を提供します。
> - 社内ポリシーに基づき、セキュリティ上の問題を確実に特定します。

> 開発者の責任は以下の通りです。
Datadog が提供する構成値とデータプライバシーオプションを活用します。
自社の環境内のコードの整合性を確実に保ちます。

- Datadogと開発者で責任を共有する
- Datadogの責任
    - 安全に取り扱う信頼性の高い製品を提供
    - セキュリティ上の問題を特定する
- 開発者の責任
    - 構成値とデータプライバシーオプションを活用
    - コードの整合性を保つ


### Datadog サイトにアクセスする
|サイト|	サイト URL|	サイトパラメーター	|所在地|
|:--|:--|:--|:--|
|US1|https://app.datadoghq.com	|datadoghq.com	|US|
|US3|https://us3.datadoghq.com	|us3.datadoghq.com	|US|
|US5|https://us5.datadoghq.com	|us5.datadoghq.com	|US|
|EU1|https://app.datadoghq.eu |datadoghq.eu	|EU (ドイツ)|
|US1-FED|https://app.ddog-gov.com|	ddog-gov.com	|US|
|AP1|https://ap1.datadoghq.com	|ap1.datadoghq.com	|日本|


# 実践
## アカウント作成
1. Datadogのページで「Try for free」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b2676d34-ebac-4550-9699-344d3fabc3ee.png)

1. 日本のリージョンを選び、各種情報を入力します
1. AWSを選択します「Next」をクリックします

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ecfcce3e-303c-41a4-8daa-f27afd12b6f8.png)

1. Agent setupでMac OSを選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/41483ebf-0b8c-4e32-b2ba-0ea6e68deeb1.png)

1. [download the DMG package](https://install.datadoghq.com/datadog-agent-7-latest.dmg)からダウンロードします
1. `/opt/datadog-agent/etc/datadog.yaml`を作成します
    ```bash
    % cat /opt/datadog-agent/etc/datadog.yaml
    api_key: XXXXXX
    site: ap1.datadoghq.com
    % 
    ```
1. ダウンロードしたdmgファイルをクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/77d6331c-0dce-4ce5-b7c2-8dc4bd2e4ad5.png" width=200 />

1. 「続ける」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9852282b-1123-4a97-8f65-73c072087e90.png)

1. 許諾を読み、インストールします
1. コマンドを実行してみます
    ```bash
    % datadog-agent -h 
    
    The Datadog Agent faithfully collects events and metrics and brings them
    to Datadog on your behalf so that you can do something useful with your
    monitoring and performance data.
    
    Usage:
      datadog-agent [command]
    
    Available Commands:
      analyze-logs          Analyze logs configuration in isolation
      check                 Run the specified check
      completion            Generate the autocompletion script for the specified shell
      config                Print the runtime configuration of a running agent
      configcheck           Print all configurations loaded & resolved of a running agent
      diagnose              Validate Agent installation, configuration and environment
      dogstatsd             Inspect dogstatsd pipeline status
      dogstatsd-capture     Start a dogstatsd UDS traffic capture
      dogstatsd-replay      Replay dogstatsd traffic
      dogstatsd-stats       Print basic statistics on the metrics processed by dogstatsd
      flare                 Collect a flare and send it to Datadog
      health                Print the current agent health
      help                  Help about any command
      hostname              Print the hostname used by the Agent
      import                Import and convert configuration files from previous versions of the Agent
      integration           Datadog integration manager
      jmx                   Run troubleshooting commands on JMXFetch integrations
      launch-gui            starts the Datadog Agent GUI
      processchecks         Run a specific check and print the results. Choose from: process, rtprocess, container, rtcontainer, process_discovery
      run                   Run the Agent
      secret                Display information about secrets in configuration.
      secret-helper         Secret management provider helper
      snmp                  Snmp tools
      status                Display the current status
      stop                  Stops a running Agent
      stream-event-platform Stream the event platform payloads being processed by a running agent
      stream-logs           Stream the logs being processed by a running agent
      tagger-list           Print the tagger content of a running agent
      version               Print the version info
      workload-list         Print the workload content of a running agent
    
    Flags:
      -c, --cfgpath string             path to directory containing datadog.yaml
      -E, --extracfgpath stringArray   specify additional configuration files to be loaded sequentially after the main datadog.yaml
      -h, --help                       help for datadog-agent
      -n, --no-color                   disable color output
          --sysprobecfgpath string     path to directory containing system-probe.yaml
    
    Use "datadog-agent [command] --help" for more information about a command.
    % 
    ```

1. 画面が変わりますので、「終了」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/10ba5786-1023-449b-9e0d-23401466f9e0.png)

1. 表示されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/710744f8-a9e5-443e-a26f-d5fe631ea0e8.png)

# 考察
今回は、Datadogの基本を整理しつつ、アカウントの作成まで行いました。
次回は、具体的な機能を触りながら試していこうと思います。


# 参考
https://docs.datadoghq.com/ja/getting_started/