Datadog は、使用する言語に関係なく、Agent および API からメトリクスを収集できます。このページでは、PowerShell を使用した両方の例を示します。
API で PowerShell を使用してメトリクスを送信する
この方法では、PowerShell スクリプトを実行しているシステムに Agent をインストールする必要はありません。POST リクエストを行う際には、API キーとアプリケーションキーを明示的に渡す必要があります。
# PSVersion 4.0 を備えた Windows Server 2012 R2 でテスト
function unixTime() {
Return (Get-Date -date ((get-date).ToUniversalTime()) -UFormat %s) -Replace("[,\.]\d*", "")
}
function postMetric($metric,$tags) {
$currenttime = unixTime
$host_name = $env:COMPUTERNAME #オプションのパラメーター
# JSONを構築
$points = ,@($currenttime, $metric.amount)
$post_obj = [pscustomobject]@{"series" = ,@{"metric" = $metric.name;
"points" = $points;
"type" = "gauge";
"host" = $host_name;
"tags" = $tags}}
$post_json = $post_obj | ConvertTo-Json -Depth 5 -Compress
# DD API への POST
$response = Invoke-RestMethod -Method Post -Uri $url -Body $post_json -ContentType "application/json"
}
# Datadog アカウント、API 情報、オプションのパラメーター
$app_key = "<DATADOG_アプリケーションキー>" #有効なアプリキーを指定します
$api_key = "<DATADOG_API_キー>" #有効な API キーを指定します
$url_base = "https://app.datadoghq.com/"
$url_signature = "api/v1/series"
$url = $url_base + $url_signature + "?api_key=$api_key" + "&" + "application_key=$app_key"
$tags = "[env:test]" #オプションのパラメーター
# Datadog に送信するものを選択します。この例では、プロセス "mmc" によって開かれたハンドルの数が送信されています
$metric_ns = "ps1." # 目的のメトリクスネームスペース
$temp = Get-Process mmc
$metric = @{"name"=$metric_ns + $temp.Name; "amount"=$temp.Handles}
postMetric($metric)($tags) # メトリクスをパラメーターとして postMetric() に渡します
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/v1/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 リポジトリを参照してください。