@lijianying10
2017-07-14T08:36:30.000000Z
字数 2432
阅读 987
由于一些业务需要输出数据进入Influxdb直接使用ESM告警,因此需要一种手段直接绕过ESM-agent直接输入到Influxdb数据库。基于此,esm仅仅提供writers配置,用户获取到writers的配置后,自行向esm-gateway写入数据。
Unix Socket技术,用户通过unix socket请求向esm-agent请求writers的配置esm-agent返回writers配置给用户writers配置向esm-gateway写数据并注册schema通过 UnixSock 获取 Writers 配置
curl --unix-socket /var/run/esm-agent/esm-agent.sock http:/writer
package mainimport ("context""fmt""io""net""net/http""os")func main() {client := http.Client{Transport: &http.Transport{DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {return net.Dial("unix", "/var/run/esm-agent/esm-agent.sock")},},}resp, err := client.Get("http://localhost/writer")if err != nil {fmt.Println("error: " + err.Error())os.Exit(1)}io.Copy(os.Stdout, resp.Body)}
依赖类库requests_unixsocket
推荐安装方式:
pip install requests_unixsocket
以下为执行代码:
import requests_unixsocketif __name__=="__main__":url = "http+unix://%2Fvar%2Frun%2Fesm-agent%2Fesm-agent.sock"res = requests_unixsocket.get(url+"/writer")print res.text
[{"database": "esm","addr": "esm.gateway.wg.elenet.me:9100","payload_size": 1024,"precision": "s"}]
官方demo:
import ("time""log"client "github.com/influxdata/influxdb/client/v2")func writePoints(clnt client.Client) {sampleSize := 1000bp, err := client.NewBatchPoints(client.BatchPointsConfig{Database: "systemstats",Precision: "us",})if err != nil {log.Fatal(err)}rand.Seed(time.Now().UnixNano())for i := 0; i < sampleSize; i++ {regions := []string{"us-west1", "us-west2", "us-west3", "us-east1"}tags := map[string]string{"cpu": "cpu-total","host": fmt.Sprintf("host%d", rand.Intn(1000)),"region": regions[rand.Intn(len(regions))],}idle := rand.Float64() * 100.0fields := map[string]interface{}{"idle": idle,"busy": 100.0 - idle,}pt, err := client.NewPoint("cpu_usage",tags,fields,time.Now(),)if err != nil {log.Fatal(err)}bp.AddPoint(pt)}if err := clnt.Write(bp); err != nil {log.Fatal(err)}}
依赖类库influxdb
推荐安装方式:
pip install influxdb
以下为插入的执行代码:
from influxdb import InfluxDBClientjson_body = [{"measurement": "cpu_load_short","tags": {"host": "server01","region": "us-west"},"time": "2009-11-10T23:00:00Z","fields": {"value": 0.64}}]client = InfluxDBClient('localhost', 8086, 'root', 'root', 'example')client.write_points(json_body)
全小写,用_分割单词
name必须要明确!
tag 必须包含 host 和 hostgroup 两个,其余可以有自定义tag,但是必须明确类型数量,且不能过多!
host为主机名
hostgroup为一个或多个appid,用,隔开!