🔍

golang の net/http で DNS 名前解決した結果をトレースする

2022/03/23に公開

tl; dr

golang の net/http でアクセスしている先が Route 53 レコードセットを使って Blue/Green Deployment になっている。
ちゃんとアクセス先が切り替わっているかどうかを知るために、アプリケーションログにホスト名を名前解決した結果を残したい。

実際のコード

net/http/httptrace を使うんじゃ。

    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        panic(err)
    }

    clientTrace := &httptrace.ClientTrace{
        DNSDone: func(dnsDoneInfo httptrace.DNSDoneInfo) {
            fmt.Println("DNSDoneInfo: ")
            for _, v := range dnsDoneInfo.Addrs {
                fmt.Println(v.String());
            }
        },
    }
    ctx := httptrace.WithClientTrace(context.Background(), clientTrace)
    req = req.WithContext(ctx)
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()

References

https://pkg.go.dev/net/http/httptrace

Discussion