Edited at

運用中のAPIに対するリクエストがこけていた場合にログから抜き出してリトライするワンライナー

More than 5 years have passed since last update.


ユースケース

(自社サービスのドメインがhttp://example.comとして)


  • 特定APIに対するリクエストhttp://example.com/api/v1/itemsが失敗しているようだった。

  • リクエストを再現してみたい/もしくは問題と思われる箇所を修正したので再度リクエストを流したい

ような時。


やってみる


アクセスログ(/var/log/nginx/access.log)

93.184.216.119 - - [08/Apr/2014:11:30:15 +0900] "GET /api/v1/items HTTP/1.1" 500 4373 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"

例えばこんなログがあった場合。


任意のログを抜き出して、リクエストをリトライ

$ cat /var/log/nginx/access.log |grep "/api/v1/items" | awk '{print "curl -i \"http://example.com" $7 "\" >/dev/null"}' | bash

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
105 1270 105 1270 0 0 6337 0 --:--:-- --:--:-- --:--:-- 12828

これで

http://example.com/api/v1/items

のリクエストたちをリトライできます。

見ての通りですが、リトライしたいログの抜き出しパターンの匙加減はgrep "/api/v1/items"にて。

デバッグ時のお供に。