mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(instrumentation): influxdb is working, now need to find a way to better support tags, #4696
This commit is contained in:
parent
6b2a4fe8e8
commit
2a9b51d836
@ -22,12 +22,12 @@ func CreateGraphitePublisher() (*GraphitePublisher, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
graphiteReceiver := &GraphitePublisher{}
|
||||
graphiteReceiver.Protocol = "tcp"
|
||||
graphiteReceiver.Address = graphiteSection.Key("address").MustString("localhost:2003")
|
||||
graphiteReceiver.Prefix = graphiteSection.Key("prefix").MustString("service.grafana.%(instance_name)s")
|
||||
publisher := &GraphitePublisher{}
|
||||
publisher.Protocol = "tcp"
|
||||
publisher.Address = graphiteSection.Key("address").MustString("localhost:2003")
|
||||
publisher.Prefix = graphiteSection.Key("prefix").MustString("service.grafana.%(instance_name)s")
|
||||
|
||||
return graphiteReceiver, nil
|
||||
return publisher, nil
|
||||
}
|
||||
|
||||
func (this *GraphitePublisher) Publish(metrics map[string]interface{}) {
|
||||
|
87
pkg/metrics/publishers/influxdb.go
Normal file
87
pkg/metrics/publishers/influxdb.go
Normal file
@ -0,0 +1,87 @@
|
||||
package publishers
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/log"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/influxdata/influxdb/client"
|
||||
)
|
||||
|
||||
type InfluxPublisher struct {
|
||||
database string
|
||||
tags map[string]string
|
||||
client *client.Client
|
||||
}
|
||||
|
||||
func CreateInfluxPublisher() (*InfluxPublisher, error) {
|
||||
influxSection, err := setting.Cfg.GetSection("metrics.influxdb")
|
||||
if err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
publisher := &InfluxPublisher{
|
||||
tags: make(map[string]string),
|
||||
}
|
||||
|
||||
urlStr := influxSection.Key("url").MustString("localhost:2003")
|
||||
urlParsed, err := url.Parse(urlStr)
|
||||
|
||||
if err != nil {
|
||||
log.Error(3, "Metics: InfluxPublisher: failed to init influxdb publisher", err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
publisher.database = influxSection.Key("database").MustString("grafana_metrics")
|
||||
username := influxSection.Key("User").MustString("grafana")
|
||||
password := influxSection.Key("Password").MustString("grafana")
|
||||
|
||||
publisher.client, err = client.NewClient(client.Config{
|
||||
URL: *urlParsed,
|
||||
Username: username,
|
||||
Password: password,
|
||||
})
|
||||
|
||||
tagsSec, err := setting.Cfg.GetSection("metrics.influxdb.tags")
|
||||
if err != nil {
|
||||
log.Error(3, "Metics: InfluxPublisher: failed to init influxdb settings no metrics.influxdb.tags section")
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
for _, key := range tagsSec.Keys() {
|
||||
publisher.tags[key.Name()] = key.String()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Error(3, "Metics: InfluxPublisher: failed to init influxdb publisher", err)
|
||||
}
|
||||
|
||||
return publisher, nil
|
||||
}
|
||||
|
||||
func (this *InfluxPublisher) Publish(metrics map[string]interface{}) {
|
||||
bp := client.BatchPoints{
|
||||
Time: time.Now(),
|
||||
Database: this.database,
|
||||
Tags: map[string]string{},
|
||||
}
|
||||
|
||||
for key, value := range this.tags {
|
||||
bp.Tags[key] = value
|
||||
}
|
||||
|
||||
for key, value := range metrics {
|
||||
bp.Points = append(bp.Points, client.Point{
|
||||
Measurement: key,
|
||||
Fields: map[string]interface{}{
|
||||
"value": value,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
_, err := this.client.Write(bp)
|
||||
if err != nil {
|
||||
log.Error(3, "Metrics: InfluxPublisher: publish error", err)
|
||||
}
|
||||
}
|
@ -43,5 +43,12 @@ func readSettings() *MetricSettings {
|
||||
settings.Publishers = append(settings.Publishers, graphitePublisher)
|
||||
}
|
||||
|
||||
if influxPublisher, err := publishers.CreateInfluxPublisher(); err != nil {
|
||||
log.Error(3, "Metrics: Failed to init InfluxDB metric publisher", err)
|
||||
} else if influxPublisher != nil {
|
||||
log.Info("Metrics: Internal metrics publisher InfluxDB initialized")
|
||||
settings.Publishers = append(settings.Publishers, influxPublisher)
|
||||
}
|
||||
|
||||
return settings
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user