Datadog は、使用する言語に関係なく、Agent および API からメトリクスを収集できます。このページでは、PowerShell を使用した両方の例を示します。
API で PowerShell を使用してメトリクスを送信する
この方法では、PowerShell スクリプトを実行しているシステムに Agent をインストールする必要はありません。POST リクエストを行う際には、API キーとアプリケーションキーを明示的に渡す必要があります。
# このスクリプトは PowerShell から Datadog v2 API にカスタム メトリクスを送信します。
# Windows 10 Pro (version 10.0.1945) と PSVersion 5.1 (Build 19041, Revision 5486) で動作確認済み
function Send-DatadogMetric {
param(
[Parameter(Mandatory=$true)]
[string]$MetricName,
[Parameter(Mandatory=$true)]
[int]$MetricValue,
[Parameter(Mandatory=$false)]
[string[]]$Tags = @()
)
# ==================================
# 1) Datadog API キー (v2) の設定
# ==================================
# - $url: メトリクス データを Datadog に送信するための API エンドポイント。
# 既定では US1 データ センター向けに設定されています。別のリージョンで運用している場合は、
# 利用しているリージョンに合わせてこの URL を更新してください:
# * EU: https://api.datadoghq.eu/api/v2/series
# * US3: https://api.us3.datadoghq.com/api/v2/series
# * US5: https://api.us5.datadoghq.com/api/v2/series
# * AP1: https://api.ap1.datadoghq.com/api/v2/series
# * AP2: https://api.ap2.datadoghq.com/api/v2/series
# * US1-FED: https://api.ddog-gov.com/api/v2/series
$api_key = "<DATADOG_API_KEY>" # 有効な API キーを指定してください
$app_key = "<DATADOG_APPLICATION_KEY>" # 有効なアプリケーション キーを指定してください
$url = "https://api.datadoghq.com/api/v2/series" # US1 向けの既定エンドポイント。利用している Datadog データ センターに合わせて更新してください
# ==================================
# 2) リクエスト ヘッダー
# ==================================
$headers = @{
"DD-API-KEY" = $api_key
"DD-APPLICATION-KEY" = $app_key
"Content-Type" = "application/json"
}
# ==================================
# 3) v2 用の JSON ペイロードを作成
# ==================================
# 現在時刻 (epoch 秒)
$currentTime = [int](Get-Date -date ((get-date).ToUniversalTime()) -UFormat %s) -Replace("[,\.]\d*", "")
# /api/v2/series エンドポイント向けのボディ
$body = @{
"series" = @(
@{
"metric" = $MetricName
"points" = @(
@{
"timestamp" = $currentTime
"value" = $MetricValue
}
)
"type" = 1 # (1) count, (2) rate, (3) gauge を指定
"tags" = $Tags # オプション: タグの配列を指定します
}
)
}
# ハッシュ テーブルを JSON に変換
$jsonBody = $body | ConvertTo-Json -Depth 5 -Compress
# ==================================
# 4) POST リクエストを送信
# ==================================
$response = Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $jsonBody
Write-Host "Datadog 応答: $($response | ConvertTo-Json -Depth 5)"
}
# ----------------------------
# 使用例:
# ----------------------------
# "my.custom.metric" というカスタム count メトリクスを値 42 で送信し、
# タグとして "env:test" と "version:1.0"、さらに host を付与します。
Send-DatadogMetric -MetricName "my.custom.metric" `
-MetricValue 42 `
-Tags @("env:test","version:1.0", "host:$env:COMPUTERNAME")
DogStatsD で PowerShell を使用してメトリクスを送信する
Agent を使用すると、その DogStatsD リスナーを利用できます。次の例は、DogStatsD で同じメトリクスを送信する方法を示しています。API またはアプリケーションキーはローカルの datadog.yaml に既に存在するため、指定する必要がなくなったことに注意してください。
# PSVersion 4.0 を備えた Windows Server 2012 R2 でテスト
# PSVersion 2.0 搭載 Windows Server 2008 x64 R2
function dogstatsd($metric) {
$udpClient = New-Object System.Net.Sockets.UdpClient
$udpClient.Connect('127.0.0.1', '8125')
$encodedData=[System.Text.Encoding]::ASCII.GetBytes($metric)
$bytesSent=$udpClient.Send($encodedData,$encodedData.Length)
$udpClient.Close()
}
$tags = "|#env:test" # Datadog tag
$temp = Get-Process mmc
$metric = "dogstatsd.ps1." + $temp.Name + ":" + $temp.Handles + "|g" + $tags # メトリクス
dogstatsd($metric)
例
こちらは Msxml2.XMLHTTP を使用して PowerShell で翻訳された 2 つの例で、Mozilla のドキュメントで完全に文書化されています。
API 呼び出しを行うコード
$url_base = "https://app.datadoghq.com/"
$url = $url_base + $url_signature + "?api_key=$api_key" + "&" + "application_key=$app_key"
$http_request = New-Object -ComObject Msxml2.XMLHTTP
$http_request.open($http_method, $url, $false)
$http_request.setRequestHeader("Content-type", "application/json")
$http_request.setRequestHeader("Connection", "close")
$http_request.send($parameters)
$http_request.status
$http_request.responseText
ホストにタグを追加
API/アプリキーを自分のものに置き換えます。
$api_key = "<DATADOG_API_KEY>"
$app_key = "<DATADOG_APPLICATION_KEY>"
ホスト API の説明に従ってパラメーターを設定します。
$host_name = "test.host"
$http_method = "POST"
$url_signature = "api/v1/tags/hosts/$host_name"
$parameters = "{
`"tags`" : [`"environment:production`", `"role:webserver`"]
}"
最初のセクションに示されているコードを実行します。
メトリクスをポスト
API/アプリキーを自分のものに置き換えます。
$api_key = "<DATADOG_API_KEY>"
$app_key = "<DATADOG_APPLICATION_KEY>"
メトリクス API の説明に従ってパラメーターを設定します。
$http_method = "POST"
$url_signature = "api/v2/series"
$currenttime = (Get-Date -date ((get-date).ToUniversalTime()) -UFormat %s) -Replace("[,\.]\d*", "")
$parameters = "{ `"series`" :
[{`"metric`":`"test.powershell`",
`"points`":[[$currenttime, 20]],
`"type`":`"gauge`",
`"host`":`"test.example.com`",
`"tags`":[`"environment:test`"]}
]
}"
最初のセクションに示されているコードを実行します。
その他のコード例については、ncracker/dd_metric GitHub リポジトリを参照してください。
参考資料