Closed4
DataDogの期待した列(host・service)にデータが表示されない
DataDog公式のcurlを利用したのにうまくいかない・・・
公式サイトに載っていたcurl
echo $(cat << EOF
[
{
"ddsource": "nginx",
"ddtags": "env:staging,version:5.1",
"hostname": "i-012345678",
"message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World",
"service": "payment"
}
]
EOF
) | gzip | curl -X POST "https://http-intake.logs.datadoghq.com/api/v2/logs" \
-H "Accept: application/json" \
-H "Content-Type: text/plain" \
-H "Content-Encoding: gzip" \
-H "DD-API-KEY: ${DD_API_KEY}" \
--data-binary @-
を実行しますが、以下の通りhost列、service列には何も入っていません。
(キャプチャにはありませんが、sourceもうまく入っていませんでした)
原因
直接原因
- Contet-Typeが
text/plain
になっていた。- 正しくは
application/json
であるべき。
- 正しくは
間接的な原因
- 数パターンあるcurlの中でたまたま
シンプルなメッセージ
を選択した - しかし上記は文字列をそのまま送る、マイナーな方法だった。
- DataDogの公式サイトの英語のコメントをしっかり読んでいなかった。
## Simple Raw Message # Submit log string. Log attributes can be passed as query parameters in the URL. This enables the addition of tags or the source by using the `ddtags` and `ddsource` parameters: `?host=my-hostname&service=my-service&ddsource=my-source&ddtags=env:prod,user:my-user`.
## シンプルな生ログメッセージ# ログ文字列をそのまま送信する方式です。ホスト名、サービス名、ソース、タグなどのログ属性は、URLのクエリパラメータとして指定できます。例:`?host=my-hostname&service=my-service&ddsource=my-source&ddtags=env:prod,user:my-user`.
結論
英語でも、しっかりメッセージは読もう。
リトライ
もう一度、正しいほうのcurlで試してみる。
Simple JSON Message
# Curl command
echo $(cat << EOF
[
{
"ddsource": "nginx",
"ddtags": "env:staging,version:5.1",
"hostname": "i-012345678",
"message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World",
"service": "payment"
}
]
EOF
) | gzip | curl -X POST "https://http-intake.logs.datadoghq.com/api/v2/logs" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Content-Encoding: gzip" \
-H "DD-API-KEY: ${DD_API_KEY}" \
--data-binary @-
## Simple JSON Message
# Log attributes can be passed as `key:value` pairs in valid JSON messages.
結果
問題なし。期待通り、host・serviceはJSON内で設定した値が表示されており、
sourceも問題ないことを確認しました。
でも・・・コメント末尾に書いてたから、分かんなかった。。。
と後で思いました(笑)
このスクラップは1ヶ月前にクローズされました