はじめに
こちらは「Applibot Advent Calendar 2022」8日目の記事になります.
概要
アプリボットでSREをやっています。
SREといいつつ、アプリケーションコードを書いているわけではないは恥ずかしいところですが、
社内プロジェクトでのgo言語採用も増えたこともあり、自身でも軽くスクリプトを書く際にもシェルスクリプト中心からgo言語へシフトしています。
今回はcurlを使ったスクリプトを作成したい時に便利だった、PostmanのCode snippet機能の紹介をさせていただきます。
ユースケース
弊社ではモニタリングを全てdatadogへ寄せています。
その中でlogsの集計結果をAPIから取得し、レポート的なのを手元で作成しようとした際の流れになります。
1.datadogのログ検索結果をAPIで取得
以下のようにログでリストを出しているが、その結果をAPIで取得したい。
SDK使ってという正攻法もあるが、一番簡単に結果取得できるのはこの方法。
以下のようにDD_API_KEY
、DD_APP_KEY
を設定すれば叩けるcurlコマンドをだしてくれる。
クエリもそのまま出してくれるので分かりやすくて嬉しい。
curl -X POST "https://api.datadoghq.com/api/v2/logs/analytics/aggregate" -H "Content-Type: application/json" -H "DD-API-KEY: ${DD_API_KEY}" -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" -d @- << EOF
{"compute":[{"metric":"count","aggregation":"count","type":"total"}],"filter":{"query":"service:(fluentd OR game) @table:log_access @log.path:\"/api/hoge\"","from":1669828193155,"to":1670432993155,"indexes":["*"]},"group_by":[{"facet":"@environment","limit":100,"sort":{"metric":"count","aggregation":"count","order":"desc","type":"measure"}}]}
EOF
↑を実行すると、以下のようなjsonのレスポンスが返ってくる。
{
"meta": {
"elapsed": 5,
"request_id": "*****",
"status": "done"
},
"data": {
"buckets": [
{
"computes": {
"c0": 15
},
"by": {
"@environment": "dev**"
}
},
〜 中略 〜
{
"computes": {
"c0": 1
},
"by": {
"@environment": "dev**"
}
}
]
}
}
この結果が取れればやりたいことはできそう。
bashでこのまま書けばサクッとできそうだけど、goでやるとnet/http
あたりだっけ・・・。
さてどうしようか、となったところ素敵なツールがありました。
2. Postmanでgo言語に変換
Postmanというツールを使用します。
What is Postman?
Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.
弊社でもAPIテストツールとして普段から重宝しています。
今回はPostmanのCode snippet機能を使用します。
まずAPIを登録。
datadogからCopy as cURL
で取得したコマンドを見てみます。
curl -X POST "https://api.datadoghq.com/api/v2/logs/analytics/aggregate"
-H "Content-Type: application/json"
-H "DD-API-KEY: ${DD_API_KEY}"
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}"
-d @- << EOF
{"compute":[{"metric":"count","aggregation":"count","type":"total"}],"filter":{"query":"service:(fluentd OR game) @table:log_access @log.path:\"/api/hoge\"","from":1669828193155,"to":1670432993155,"indexes":["*"]},"group_by":[{"facet":"@environment","limit":100,"sort":{"metric":"count","aggregation":"count","order":"desc","type":"measure"}}]}
EOF
これをpostmanへ登録すると以下のようになります。
Headersタブに-Hオプションで指定しているヘッダーの登録(DD-API-KEY、DD-APPLICATION-KEYのVALUEには直接キーを入れてます)
Code snippetボタンを押すと以下のようにウィンドウが現れる。
※今回はGoを選択していますが、様々な言語、フレームワークでの選択が可能
一瞬でgoのコードが出来上がってしまいました。
まとめ
軽いスクリプトを作る時、〇〇でのやり方はわかるけど、〇〇だとどう書くんだっけ・・・というのはあるあるかと思いますが、こういった機能でサクッと出せるのはとても助かる場面は多いのではないでしょうか。
最近話題のChatGPTでも、これ〇〇言語だとどう書くの?と聞いたら答えてくれる時代なので、いろいろなツールを駆使しつつ腕を磨いていけたらと思います。
以上,「Applibot Advent Calendar 2022」 8日目の記事でした.