Closed4

DataDogの期待した列(host・service)にデータが表示されない

kuze_add9kuze_add9

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もうまく入っていませんでした)

kuze_add9kuze_add9

原因

直接原因

  • 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`.

結論

英語でも、しっかりメッセージは読もう。

kuze_add9kuze_add9

リトライ

もう一度、正しいほうの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も問題ないことを確認しました。

kuze_add9kuze_add9

でも・・・コメント末尾に書いてたから、分かんなかった。。。
と後で思いました(笑)

このスクラップは3時間前にクローズされました