influxdb
This commit is contained in:
parent
4dba9b162c
commit
bc9c6c5ce3
|
@ -3,8 +3,8 @@ package adapi
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/smbrave/gosdk/util"
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
|
"gitlab.batiao8.com/open/gosdk/util"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package adminapi
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/smbrave/gosdk/util"
|
"gitlab.batiao8.com/open/gosdk/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Application struct {
|
type Application struct {
|
||||||
|
|
|
@ -3,7 +3,7 @@ package adminapi
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/smbrave/gosdk/util"
|
"gitlab.batiao8.com/open/gosdk/util"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
7
go.mod
7
go.mod
|
@ -1,5 +1,8 @@
|
||||||
module github.com/smbrave/gosdk
|
module gitlab.batiao8.com/open/gosdk
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require github.com/spf13/cast v1.5.0
|
require (
|
||||||
|
github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c
|
||||||
|
github.com/spf13/cast v1.5.0
|
||||||
|
)
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package metric
|
package metric
|
||||||
|
|
||||||
import "os"
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
serv *service
|
serv *service
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Address string
|
Address string
|
||||||
|
Username string
|
||||||
|
Password string
|
||||||
|
Database string
|
||||||
Interval int
|
Interval int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,12 +24,16 @@ func Init(c *Config) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
hostname, _ := os.Hostname()
|
serv = NewService(c)
|
||||||
serv = &service{
|
|
||||||
config: c,
|
|
||||||
hostname: hostname,
|
|
||||||
metrics: make(chan *metric, 100000),
|
|
||||||
}
|
|
||||||
go serv.run()
|
go serv.run()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Config) Default() {
|
||||||
|
if c.Database == "" {
|
||||||
|
c.Database = "telegraf"
|
||||||
|
}
|
||||||
|
if c.Interval == 0 {
|
||||||
|
c.Interval = 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,10 +8,11 @@ import (
|
||||||
|
|
||||||
func TestName(t *testing.T) {
|
func TestName(t *testing.T) {
|
||||||
c := NewConfg()
|
c := NewConfg()
|
||||||
c.Address = "https://monitor.batiao8.com"
|
c.Address = "http://14.22.116.197:9305"
|
||||||
|
c.Interval = 1
|
||||||
Init(c)
|
Init(c)
|
||||||
for i := 0; i < 100; i++ {
|
for i := 0; i < 100; i++ {
|
||||||
Metric("test", float64(rand.Int()%100), map[string]string{
|
Metric("test.test.b", float64(rand.Int()%100), map[string]string{
|
||||||
"a": "b",
|
"a": "b",
|
||||||
"c": "d",
|
"c": "d",
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
package metric
|
package metric
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/spf13/cast"
|
influxdb "github.com/influxdata/influxdb1-client"
|
||||||
"io/ioutil"
|
"net/url"
|
||||||
"log"
|
"os"
|
||||||
"net/http"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -22,9 +19,36 @@ type metric struct {
|
||||||
|
|
||||||
type service struct {
|
type service struct {
|
||||||
hostname string
|
hostname string
|
||||||
|
serviceName string
|
||||||
|
hostIp string
|
||||||
|
podIp string
|
||||||
metrics chan *metric
|
metrics chan *metric
|
||||||
megers map[string]*metric
|
megers map[string]*metric
|
||||||
config *Config
|
config *Config
|
||||||
|
client *influxdb.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewService(c *Config) *service {
|
||||||
|
c.Default()
|
||||||
|
hostname, _ := os.Hostname()
|
||||||
|
|
||||||
|
infUrl, _ := url.Parse(c.Address)
|
||||||
|
infCfg := influxdb.NewConfig()
|
||||||
|
infCfg.Username = c.Username
|
||||||
|
infCfg.Password = c.Password
|
||||||
|
infCfg.URL = *infUrl
|
||||||
|
|
||||||
|
client, _ := influxdb.NewClient(infCfg)
|
||||||
|
|
||||||
|
return &service{
|
||||||
|
metrics: make(chan *metric, 100000),
|
||||||
|
hostname: hostname,
|
||||||
|
serviceName: os.Getenv("SERVICE_NAME"),
|
||||||
|
podIp: os.Getenv("POD_IP"),
|
||||||
|
hostIp: os.Getenv("HOST_IP"),
|
||||||
|
config: c,
|
||||||
|
client: client,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) run() {
|
func (s *service) run() {
|
||||||
|
@ -66,51 +90,39 @@ func (s *service) process(m *metric) {
|
||||||
s.megers[key] = m
|
s.megers[key] = m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) defaultTags(tags map[string]string) map[string]string {
|
func (s *service) defaultTags() map[string]string {
|
||||||
if tags == nil {
|
|
||||||
tags = map[string]string{
|
return map[string]string{
|
||||||
"hostname": s.hostname,
|
"hostname": s.hostname,
|
||||||
|
"host_ip": s.hostIp,
|
||||||
|
"pod_ip": s.podIp,
|
||||||
|
"service_name": s.serviceName,
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
tags["hostname"] = s.hostname
|
|
||||||
}
|
|
||||||
return tags
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) report() {
|
func (s *service) report() {
|
||||||
if s.megers == nil {
|
if s.megers == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
metrics := make([]*metric, 0)
|
|
||||||
|
var bp influxdb.BatchPoints
|
||||||
for _, v := range s.megers {
|
for _, v := range s.megers {
|
||||||
v.Tags = s.defaultTags(v.Tags)
|
var p influxdb.Point
|
||||||
metrics = append(metrics, v)
|
p.Measurement = v.Metric
|
||||||
|
p.Tags = v.Tags
|
||||||
|
p.Fields = map[string]interface{}{
|
||||||
|
"value": v.Value,
|
||||||
}
|
}
|
||||||
reqUrl := fmt.Sprintf("%s/opentsdb/put", serv.config.Address)
|
p.Time = time.Unix(v.Timestamp, 0)
|
||||||
|
bp.Points = append(bp.Points, p)
|
||||||
reqBody, _ := json.Marshal(metrics)
|
|
||||||
resp, err := http.Post(reqUrl, "application/json", bytes.NewBuffer(reqBody))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("http.Post error :%s", err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
rspBody, err := ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf(" ioutil.ReadAll error :%s", err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
result := make(map[string]interface{})
|
|
||||||
if err := json.Unmarshal(rspBody, &result); err != nil {
|
|
||||||
log.Printf("json result : %s", string(rspBody))
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fail := cast.ToInt(result["fail"])
|
bp.Database = s.config.Database
|
||||||
if fail != 0 {
|
bp.Tags = s.defaultTags()
|
||||||
log.Printf("http result : %s", string(rspBody))
|
|
||||||
return
|
s.client.Write(bp)
|
||||||
}
|
fmt.Println("ok write")
|
||||||
s.megers = nil
|
s.megers = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/smbrave/gosdk/util"
|
"gitlab.batiao8.com/open/gosdk/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
Loading…
Reference in New Issue