"github.com/prometheus/client_golang/api"
promv1 "github.com/prometheus/client_golang/api/prometheus/v1"
func NewPromAPI(queryAddress, username, password string) (promv1.API, error) {
promClient, err := api.NewClient(api.Config{
RoundTripper: NewBasicAuthRoundTripper(http.DefaultTransport, username, password),
return promv1.NewAPI(promClient), nil
func NewBasicAuthRoundTripper(next http.RoundTripper, username, password string) http.RoundTripper {
next = http.DefaultTransport
return &basicAuthTransport{
transport: http.DefaultTransport,
basicAuth: "Basic " + base64.StdEncoding.EncodeToString([]byte(username+":"+password)),
type basicAuthTransport struct {
transport http.RoundTripper
func (bat *basicAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header.Add("Authorization", bat.basicAuth)
return bat.transport.RoundTrip(req)
address := "vmp query 地址"
api, err := NewPromAPI(address, username, password)
res, _, err := api.Query(context.TODO(), "up", time.Now())