1. Create a link
1.1 Syntax
- grammar
func NewClient(cfg Config) (Client, error)
- Structure
type Config struct { Address string Client * RoundTripper }
- Example
client, err = ({ Address: "http://10.10.182.112:9090", })
1.2 Complete Example
package main import ( "fmt" "/prometheus/client_golang/api" ) func CreatClient() (client , err error) { client, err = ({ Address: "http://10.10.182.112:9090", }) if err != nil { ("Error creating client: %v\n", err) return nil, err } return client, nil } func main() { client, err := CreatClient() if err != nil { ("%+v", err) } if client != nil { ("Client creation successfully") } }
2. Simple query
2.1 Syntax
- Create an API instance
func NewAPI(c Client) API
- Query
func (API) Query(ctx , query string, ts , opts ...Option) (Value, Warnings, error)
- Set timeout in context
func WithTimeout(parent Context, timeout ) (Context, CancelFunc)
- Syntax example
v1api := (Client) ctx := () result, warnings, err := (ctx, "up", (), (5*))
2.2 Complete Example
package main import ( "context" "fmt" "/prometheus/client_golang/api" proV1 "/prometheus/client_golang/api/prometheus/v1" "/prometheus/common/model" "time" ) var Client func init() { Client, _ = CreatClient() } func CreatClient() (client , err error) { client, err = ({ Address: "http://10.10.181.112:9090", }) if err != nil { ("Error creating client: %v\n", err) return nil, err } return client, nil } func Query() (result , err error) { v1api := (Client) ctx, cancel := ((), 10*) defer cancel() result, warnings, err := (ctx, "up", (), (5*)) if err != nil { return nil, err } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } return result, nil } func main() { result, err := Query() if err != nil { ("%q", err) } ("Result:\n%v\n", result) }
3. Range value query
3.1 Syntax
- Range settings
type Range struct { Start, End Step }
Syntax example
r := { Start: ().Add(-), End: (), Step: , }
- Range query
func (API) QueryRange(ctx , query string, r Range, opts ...Option) (Value, Warnings, error)
Syntax example
result, warnings, err := (ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r, (5*))
3.2 Complete Example
package main import ( "context" "fmt" "/prometheus/client_golang/api" proV1 "/prometheus/client_golang/api/prometheus/v1" "/prometheus/common/model" "time" ) var Client func init() { Client, _ = CreatClient() } func CreatClient() (client , err error) { client, err = ({ Address: "http://10.10.181.112:9090", }) if err != nil { ("Error creating client: %v\n", err) return nil, err } return client, nil } func QueryRange() (result , err error) { v1api := (Client) //ctx := () ctx, cancel := ((), 10*) r := { Start: ().Add(-), End: (), Step: , } defer cancel() result, warnings, err := (ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r, (5*)) if err != nil { return nil, err } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } return result, nil } func main() { result, err := QueryRange() if err != nil { ("%q", err) } ("Result:\n%v\n", result) }
4. Get the metric name and label
4.1 Syntax
- grammar
func (API) Series(ctx , matches []string, startTime , endTime ) ([], Warnings, error)
- Syntax example
lbls, warnings, err := (ctx, []string{ "{__name__=~\".+\",job=\"prometheus\"}", }, ().Add(-), ())
illustrate:
- You can write multiple items in the array
-
__name__
Represents the indicator name, and regular matching is supported after the equal sign. - You can connect some labels later, and the regularity is also supported.
For example, in the examplejob=\"prometheus\"
, is the job name we wrote in the prometheus configuration file.
- LabelSet
type LabelSet map[LabelName]LabelValue
You can see that the LabelSet is actually a map, so we can only print the metric name in the example:
for _, lbl := range lbls { (lbl["__name__"]) }
4.1 Complete example (get all data entries)
package main import ( "context" "fmt" "os" "time" "/prometheus/client_golang/api" proV1 "/prometheus/client_golang/api/prometheus/v1" ) var Client func init() { Client, _ = CreatClient() } func CreatClient() (client , err error) { client, err = ({ Address: "http://10.10.181.112:9090", }) if err != nil { ("Error creating client: %v\n", err) return nil, err } return client, nil } func ExampleAPI_series() { v1api := (Client) ctx, cancel := ((), 10*) defer cancel() lbls, warnings, err := (ctx, []string{ //"{__name__=~\"scrape_.+\",job=\"node\"}", "{__name__=~\".+\"}", }, ().Add(-), ()) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:", len(lbls)) for _, lbl := range lbls { //(lbl["__name__"]) (lbl) } } func main() { ExampleAPI_series() }
【Official examples attached】
/prometheus/client_golang/blob/main/api/prometheus/v1/example_test.go
package v1_test import ( "context" "fmt" "net/http" "os" "time" "/prometheus/common/config" "/prometheus/client_golang/api" v1 "/prometheus/client_golang/api/prometheus/v1" ) func ExampleAPI_query() { client, err := ({ Address: ":9090", }) if err != nil { ("Error creating client: %v\n", err) (1) } v1api := (client) ctx, cancel := ((), 10*) defer cancel() result, warnings, err := (ctx, "up", (), (5*)) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:\n%v\n", result) } func ExampleAPI_queryRange() { client, err := ({ Address: ":9090", }) if err != nil { ("Error creating client: %v\n", err) (1) } v1api := (client) ctx, cancel := ((), 10*) defer cancel() r := { Start: ().Add(-), End: (), Step: , } result, warnings, err := (ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r, (5*)) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:\n%v\n", result) } type userAgentRoundTripper struct { name string rt } // RoundTrip implements the interface. func (u userAgentRoundTripper) RoundTrip(r *) (*, error) { if () == "" { // The specification of says that it shouldn't mutate // the request so make a copy of since this is all that is // modified. r2 := new() *r2 = *r = make() for k, s := range { [k] = s } ("User-Agent", ) r = r2 } return (r) } func ExampleAPI_queryRangeWithUserAgent() { client, err := ({ Address: ":9090", RoundTripper: userAgentRoundTripper{name: "Client-Golang", rt: }, }) if err != nil { ("Error creating client: %v\n", err) (1) } v1api := (client) ctx, cancel := ((), 10*) defer cancel() r := { Start: ().Add(-), End: (), Step: , } result, warnings, err := (ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:\n%v\n", result) } func ExampleAPI_queryRangeWithBasicAuth() { client, err := ({ Address: ":9090", // We can use amazing /prometheus/common/config helper! RoundTripper: ("me", "defintely_me", "", ), }) if err != nil { ("Error creating client: %v\n", err) (1) } v1api := (client) ctx, cancel := ((), 10*) defer cancel() r := { Start: ().Add(-), End: (), Step: , } result, warnings, err := (ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:\n%v\n", result) } func ExampleAPI_queryRangeWithAuthBearerToken() { client, err := ({ Address: ":9090", // We can use amazing /prometheus/common/config helper! RoundTripper: ("Bearer", "secret_token", ), }) if err != nil { ("Error creating client: %v\n", err) (1) } v1api := (client) ctx, cancel := ((), 10*) defer cancel() r := { Start: ().Add(-), End: (), Step: , } result, warnings, err := (ctx, "rate(prometheus_tsdb_head_samples_appended_total[5m])", r) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:\n%v\n", result) } func ExampleAPI_series() { client, err := ({ Address: ":9090", }) if err != nil { ("Error creating client: %v\n", err) (1) } v1api := (client) ctx, cancel := ((), 10*) defer cancel() lbls, warnings, err := (ctx, []string{ "{__name__=~\"scrape_.+\",job=\"node\"}", "{__name__=~\"scrape_.+\",job=\"prometheus\"}", }, ().Add(-), ()) if err != nil { ("Error querying Prometheus: %v\n", err) (1) } if len(warnings) > 0 { ("Warnings: %v\n", warnings) } ("Result:") for _, lbl := range lbls { (lbl) } }
This is the article about golang obtaining prometheus data (prometheus/client_golang package) introduced here. For more related golang obtaining prometheus content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!