Datadog入門 第2部 - セットアップと基本設定の完全ガイド
Datadogの基礎理解を終えた次のステップは、実際の環境でDatadogを動かし始めることです。本記事では、アカウント作成から基本的なデータ収集開始まで、実践的なセットアップ手順を段階的に詳しく解説します。初心者でも迷わず進められるよう、各段階での注意点や設定のベストプラクティスも併せて紹介します。
2.1 アカウント作成と初期設定
Datadogアカウントの作成
1. サインアップ手順
公式サイトからのアカウント作成
# アカウント作成の基本情報
URL: https://www.datadoghq.com/
提供プラン:
- Free Trial: 14日間フル機能
- Pro Plan: $15/host/月
- Enterprise Plan: $23/host/月
必要情報:
- 会社メールアドレス(個人用不可)
- 会社名と部署
- 監視予定システムの規模
- 主な利用目的(DevOps、Security、Business等)
アカウント作成プロセス詳細
# 1. 基本情報入力
Company Email: [email protected]
Company Name: Your Company Inc.
Full Name: Taro Yamada
Phone: +81-90-1234-5678
# 2. 組織設定
Organization Name: company-monitoring
Data Center Region: US1 (アジアパシフィック利用の場合はAP1推奨)
Industry: Technology/Financial/Healthcare等
# 3. 初期セットアップ質問
Primary Use Case:
- Infrastructure Monitoring
- Application Performance Monitoring
- Log Management
- Security Monitoring
Team Size: 1-10, 11-50, 51-200, 200+
# 4. 認証情報確認
Email Verification: メール認証必須
Multi-Factor Authentication: 推奨設定
2. リージョン選択の重要性
データリージョンの選択基準
# 利用可能リージョンと特徴
US1 (us1.datadoghq.com):
- 所在地: バージニア州
- 特徴: 最大のリージョン、全機能利用可能
- 遅延: 日本から約180ms
- 推奨: グローバル企業、機能優先
US3 (us3.datadoghq.com):
- 所在地: オレゴン州
- 特徴: 中規模リージョン
- 遅延: 日本から約120ms
- 推奨: 西海岸ユーザー
US5 (us5.datadoghq.com):
- 所在地: オレゴン州
- 特徴: 新しいリージョン、高性能
- 遅延: 日本から約120ms
- 推奨: 新規ユーザー
EU1 (app.datadoghq.eu):
- 所在地: アイルランド
- 特徴: GDPR準拠、ヨーロッパ企業向け
- 遅延: 日本から約300ms
- 推奨: EU法規制対象企業
AP1 (ap1.datadoghq.com):
- 所在地: 東京(AWS ap-northeast-1)
- 特徴: 日本国内データ、低遅延
- 遅延: 日本から約10-20ms
- 推奨: 日本企業、データ主権重視
選択基準:
法的要件: データ所在地規制がある場合は該当リージョン必須
パフォーマンス: 低遅延が重要な場合はAP1
機能性: 最新機能を優先する場合はUS1/US3
コスト: リージョンにより若干価格差あり
データリージョン変更時の注意事項
重要な制限事項:
- リージョン変更は後から不可能
- データは他リージョンに移行できない
- APIエンドポイントが異なる
- 一部機能の提供時期に差がある
移行が必要な場合:
- 新しいアカウントを作成
- 設定を手動で再構築
- データの再収集が必要
- ダウンタイムが発生
組織設定とユーザー管理
1. 組織階層の設計
Datadogの組織構造
# 組織階層の設計例
Organization: "Company Corp"
└── Sub-Organizations (オプション):
├── "Production Environment"
│ ├── Teams: Backend, Frontend, DevOps
│ └── Access: 本番環境のみ
├── "Staging Environment"
│ ├── Teams: QA, Development
│ └── Access: ステージング環境のみ
└── "Development Environment"
├── Teams: All Developers
└── Access: 開発環境のみ
メリット:
- 環境別のアクセス制御
- チーム別の権限管理
- データの論理的分離
- コスト分析の精度向上
組織設定のベストプラクティス
# 推奨設定パターン
1. 単一組織モデル(小規模・中規模):
Organization: "Company Monitoring"
Teams:
- Admin: 管理者権限
- DevOps: インフラ・アプリ監視
- Development: アプリケーション監視
- Security: セキュリティ監視
- ReadOnly: 参照のみ
2. 複数組織モデル(大規模・複雑な構造):
Parent Org: "Enterprise Corp"
Child Orgs:
- "Production Monitoring"
- "Non-Production Monitoring"
- "Security Operations"
- "Business Intelligence"
3. 地理的分散モデル:
Parent Org: "Global Company"
Child Orgs:
- "APAC Operations"
- "EMEA Operations"
- "Americas Operations"
2. ユーザーとロール管理
標準ロールとその権限
# Datadogの標準ロール
Admin:
権限:
- 組織設定の変更
- ユーザー管理
- ダッシュボード作成・編集・削除
- アラート設定
- インテグレーション管理
- API キー管理
用途: システム管理者、DevOpsリーダー
Standard:
権限:
- ダッシュボード作成・編集
- アラート設定
- データ参照
- 一部インテグレーション設定
制限:
- ユーザー管理不可
- 組織設定変更不可
用途: 一般開発者、運用担当者
Read Only:
権限:
- データ参照のみ
- ダッシュボード閲覧
- 公開データの確認
制限:
- 編集・設定変更一切不可
用途: 経営層、監査担当者
カスタムロールの作成
# カスタムロール設計例
Security Analyst:
permissions:
- "security_monitoring_findings_read"
- "security_monitoring_rules_read"
- "security_monitoring_signals_read"
- "logs_read_data"
- "dashboards_read"
- "monitors_read"
restrictions:
- "no_infrastructure_write"
- "no_apm_config_write"
Development Team Lead:
permissions:
- "dashboards_write"
- "monitors_write"
- "apm_config_write"
- "logs_read_data"
- "metrics_read"
restrictions:
- "no_user_management"
- "no_billing_access"
Business Analyst:
permissions:
- "dashboards_read"
- "custom_metrics_read"
- "rum_events_read"
- "logs_read_index_data"
restrictions:
- "no_infrastructure_access"
- "no_security_data"
APIキーとアプリケーションキーの理解
1. APIキーの管理
APIキーの種類と用途
# APIキーの分類
API Keys:
用途: Datadog Agent、カスタムメトリクス送信
権限: データ送信専用(書き込みのみ)
形式: 32文字の英数字
例: "abcd1234efgh5678ijkl9012mnop3456"
Application Keys:
用途: Datadog API、ダッシュボード操作
権限: データ読み取り・設定変更
形式: 40文字の英数字
例: "abcd1234efgh5678ijkl9012mnop3456qrst7890"
Service Account Keys:
用途: CI/CD、自動化スクリプト
権限: 特定サービスアカウントに紐づけ
形式: 専用トークン
メリット: ユーザー依存なし、監査可能
APIキー管理のベストプラクティス
# キー管理戦略
1. 環境別キー分離:
production_api_key: 本番環境専用
staging_api_key: ステージング環境専用
development_api_key: 開発環境専用
2. 用途別キー分離:
infrastructure_key: インフラ監視用
application_key: アプリケーション監視用
security_key: セキュリティ監視用
automation_key: 自動化・CI/CD用
3. アクセス制御:
- 必要最小限の権限付与
- 定期的なキーローテーション(3-6ヶ月)
- 使用していないキーの無効化
- キー使用状況の定期監査
4. セキュリティ対策:
- 環境変数での保存
- ハードコード禁止
- Git履歴への含有防止
- シークレット管理ツール活用
APIキーの設定例
# 環境変数設定例
# ~/.bashrc または ~/.zshrc
export DD_API_KEY="your-api-key-here"
export DD_APP_KEY="your-app-key-here"
export DD_SITE="datadoghq.com" # またはap1.datadoghq.com
# Docker環境での設定
docker run -d \
-e DD_API_KEY=$DD_API_KEY \
-e DD_SITE="datadoghq.com" \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
datadog/agent:latest
# Kubernetes Secret設定
kubectl create secret generic datadog-secret \
--from-literal=api-key=$DD_API_KEY \
--namespace=datadog
2. アプリケーションキーの活用
プログラマティックアクセスの設定
# Python例: Datadog APIクライアント
from datadog_api_client.v1 import ApiClient, Configuration
from datadog_api_client.v1.api import metrics_api, dashboards_api
# 設定
configuration = Configuration()
configuration.api_key['apiKeyAuth'] = 'your-api-key'
configuration.api_key['appKeyAuth'] = 'your-app-key'
configuration.server_variables['site'] = 'datadoghq.com'
# メトリクス取得例
with ApiClient(configuration) as api_client:
api_instance = metrics_api.MetricsApi(api_client)
# システムメトリクスの取得
query = "avg:system.cpu.user{*}"
response = api_instance.query_metrics(
query=query,
_from=int(time.time()) - 3600, # 1時間前から
to=int(time.time())
)
print(f"CPU使用率データ: {response.series}")
// Node.js例: カスタムダッシュボード作成
const { client, v1 } = require('@datadog/datadog-api-client');
const configuration = client.createConfiguration({
authMethods: {
apiKeyAuth: 'your-api-key',
appKeyAuth: 'your-app-key'
},
serverVariables: {
site: 'datadoghq.com'
}
});
const apiInstance = new v1.DashboardsApi(configuration);
// カスタムダッシュボード作成
const dashboardPayload = {
title: "Custom Business Dashboard",
description: "ビジネスメトリクス監視用ダッシュボード",
widgets: [
{
definition: {
type: "query_value",
requests: [{
q: "sum:custom.sales.total{*}",
aggregator: "sum"
}],
title: "Total Sales"
}
}
],
layoutType: "ordered"
};
apiInstance.createDashboard({ body: dashboardPayload })
.then(response => {
console.log('ダッシュボード作成成功:', response.id);
})
.catch(error => {
console.error('エラー:', error);
});
基本的なセキュリティ設定
1. アクセス制御の設定
SAML SSO統合
# SAML設定例(Okta統合)
Identity Provider: Okta
SSO URL: https://company.okta.com/app/datadog/exk1234567890/sso/saml
Entity ID: https://app.datadoghq.com/account/saml/metadata
X.509 Certificate: [証明書内容]
属性マッピング:
Email: user.email
First Name: user.firstName
Last Name: user.lastName
Role: user.role
Just-in-Time Provisioning:
有効: ✅
デフォルトロール: Standard
チーム自動割り当て: ✅
設定手順:
1. Datadog Organization Settings → Security → SAML
2. Identity Provider情報入力
3. 属性マッピング設定
4. テストログイン実行
5. 本番適用
多要素認証(MFA)設定
# MFA設定オプション
Time-based One-Time Password (TOTP):
対応アプリ:
- Google Authenticator
- Microsoft Authenticator
- 1Password
- Authy
設定手順:
1. User Settings → Security → Two-Factor Authentication
2. QRコード読み取り
3. 確認コード入力
4. リカバリーコード保存
SMS Authentication:
対応地域: 主要国対応
注意事項: SIMスワップ攻撃リスク
Hardware Security Keys:
対応規格: FIDO2/WebAuthn
推奨デバイス:
- YubiKey 5 Series
- Google Titan
- Feitian ePass
強制ポリシー設定:
Admin Users: MFA必須
Standard Users: MFA推奨
Read Only Users: MFA任意
2. 監査ログとモニタリング
監査ログ設定
# 監査ログカテゴリ
Authentication Events:
- ユーザーログイン/ログアウト
- MFA認証成功/失敗
- パスワード変更
- API認証イベント
Configuration Changes:
- ダッシュボード作成/編集/削除
- アラート設定変更
- インテグレーション設定
- ユーザー権限変更
Data Access:
- ログデータアクセス
- メトリクスクエリ実行
- ダッシュボード閲覧
- API呼び出し履歴
Security Events:
- 疑わしいログイン試行
- 権限昇格の試み
- 大量データアクセス
- 異常なAPI使用
監査ログ分析の自動化
# 監査ログ分析スクリプト例
import json
from datadog_api_client.v2 import ApiClient, Configuration
from datadog_api_client.v2.api import audit_api
def analyze_suspicious_activities():
configuration = Configuration()
# API設定は省略
with ApiClient(configuration) as api_client:
api_instance = audit_api.AuditApi(api_client)
# 過去24時間の監査ログ取得
response = api_instance.list_audit_logs(
filter_from=datetime.now() - timedelta(hours=24),
filter_to=datetime.now(),
filter_query="@evt.name:authentication"
)
suspicious_events = []
for event in response.data:
# 複数回ログイン失敗の検出
if (event.attributes.evt.name == "authentication" and
event.attributes.evt.outcome == "failure"):
suspicious_events.append({
'timestamp': event.attributes.timestamp,
'user': event.attributes.usr.email,
'ip': event.attributes.network.client.ip,
'reason': 'Multiple login failures'
})
# Slack通知またはDatadogアラート送信
if suspicious_events:
send_security_alert(suspicious_events)
def send_security_alert(events):
# セキュリティチームへの通知処理
pass
2.2 Datadog Agentの導入
Datadog Agentとは何か
1. Agentの役割と機能
Datadog Agentアーキテクチャ
# Agent構成要素詳細
Agent Core:
役割: 中央制御とメトリクス収集
機能:
- システムメトリクス(CPU、メモリ、ディスク、ネットワーク)
- カスタムメトリクス受信(StatsD、DogStatsD)
- ヘルスチェックとサービス発見
- インテグレーションの実行
Trace Agent:
役割: APMデータ処理
機能:
- トレースデータの受信(8126/tcp)
- スパンの前処理と最適化
- サンプリング制御
- 分散トレーシング情報の集約
Log Agent:
役割: ログ収集と転送
機能:
- ファイルテーリング
- Syslog受信
- コンテナログ収集
- ログフィルタリングと変換
Process Agent:
役割: プロセス監視
機能:
- 実行中プロセス一覧
- プロセスメトリクス
- ネットワーク接続情報
- コンテナプロセス追跡
Security Agent:
役割: セキュリティ監視
機能:
- ファイルシステム監視
- ネットワーク活動監視
- プロセス実行監視
- セキュリティルール評価
2. Agentバージョン選択
バージョン比較と選択指針
# Datadog Agent バージョン比較
Agent 7.x (推奨):
リリース: 2019年〜現在
Python Version: Python 3.8+
特徴:
- 現行メインバージョン
- 最新機能対応
- 高性能・低リソース消費
- セキュリティ強化
サポートOS:
- Linux: RHEL 7+, Ubuntu 16.04+, Debian 9+
- Windows: Server 2016+, Windows 10
- macOS: 10.14+
- コンテナ: Docker、Kubernetes
推奨環境:
- 新規導入
- 現代的なインフラ
- セキュリティ重視環境
Agent 6.x (レガシーサポート):
リリース: 2017年〜2023年
Python Version: Python 2.7/3.8
特徴:
- 安定バージョン
- 基本機能対応
- 限定的な新機能追加
推奨環境:
- レガシーシステム
- 安定性最優先
- 段階的移行期間
選択基準:
新規導入: Agent 7.x 一択
既存環境更新:
- テスト環境で7.x検証
- 段階的にバージョンアップ
レガシー環境:
- 6.x で当面運用
- 移行計画の策定
インストール方法(Linux、Windows、macOS)
1. Linux環境でのインストール
RHEL/CentOS/Amazon Linux インストール
# YUMリポジトリ設定
cat <<EOF > /etc/yum.repos.d/datadog.repo
[datadog]
name=Datadog, Inc.
baseurl=https://yum.datadoghq.com/stable/7/x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://keys.datadoghq.com/DATADOG_RPM_KEY_CURRENT.public
https://keys.datadoghq.com/DATADOG_RPM_KEY_4F09D16B.public
https://keys.datadoghq.com/DATADOG_RPM_KEY_B01082D3.public
https://keys.datadoghq.com/DATADOG_RPM_KEY_FD4BF915.public
EOF
# GPGキーインポート
rpm --import https://keys.datadoghq.com/DATADOG_RPM_KEY_CURRENT.public
rpm --import https://keys.datadoghq.com/DATADOG_RPM_KEY_4F09D16B.public
# Agent インストール
yum install datadog-agent
# 設定ファイル作成
DD_API_KEY=your_api_key_here DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"
# サービス開始
systemctl enable datadog-agent
systemctl start datadog-agent
# ステータス確認
sudo datadog-agent status
Ubuntu/Debian インストール
# APTリポジトリ設定
sudo apt-get update
sudo apt-get install apt-transport-https curl gnupg
# Datadog APT キー追加
sudo sh -c "echo 'deb [signed-by=/usr/share/keyrings/datadog-archive-keyring.gpg] https://apt.datadoghq.com/ stable 7' > /etc/apt/sources.list.d/datadog.list"
sudo touch /usr/share/keyrings/datadog-archive-keyring.gpg
sudo chmod a+r /usr/share/keyrings/datadog-archive-keyring.gpg
curl https://keys.datadoghq.com/DATADOG_APT_KEY_CURRENT.public | sudo gpg --no-default-keyring --keyring /usr/share/keyrings/datadog-archive-keyring.gpg --import --batch
curl https://keys.datadoghq.com/DATADOG_APT_KEY_382E94DE.public | sudo gpg --no-default-keyring --keyring /usr/share/keyrings/datadog-archive-keyring.gpg --import --batch
# パッケージリスト更新とインストール
sudo apt-get update
sudo apt-get install datadog-agent
# 設定ファイル準備
sudo sh -c "sed 's/api_key:.*/api_key: your_api_key_here/' /etc/datadog-agent/datadog.yaml.example > /etc/datadog-agent/datadog.yaml"
# サービス開始
sudo systemctl enable datadog-agent
sudo systemctl start datadog-agent
# 動作確認
sudo datadog-agent status
コンテナ環境(Docker)でのインストール
# シンプルなDocker実行
docker run -d --name datadog-agent \
-e DD_API_KEY=your_api_key_here \
-e DD_SITE="datadoghq.com" \
-e DD_AC_EXCLUDE="name:datadog-agent" \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /opt/datadog-agent/run:/opt/datadog-agent/run:rw \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
datadog/agent:latest
# 本格的なDocker Compose設定
version: '3.8'
services:
datadog:
image: datadog/agent:latest
container_name: datadog-agent
environment:
- DD_API_KEY=your_api_key_here
- DD_SITE=datadoghq.com
- DD_HOSTNAME=docker-host
# ログ収集有効化
- DD_LOGS_ENABLED=true
- DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true
# APM有効化
- DD_APM_ENABLED=true
- DD_APM_NON_LOCAL_TRAFFIC=true
# プロセス監視有効化
- DD_PROCESS_AGENT_ENABLED=true
# Network Performance Monitoring
- DD_SYSTEM_PROBE_ENABLED=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /etc/passwd:/etc/passwd:ro
ports:
- "8125:8125/udp" # StatsD
- "8126:8126/tcp" # APM
cap_add:
- SYS_PTRACE
security_opt:
- apparmor:unconfined
2. Windows環境でのインストール
Windows Server/Windows 10 インストール
# PowerShell管理者権限で実行
# 1. MSIインストーラーダウンロード
$DownloadURL = "https://s3.amazonaws.com/ddagent-windows-stable/datadog-agent-7-latest.amd64.msi"
$InstallerPath = "$env:TEMP\datadog-agent.msi"
Invoke-WebRequest -Uri $DownloadURL -OutFile $InstallerPath
# 2. サイレントインストール実行
msiexec /i $InstallerPath /quiet /qn `
APIKEY="your_api_key_here" `
SITE="datadoghq.com" `
HOSTNAME="windows-server-01"
# 3. サービス確認
Get-Service "DatadogAgent"
# 4. Agent設定確認
& "C:\Program Files\Datadog\Datadog Agent\bin\agent.exe" status
# 5. ログ収集有効化
$ConfigPath = "C:\ProgramData\Datadog\datadog.yaml"
$Config = Get-Content $ConfigPath
$Config = $Config -replace "#logs_enabled: false", "logs_enabled: true"
Set-Content -Path $ConfigPath -Value $Config
# 6. サービス再起動
Restart-Service "DatadogAgent"
Windows コンテナ環境
# Dockerfile例
FROM mcr.microsoft.com/windows/servercore:ltsc2019
# Datadog Agent インストール
ADD https://s3.amazonaws.com/ddagent-windows-stable/datadog-agent-7-latest.amd64.msi /datadog-agent.msi
RUN msiexec /i datadog-agent.msi /quiet /qn \
APIKEY=your_api_key_here \
SITE=datadoghq.com
# 設定ファイルコピー
COPY datadog.yaml "C:\ProgramData\Datadog\datadog.yaml"
# エントリーポイント設定
ENTRYPOINT ["C:\\Program Files\\Datadog\\Datadog Agent\\bin\\agent.exe", "run"]
3. macOS環境でのインストール
Homebrew を使用したインストール
# Homebrew経由でのインストール
brew install --cask datadog-agent
# 設定ファイル作成
sudo cp /opt/datadog-agent/etc/datadog.yaml.example /opt/datadog-agent/etc/datadog.yaml
# API キー設定
sudo sed -i '' 's/api_key:.*/api_key: your_api_key_here/' /opt/datadog-agent/etc/datadog.yaml
sudo sed -i '' 's/# site:.*/site: datadoghq.com/' /opt/datadog-agent/etc/datadog.yaml
# Agent開始
sudo launchctl load -w /Library/LaunchDaemons/com.datadoghq.agent.plist
# ステータス確認
sudo datadog-agent status
手動インストール
# 1. パッケージダウンロード
curl -O https://s3.amazonaws.com/dd-agent/datadog-agent-7-latest.dmg
# 2. DMGマウント
hdiutil attach datadog-agent-7-latest.dmg
# 3. インストーラー実行
sudo installer -pkg "/Volumes/datadog-agent-7-latest/datadog-agent-7-latest.pkg" -target /
# 4. 設定ファイル準備
sudo cp /opt/datadog-agent/etc/datadog.yaml.example /opt/datadog-agent/etc/datadog.yaml
# 5. API キー設定
echo "api_key: your_api_key_here" | sudo tee -a /opt/datadog-agent/etc/datadog.yaml
echo "site: datadoghq.com" | sudo tee -a /opt/datadog-agent/etc/datadog.yaml
# 6. サービス開始
sudo launchctl load -w /Library/LaunchDaemons/com.datadoghq.agent.plist
# 7. DMGアンマウント
hdiutil detach "/Volumes/datadog-agent-7-latest"
設定ファイルの基本構造
1. メイン設定ファイル(datadog.yaml)
基本設定構造
# /etc/datadog-agent/datadog.yaml (Linux)
# C:\ProgramData\Datadog\datadog.yaml (Windows)
# /opt/datadog-agent/etc/datadog.yaml (macOS)
## 基本認証設定
api_key: your_api_key_here
site: datadoghq.com # またはap1.datadoghq.com
## ホスト設定
hostname: web-server-01
hostname_resolution: true # ホスト名自動解決
tags:
- environment:production
- team:backend
- service:web-api
- version:1.2.3
## データ収集設定
# ログ収集
logs_enabled: true
logs_config:
container_collect_all: true
force_use_http: false
use_compression: true
compression_level: 6
# APM設定
apm_config:
enabled: true
max_traces_per_second: 10
analyzed_spans:
web-api|http.request: 1.0 # 全トレースを分析
payment-service|payment.process: 0.5 # 50%サンプリング
# プロセス監視
process_config:
enabled: "true"
container_collection:
enabled: true
## ネットワーク設定
# プロキシ設定(必要に応じて)
proxy:
http: http://proxy.company.com:8080
https: http://proxy.company.com:8080
no_proxy:
- localhost
- 127.0.0.1
- company.local
## セキュリティ設定
# 機密データのスクラビング
log_processing_rules:
- type: exclude_at_match
name: exclude_debug_logs
pattern: 'DEBUG.*'
- type: mask_sequences
name: mask_credit_cards
pattern: '\d{4}-\d{4}-\d{4}-\d{4}'
replace_placeholder: "****-****-****-****"
## パフォーマンス設定
# リソース制限
resources:
container:
memory: 512Mi
cpu: 0.5
# 収集間隔設定
min_collection_interval: 15 # 秒
max_collection_interval: 30
## 高度な設定
# インテグレーション自動検出
listeners:
- name: docker
- name: kubelet
- name: kubernetes
config_providers:
- name: docker
polling: true
- name: kubelet
polling: true
# カスタムメトリクス設定
dogstatsd_config:
dogstatsd_port: 8125
non_local_traffic: true
dogstatsd_tags:
- "custom:tag"
2. インテグレーション設定ファイル
PostgreSQL インテグレーション例
# /etc/datadog-agent/conf.d/postgres.d/conf.yaml
## PostgreSQL 基本設定
init_config:
instances:
# プライマリデータベース
- host: localhost
port: 5432
username: datadog
password: "secure_password"
dbname: production
# SSL設定
ssl: require
# 収集対象テーブル
relations:
- relation_name: "users"
schemas:
- "public"
- relation_name: "orders"
schemas:
- "public"
- "analytics"
# カスタムメトリクス
custom_queries:
- query: "SELECT COUNT(*) as active_users FROM users WHERE last_login > NOW() - INTERVAL '1 day'"
columns:
- name: "active_users"
type: "gauge"
tags:
- "query:active_users"
# タグ設定
tags:
- "environment:production"
- "database:primary"
- "team:backend"
# 読み取り専用レプリカ
- host: readonly.db.company.com
port: 5432
username: datadog_readonly
password: "readonly_password"
dbname: production
options:
statement_timeout: 5000
tags:
- "environment:production"
- "database:replica"
- "readonly:true"
## ログ収集設定
logs:
- type: file
path: "/var/log/postgresql/postgresql-*.log"
source: postgresql
service: "postgres-primary"
# ログパーシング
log_processing_rules:
- type: multi_line
name: postgres_multiline
pattern: '\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}'
- type: exclude_at_match
name: exclude_debug
pattern: 'DEBUG'
Redis インテグレーション例
# /etc/datadog-agent/conf.d/redisdb.d/conf.yaml
init_config:
instances:
# Redis マスター
- host: redis-master.company.com
port: 6379
password: "redis_password"
# データベース指定
db: 0
# SSL/TLS設定
ssl: true
ssl_certfile: /opt/redis/ssl/client.crt
ssl_keyfile: /opt/redis/ssl/client.key
ssl_ca_certs: /opt/redis/ssl/ca.crt
# 監視対象コマンド
command_stats: true
# カスタムタグ
tags:
- "environment:production"
- "redis_role:master"
- "cache_type:session"
# Redis レプリカ
- host: redis-replica.company.com
port: 6379
password: "redis_password"
db: 0
tags:
- "environment:production"
- "redis_role:replica"
- "cache_type:session"
## Redis ログ収集
logs:
- type: file
path: "/var/log/redis/redis-server.log"
source: redis
service: "redis-cache"
# ログレベル設定
log_processing_rules:
- type: exclude_at_match
name: exclude_debug
pattern: '\[DEBUG\]'
Agentのステータス確認と基本操作
1. Agent ステータス確認
詳細ステータス確認
# 全体的なステータス確認
sudo datadog-agent status
# 出力例の解釈
===================
Agent (v7.45.0)
===================
Status date: 2024-01-15 10:30:45.123 JST
Agent start: 2024-01-15 08:00:00.000 JST
Pid: 12345
Go Version: go1.19.5
Python Version: 3.8.10
Build arch: amd64
Agent flavor: agent
Check Runners: 4
Log Level: INFO
Paths
=====
Config File: /etc/datadog-agent/datadog.yaml
conf.d: /etc/datadog-agent/conf.d
checks.d: /etc/datadog-agent/checks.d
Clocks
======
NTP offset: 0.001s
System UTC time: 2024-01-15 01:30:45.123 UTC
Host Info
=========
bootTime: 2024-01-10 00:00:00.000 UTC
kernelName: Linux
kernelRelease: 5.4.0-91-generic
kernelVersion: #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021
os: linux
platform: ubuntu
platformFamily: debian
platformVersion: 20.04
procs: 150
uptime: 5d 1h 30m 45s
Hostnames
=========
hostname: web-server-01
socket-hostname: web-server-01
socket-fqdn: web-server-01.company.local
hostname provider: os
unused hostname providers:
aws: not retrievable
gce: not retrievable
コンポーネント別ステータス確認
# インテグレーション状況確認
sudo datadog-agent status | grep -A 20 "Collector"
# APM Agent 状況確認
sudo datadog-agent status | grep -A 15 "APM Agent"
# ログ Agent 状況確認
sudo datadog-agent status | grep -A 15 "Logs Agent"
# DogStatsD 状況確認
sudo datadog-agent status | grep -A 10 "DogStatsD"
# 特定インテグレーションの確認
sudo datadog-agent status | grep -A 5 "postgres"
sudo datadog-agent status | grep -A 5 "redis"
2. Agent 基本操作コマンド
サービス制御コマンド
# Linux (systemd)
sudo systemctl start datadog-agent # 開始
sudo systemctl stop datadog-agent # 停止
sudo systemctl restart datadog-agent # 再起動
sudo systemctl reload datadog-agent # リロード
sudo systemctl enable datadog-agent # 自動起動有効
sudo systemctl disable datadog-agent # 自動起動無効
sudo systemctl status datadog-agent # ステータス確認
# Linux (SysV Init)
sudo service datadog-agent start
sudo service datadog-agent stop
sudo service datadog-agent restart
sudo service datadog-agent status
# macOS
sudo launchctl load -w /Library/LaunchDaemons/com.datadoghq.agent.plist # 開始
sudo launchctl unload -w /Library/LaunchDaemons/com.datadoghq.agent.plist # 停止
# Windows
net start datadogagent # 開始
net stop datadogagent # 停止
sc query datadogagent # ステータス確認
設定管理コマンド
# 設定ファイル検証
sudo datadog-agent configcheck
# 設定の詳細表示
sudo datadog-agent config
# 特定設定値の確認
sudo datadog-agent config | grep api_key
sudo datadog-agent config | grep site
sudo datadog-agent config | grep hostname
# インテグレーション設定確認
sudo datadog-agent configcheck postgres
sudo datadog-agent configcheck redis
3. トラブルシューティングコマンド
診断とログ確認
# Agent ログ確認
sudo tail -f /var/log/datadog/agent.log
# コンポーネント別ログ
sudo tail -f /var/log/datadog/trace-agent.log
sudo tail -f /var/log/datadog/process-agent.log
# ログレベル変更(一時的)
sudo datadog-agent config set log_level DEBUG
sudo systemctl restart datadog-agent
# ヘルスチェック実行
sudo datadog-agent health
# メトリクス送信テスト
sudo datadog-agent check system_core
sudo datadog-agent check disk
sudo datadog-agent check network
# インテグレーション個別テスト
sudo datadog-agent check postgres
sudo datadog-agent check redis -v # 詳細出力
接続テストとデバッグ
# Datadog への接続テスト
sudo datadog-agent status | grep "API Keys status"
# メトリクス送信状況確認
sudo datadog-agent status | grep "Metrics"
# APM 接続確認
curl -X POST "http://localhost:8126/v0.4/traces" \
-H "Content-Type: application/msgpack" \
--data-binary @test_trace.msgpack
# DogStatsD テスト
echo "custom.metric:1|g" | nc -u -w1 localhost 8125
# Agent flare 作成(サポート用情報収集)
sudo datadog-agent flare
2.3 初回データ収集の設定
システムメトリクスの収集開始
1. デフォルトメトリクスの理解
システムメトリクスカテゴリ
# Datadog Agent が自動収集するメトリクス
CPU Metrics:
- system.cpu.user: ユーザープロセスCPU使用率
- system.cpu.system: カーネルCPU使用率
- system.cpu.idle: アイドルCPU使用率
- system.cpu.wait: I/O待機CPU使用率
- system.cpu.stolen: 仮想化オーバーヘッド
- system.load.1: 1分間の平均負荷
- system.load.5: 5分間の平均負荷
- system.load.15: 15分間の平均負荷
Memory Metrics:
- system.mem.total: 総メモリ量
- system.mem.free: 空きメモリ
- system.mem.used: 使用中メモリ
- system.mem.usable: 利用可能メモリ
- system.mem.cached: キャッシュメモリ
- system.mem.buffered: バッファメモリ
- system.swap.total: 総スワップ領域
- system.swap.used: 使用中スワップ
Disk Metrics:
- system.disk.total: ディスク総容量
- system.disk.used: ディスク使用量
- system.disk.free: ディスク空き容量
- system.io.r_s: 読み取りIOPS
- system.io.w_s: 書き込みIOPS
- system.io.rkb_s: 読み取りスループット(KB/s)
- system.io.wkb_s: 書き込みスループット(KB/s)
Network Metrics:
- system.net.bytes_rcvd: 受信バイト数
- system.net.bytes_sent: 送信バイト数
- system.net.packets_in.count: 受信パケット数
- system.net.packets_out.count: 送信パケット数
- system.net.packets_in.error: 受信エラーパケット
- system.net.packets_out.error: 送信エラーパケット
Process Metrics:
- system.processes.running: 実行中プロセス数
- system.processes.sleeping: スリープ中プロセス数
- system.processes.zombie: ゾンビプロセス数
- system.processes.stopped: 停止中プロセス数
- system.processes.total: 総プロセス数
2. メトリクス収集の設定カスタマイズ
収集間隔の調整
# /etc/datadog-agent/datadog.yaml
# グローバル収集間隔設定
min_collection_interval: 15 # 最小15秒間隔
# インテグレーション別間隔設定(conf.d/system_core.d/conf.yaml)
init_config:
instances:
- min_collection_interval: 10 # システムコアメトリクスは10秒間隔
# 特定メトリクスの有効/無効
tags:
- "monitoring:detailed"
カスタムメトリクスの設定
# カスタムチェック例: /etc/datadog-agent/checks.d/custom_disk_usage.py
from datadog_checks.base import AgentCheck
import subprocess
import json
class CustomDiskUsageCheck(AgentCheck):
def check(self, instance):
# ディスク使用率を詳細取得
result = subprocess.run(['df', '-h', '--output=source,pcent,target'],
capture_output=True, text=True)
for line in result.stdout.strip().split('\n')[1:]: # ヘッダーをスキップ
parts = line.split()
if len(parts) >= 3:
filesystem = parts[0]
usage_percent = int(parts[1].rstrip('%'))
mountpoint = parts[2]
# カスタムメトリクス送信
self.gauge(
'custom.disk.usage_percent',
usage_percent,
tags=[
f'filesystem:{filesystem}',
f'mountpoint:{mountpoint}',
'check:custom_disk_usage'
]
)
# 閾値アラート用メトリクス
if usage_percent > 90:
self.gauge('custom.disk.critical', 1,
tags=[f'mountpoint:{mountpoint}'])
else:
self.gauge('custom.disk.critical', 0,
tags=[f'mountpoint:{mountpoint}'])
# 設定ファイル: /etc/datadog-agent/conf.d/custom_disk_usage.d/conf.yaml
init_config:
instances:
- min_collection_interval: 60 # 1分間隔
tags:
- "custom_check:disk_usage"
- "team:infrastructure"
基本的なインテグレーションの有効化
1. 一般的なインテグレーション設定
Nginx インテグレーション
# 1. Nginx設定ファイル修正(/etc/nginx/nginx.conf)
server {
listen 81;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
# 2. Nginx再起動
sudo nginx -t && sudo systemctl reload nginx
# 3. Datadog設定: /etc/datadog-agent/conf.d/nginx.d/conf.yaml
init_config:
instances:
- nginx_status_url: http://localhost:81/nginx_status/
# タグ設定
tags:
- "environment:production"
- "service:web"
- "nginx_role:loadbalancer"
# SSL設定(HTTPS監視の場合)
# tls_verify: false
# ssl_cert: /path/to/cert.pem
# ssl_key: /path/to/key.pem
# 4. ログ収集設定
logs:
- type: file
path: "/var/log/nginx/access.log"
source: nginx
service: "nginx"
# アクセスログパーシング
log_processing_rules:
- type: multi_line
name: nginx_access_logs
pattern: '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
- type: file
path: "/var/log/nginx/error.log"
source: nginx
service: "nginx"
log_level: "error"
Apache HTTP Server インテグレーション
# 1. Apache設定ファイル修正
# /etc/apache2/mods-enabled/status.conf
LoadModule status_module modules/mod_status.so
<Location "/server-status">
SetHandler server-status
Require local
# Require ip 127.0.0.1
</Location>
<Location "/server-info">
SetHandler server-info
Require local
</Location>
# 2. Datadog設定: /etc/datadog-agent/conf.d/apache.d/conf.yaml
init_config:
instances:
- apache_status_url: http://localhost/server-status?auto
apache_user: datadog
apache_password: password # Basic認証を設定した場合
tags:
- "environment:production"
- "service:web"
- "apache_role:frontend"
# 3. ログ収集
logs:
- type: file
path: "/var/log/apache2/access.log"
source: apache
service: "apache"
- type: file
path: "/var/log/apache2/error.log"
source: apache
service: "apache"
log_level: "error"
2. データベースインテグレーション
MySQL インテグレーション詳細設定
# 1. MySQL ユーザー作成
# mysql -u root -p
CREATE USER 'datadog'@'localhost' IDENTIFIED BY 'secure_password';
GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'localhost';
GRANT PROCESS ON *.* TO 'datadog'@'localhost';
GRANT SELECT ON performance_schema.* TO 'datadog'@'localhost';
# パフォーマンススキーマ有効化確認
SHOW VARIABLES LIKE 'performance_schema';
# 2. Datadog設定: /etc/datadog-agent/conf.d/mysql.d/conf.yaml
init_config:
instances:
- server: localhost
port: 3306
user: datadog
pass: secure_password
# 追加オプション
options:
replication: true
galera_cluster: false
extra_status_metrics: true
extra_innodb_metrics: true
extra_performance_metrics: true
schema_size_metrics: true
disable_innodb_metrics: false
# 監視対象データベース
databases:
- production_db
- analytics_db
# カスタムクエリ
queries:
- query: "SELECT COUNT(*) as total_users FROM users"
columns:
- name: "total_users"
type: "gauge"
tags:
- "query:user_count"
- query: "SELECT COUNT(*) as pending_orders FROM orders WHERE status = 'pending'"
columns:
- name: "pending_orders"
type: "gauge"
tags:
- "query:pending_orders"
tags:
- "environment:production"
- "database:mysql"
- "role:primary"
# 3. MySQL ログ収集設定
logs:
- type: file
path: "/var/log/mysql/error.log"
source: mysql
service: "mysql"
log_level: "error"
- type: file
path: "/var/log/mysql/mysql-slow.log"
source: mysql
service: "mysql-slow-queries"
log_processing_rules:
- type: multi_line
name: mysql_slow_query
pattern: '# Time:'
ダッシュボードでのデータ確認
1. 初期ダッシュボードの作成
基本インフラダッシュボード設定
{
"title": "Infrastructure Overview - Getting Started",
"description": "初期セットアップ後の基本監視ダッシュボード",
"widgets": [
{
"id": 1,
"definition": {
"type": "query_value",
"requests": [{
"q": "avg:system.load.1{*}",
"aggregator": "avg",
"conditional_formats": [{
"comparator": ">",
"value": 2,
"palette": "red_on_white"
}]
}],
"title": "Average Load (1min)",
"title_size": "16",
"title_align": "left",
"precision": 2
}
},
{
"id": 2,
"definition": {
"type": "query_value",
"requests": [{
"q": "avg:system.mem.pct_usable{*}",
"aggregator": "avg"
}],
"title": "Memory Usage %",
"title_size": "16"
}
},
{
"id": 3,
"definition": {
"type": "timeseries",
"requests": [{
"q": "avg:system.cpu.user{*} by {host}",
"display_type": "line",
"style": {
"palette": "dog_classic",
"line_type": "solid",
"line_width": "normal"
}
}],
"title": "CPU Usage by Host",
"show_legend": true,
"legend_size": "0"
}
},
{
"id": 4,
"definition": {
"type": "toplist",
"requests": [{
"q": "top(avg:system.disk.used{*} by {device,host}, 10, 'mean', 'desc')",
"conditional_formats": [{
"comparator": ">",
"value": 0.8,
"palette": "red_on_white"
}]
}],
"title": "Top Disk Usage by Device"
}
}
],
"layout_type": "ordered",
"is_shared": false,
"global_time": {
"live_span": "1h"
}
}
アプリケーション監視ダッシュボード
{
"title": "Application Performance - Initial Setup",
"description": "アプリケーション基本監視ダッシュボード",
"widgets": [
{
"definition": {
"type": "timeseries",
"requests": [{
"q": "avg:nginx.net.request_per_s{*}",
"display_type": "bars"
}],
"title": "Nginx Requests per Second"
}
},
{
"definition": {
"type": "query_value",
"requests": [{
"q": "avg:mysql.performance.queries{*}",
"aggregator": "avg"
}],
"title": "MySQL Queries/sec"
}
},
{
"definition": {
"type": "heat_map",
"requests": [{
"q": "avg:apache.performance.busy_workers{*} by {host}"
}],
"title": "Apache Busy Workers Heatmap"
}
}
]
}
2. データ表示の確認と検証
メトリクス確認手順
# Python スクリプトでメトリクス確認
from datadog_api_client.v1 import ApiClient, Configuration
from datadog_api_client.v1.api import metrics_api
import time
def verify_metrics_collection():
configuration = Configuration()
# API設定は省略
with ApiClient(configuration) as api_client:
api_instance = metrics_api.MetricsApi(api_client)
# 確認すべき基本メトリクス
metrics_to_check = [
"system.cpu.user",
"system.mem.used",
"system.disk.used",
"system.load.1",
"nginx.net.request_per_s", # Nginxインテグレーション
"mysql.performance.queries" # MySQLインテグレーション
]
current_time = int(time.time())
one_hour_ago = current_time - 3600
for metric in metrics_to_check:
try:
response = api_instance.query_metrics(
query=f"avg:{metric}{{*}}",
_from=one_hour_ago,
to=current_time
)
if response.series:
print(f"✅ {metric}: データ収集中")
print(f" 最新値: {response.series[0].pointlist[-1][1]}")
else:
print(f"❌ {metric}: データなし")
except Exception as e:
print(f"❌ {metric}: エラー - {e}")
if __name__ == "__main__":
verify_metrics_collection()
アラート設定の基礎
1. 基本アラートの設定
CPU使用率アラート
# Datadog UI または API で設定
Alert Name: "High CPU Usage"
Query: "avg(last_5m):avg:system.cpu.user{*} by {host} > 80"
Conditions:
Warning: > 70%
Critical: > 80%
Evaluation:
- データポイント: 5分間の平均
- 評価頻度: 1分間隔
- 通知遅延: 継続3分間でアラート発生
Notifications:
Warning:
- "#general チャンネル(Slack)"
- "[email protected]"
Critical:
- "#alerts チャンネル(Slack)"
- "[email protected]"
- "PagerDuty Integration"
Message Template: |
**CPU使用率が高い状態です**
ホスト: {{host.name}}
現在値: {{value}}%
閾値: {{threshold}}%
確認URL: {{host.link}}
@oncall-engineer
Recovery Message: |
**CPU使用率が正常に戻りました**
ホスト: {{host.name}}
現在値: {{value}}%
メモリ使用率アラート
Alert Name: "High Memory Usage"
Query: "avg(last_10m):avg:system.mem.pct_usable{*} by {host} < 20"
Conditions:
Warning: < 30% (利用可能メモリ)
Critical: < 20%
Evaluation:
- データポイント: 10分間の平均
- 評価頻度: 2分間隔
Notifications:
Warning:
- "[email protected]"
Critical:
- "[email protected]"
- "PagerDuty: Memory Critical"
Message: |
**メモリ不足の可能性があります**
ホスト: {{host.name}}
利用可能メモリ: {{value}}%
推奨アクション:
1. プロセス確認: `top -o %MEM`
2. メモリクリーンアップ検討
3. 必要に応じてスケールアップ
2. 複合アラートの設定
サービス健全性アラート
Alert Name: "Web Service Health Check"
Type: "Composite Monitor"
Sub-monitors:
1. HTTP Response Time: "avg:nginx.net.request_time{service:web} > 500"
2. Error Rate: "avg:nginx.net.response_4xx{service:web} > 5"
3. Server Availability: "avg:system.load.1{service:web} > 3"
Logic: "(1 AND 2) OR 3"
Notifications:
- "[email protected]"
- "#web-alerts"
Message: |
**Webサービスの健全性に問題があります**
検出された問題:
{{#is_alert}}
- レスポンス時間: {{1.value}}ms (閾値: 500ms)
- エラー率: {{2.value}}% (閾値: 5%)
- サーバー負荷: {{3.value}} (閾値: 3.0)
{{/is_alert}}
対応手順: https://wiki.company.com/runbooks/web-service
3. アラート管理のベストプラクティス
アラート疲れ防止策
# アラート設定の最適化指針
1. 閾値設定:
Warning: ビジネス影響前の早期警告
Critical: 即座の対応が必要なレベル
2. 評価期間:
一時的スパイクを避ける: 最低5分間の継続
重要メトリクス: より長い観測期間(10-15分)
3. 通知頻度制限:
Re-notification: 4時間間隔
Escalation: 1時間以内に応答がない場合
4. ダウンタイム設定:
メンテナンス時間: 事前にアラート停止
定期作業: 自動ダウンタイム設定
5. タグベースフィルタリング:
environment:production のみアラート
critical:true タグでエスカレーション制御
# アラートルール例
Development Environment:
- アラート無効または情報レベルのみ
Staging Environment:
- 開発チームのみ通知
- 営業時間内のみ通知
Production Environment:
- 24/7 監視とアラート
- エスカレーション手順の明確化
アラート設定の段階的展開
# フェーズ1: 基本監視(導入後1週間)
Basic Alerts:
- システムリソース(CPU、メモリ、ディスク)
- サービス稼働状況
- 基本的なアプリケーションメトリクス
Threshold Setting:
- 保守的な設定(誤報を最小化)
- Warning: 実際の問題の90%をカバー
- Critical: 即座の対応が必要なもののみ
# フェーズ2: 応用監視(導入後2-4週間)
Advanced Alerts:
- ビジネスメトリクス
- ユーザーエクスペリエンス関連
- セキュリティ関連イベント
Optimization:
- 過去データに基づく閾値調整
- 季節性・時間帯による動的閾値
- 異常検知アラートの追加
# フェーズ3: 予測監視(導入後1-2ヶ月)
Predictive Alerts:
- リソース枯渇予測
- パフォーマンス劣化トレンド
- 容量計画アラート
Integration:
- インシデント管理システム連携
- 自動修復アクションの統合
- ビジネスインパクト評価の自動化
まとめ
Datadog のセットアップと基本設定を通じて、包括的な監視基盤の構築ができました。本記事で説明した内容により、システムの可視性が大幅に向上し、問題の早期発見と迅速な対応が可能になります。
🎯 セットアップで達成できたこと
- 統合監視環境 - インフラ、アプリケーション、ログの一元監視
- 自動データ収集 - Agent による継続的なメトリクス収集
- リアルタイム可視化 - ダッシュボードでの即座な状況把握
- プロアクティブアラート - 問題発生前の警告システム
💡 次のステップに向けて
短期目標(導入後1-2週間)
- メトリクス収集状況の日次確認
- アラート閾値の微調整
- チームメンバーのダッシュボードアクセス確認
中期目標(導入後1-2ヶ月)
- カスタムメトリクスの追加
- 業務固有のダッシュボード作成
- 運用手順書への監視情報統合
長期目標(導入後3-6ヶ月)
- 異常検知の高度化
- 自動化との連携強化
- ROI測定と最適化
🚀 継続的な改善
Datadog は設定して終わりではなく、継続的な改善が重要です。收集されるデータを分析し、ビジネス要件の変化に応じて監視戦略を進化させることで、真の価値を実現できます。
次回の記事では、より高度なインフラストラクチャ監視機能と、大規模環境での運用ベストプラクティスについて詳しく解説します。
タグ: Datadog, セットアップ, Agent, インテグレーション, 監視設定, 初期設定
関連記事: Datadog入門 第1部 - 基礎理解編