地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Go】DNSサーバに対して指定回数のクエリを投げてレイテンシを測るやつを書いた

github.com

100回投げて99番目に遅いレイテンシやavg timeやmin timeなんかをMackerelで可視化できるやつを書いた。ただ昨日書いた以下のような問題(ハッピーアイボールというらしい)があってやりたいことに対しては2回の問い合わせはオーバーヘッドでしか無いという。

ryuichi1208.hateblo.jp

「Goの標準ライブラリの名前解決が意図した動作をしないなら自分でDNSクライアントを書いちゃえばいいじゃない」って脳内のマリーアントワネットが言っていたのでパケットを作って飛ばす感じにして書いてみた。v2ってディレクトリを掘って作っているがエラーハンドリングもして無ければdecodeして正しいデータの確認もしてないので使い物になるかは怪しい。

github.com

ただこれでAレコードの問い合わせ1回の時間を正確に測ることができるのでちゃんと書けばうまくいくかもしれない。DNSクライアントというかそもそもUDP使って何か書いたこと殆どないのでUDPの勉強も少ししなきゃ。(動かしてstraceしてみて改めてUDPってsend(2)してrecv(2)してるだけなんだなと体験できてこれは良かった)