Documentation
¶
Overview ¶
Package prometheus implements prometheus client
References:
[Go Reference]: https://pkg.go.dev/badge/github.com/mo-silent/go-devops.svg
Index ¶
- func DataValueVec(name string, label []string) *prometheus.GaugeVec
- type Matrix
- type MatrixResult
- type MetricLabel
- type MetricValues
- type MetricsInterface
- type PromMetrics
- type Prometheus
- func (p *Prometheus) Push(ctx context.Context, pm PushMetrics, addr string) error
- func (p *Prometheus) Query(ctx context.Context, client api.Client, query string, endTime int64) (ResultValues, error)
- func (p *Prometheus) QueryRange(ctx context.Context, client api.Client, query string, r v1.Range, ...) (ResultValues, error)
- type PushMetrics
- type ResultValues
- type Scalar
- type ScalarResult
- type Vector
- type VectorResult
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DataValueVec ¶
func DataValueVec(name string, label []string) *prometheus.GaugeVec
DataValueVec implements a new prometheus metrics that includes label.
Types ¶
type Matrix ¶ added in v1.0.6
type Matrix []MatrixResult
Matrix is a list of time series.
func (Matrix) ConvertByte ¶ added in v1.0.6
type MatrixResult ¶
type MatrixResult struct {
Metric string `json:"metric"`
//Labels []MetricLabel `json:"labels"`
Values []MetricValues `json:"values"`
}
MatrixResult obtains the matrix result from the prometheus query.
type MetricLabel ¶
A MetricLabel is a prometheus metric label structure.
type MetricValues ¶
MetricValues gets the metric value from the prometheus query.
type MetricsInterface ¶
type MetricsInterface interface {
Push(context.Context, PushMetrics, string) error
Query(ctx context.Context, client api.Client, query string, endTime int64) (ResultValues, error)
QueryRange(ctx context.Context, client api.Client, query string, r v1.Range, opts ...v1.Option) (ResultValues, error)
}
MetricsInterface is the interface that implements prometheus push metrics and range queries.
type PromMetrics ¶
type PromMetrics struct {
Values []string // values of metrics label
Data float64 // metrics value
}
PromMetrics is a prometheus metrics values.
type Prometheus ¶
type Prometheus struct{}
Prometheus implements MetricsInterface.
func (*Prometheus) Push ¶
func (p *Prometheus) Push(ctx context.Context, pm PushMetrics, addr string) error
Push implements a new prometheus metrics pushed to PushGateway.
Example ¶
ExamplePrometheus_Push demonstrates how to use Prometheus.Push. Open the link to see an example: https://go.dev/play/p/ViGSBJbtGKz
// prometheus push metrics example
log.SetLevel(log.DebugLevel)
log.SetOutput(os.Stdout)
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()
p := devops.NewDevops().Prometheus()
pm := prometheus.PushMetrics{
Name: "test",
Label: []string{"sample1", "sample2"},
Metrics: []prometheus.PromMetrics{
{
Values: []string{"s1", "s2"},
Data: 99.99,
},
},
}
if err := p.Push(ctx, pm, "localhost:9091"); err != nil {
log.Errorf("push metrics error, err: %v", err)
}
func (*Prometheus) Query ¶ added in v1.0.6
func (p *Prometheus) Query(ctx context.Context, client api.Client, query string, endTime int64) (ResultValues, error)
Example (Scalar) ¶
ExamplePrometheus_Query_vector demonstrates how to query scalar data using Prometheus.Query. Open the link to see an example: https://go.dev/play/p/cbqzfN1JDOE
// An example of how to query Prometheus metrics by range.
log.SetLevel(log.DebugLevel)
log.SetOutput(os.Stdout)
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()
// new prometheus client
client, err := api.NewClient(api.Config{
Address: "http://10.158.215.90:80",
})
if err != nil {
log.Errorf("Error creating client: %v\n", err)
return
}
end := time.Now().UTC().Unix()
p := devops.NewDevops().Prometheus()
res, err := p.Query(ctx, client, "dynatrace_api_latency", end)
if err != nil {
log.Errorf("Error querying Prometheus: %v\n", err)
}
vector, err := res.ConvertByte()
if err != nil {
log.Errorf("Convert matrix result to byte error, err: %v", err)
}
var result prometheus.Vector
if err := jsoniter.Unmarshal(vector, &result); err != nil {
log.Errorf("error jsoniter unmarshal result to prometheus.Matrix, err: %v", err)
}
fmt.Println(result)
Example (Vector) ¶
ExamplePrometheus_Query_vector demonstrates how to query vector data using Prometheus.Query. Open the link to see an example: https://go.dev/play/p/cbqzfN1JDOE
// An example of how to query Prometheus metrics by range.
log.SetLevel(log.DebugLevel)
log.SetOutput(os.Stdout)
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()
// new prometheus client
client, err := api.NewClient(api.Config{
Address: "http://10.158.215.90:80",
})
if err != nil {
log.Errorf("Error creating client: %v\n", err)
return
}
end := time.Now().UTC().Unix()
p := devops.NewDevops().Prometheus()
res, err := p.Query(ctx, client, "dynatrace_api_latency", end)
if err != nil {
log.Errorf("Error querying Prometheus: %v\n", err)
}
vector, err := res.ConvertByte()
if err != nil {
log.Errorf("Convert matrix result to byte error, err: %v", err)
}
var result prometheus.Vector
if err := jsoniter.Unmarshal(vector, &result); err != nil {
log.Errorf("error jsoniter unmarshal result to prometheus.Matrix, err: %v", err)
}
fmt.Println(result)
func (*Prometheus) QueryRange ¶
func (p *Prometheus) QueryRange(ctx context.Context, client api.Client, query string, r v1.Range, opts ...v1.Option) (ResultValues, error)
QueryRange implements prometheus range query.
Example ¶
ExamplePrometheus_QueryRange demonstrates how to use Prometheus.QueryRange. Open the link to see an example: https://go.dev/play/p/32LVSjFs2hU
// An example of how to query Prometheus metrics by range.
log.SetLevel(log.DebugLevel)
log.SetOutput(os.Stdout)
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute)
defer cancel()
// new prometheus client
client, err := api.NewClient(api.Config{
Address: "http://10.158.215.90:80",
})
if err != nil {
log.Errorf("Error creating client: %v\n", err)
return
}
end := time.Now().UTC()
r := v1.Range{
Start: end.Add(-4 * time.Minute),
End: end,
Step: time.Minute,
}
log.Debugf("start: %v, end time: %v", end.Add(-4*time.Minute), end)
p := devops.NewDevops().Prometheus()
res, err := p.QueryRange(ctx, client, "dynatrace_api_latency", r, v1.WithTimeout(5*time.Second))
if err != nil {
log.Errorf("Error querying Prometheus: %v\n", err)
}
matrix, err := res.ConvertByte()
if err != nil {
log.Errorf("Convert matrix result to byte error, err: %v", err)
}
var result prometheus.Matrix
if err := jsoniter.Unmarshal(matrix, &result); err != nil {
log.Errorf("error jsoniter unmarshal result to prometheus.Matrix, err: %v", err)
}
fmt.Println(result)
type PushMetrics ¶
type PushMetrics struct {
Name string // description of metrics name
Label []string // description of metrics label
Metrics []PromMetrics // values of metrics label and metrics value
}
PushMetrics implements a new Prometheus metrics.
type ResultValues ¶ added in v1.0.6
type Scalar ¶ added in v1.0.6
type Scalar ScalarResult
Scalar is scalar result
func (Scalar) ConvertByte ¶ added in v1.0.6
type ScalarResult ¶ added in v1.0.6
type ScalarResult struct {
Value MetricValues `json:"value"`
}
ScalarResult obtains the scalar result from the prometheus query.
type Vector ¶ added in v1.0.6
type Vector []VectorResult
Vector is a list of vector result from the prometheus query
func (Vector) ConvertByte ¶ added in v1.0.6
type VectorResult ¶
type VectorResult struct {
Metric string `json:"metric"`
Values MetricValues `json:"values"`
}
VectorResult obtains the vector result from the prometheus query.