ubuntu influxDb + grafana 监控系统

来源:互联网 发布:js 数组增加class 编辑:程序博客网 时间:2024/04/28 19:48

1,influxDb 安装

去官网上下载deb的包,直接安装

influxDb 官网地址: https://docs.influxdata.com/influxdb/v1.2/

安装:

sudo dpkg -i influxdb_1.2.2_amd64.deb

启动:

sudo service influxdb start

influxDB 默认使用 8086和8088端口

在终端中命令行输入 influx 就进入influxdb 

例:show databaes;使用



如果想使用influxDb 的web管理界面需要修改一下配置文件 

influxdb 在1.2版本 web管理默认是关闭的

配置文件路径 : /etc/influxdb/influxdb.conf

编辑配置文件 将[admin]下的    #enabled = false; 和 #bind-address = ":8083"

前面的#号去掉并将enabled的值改为true

如图


重启influxdb 

sudo service influxdb restart

在浏览器中输入 localhost:8083 进入web管理页面


influxdb 具体使用详见官方文档

api地址: https://docs.influxdata.com/influxdb/v1.2/tools/api/

值的一提是 influxdb 的一些名词和语法

名词: 

database -> 数据库 

measurement -> 数据库中的表

points -> 表里面的一条数据

points 里的数据包含3种属性 time(添加数据记录的时间 ), tags(标签,作为数据分析时的索引字段),fields(数据字段)

语法  来看下例子:

往表里插入一条数据 

insert req_time,host=server1,interface=useradd value=0.03

这个语法看上去有点奇怪  req_time,host=server1,interface=useradd value=0.03

req_time : 数据表的名字 

host: tag字段 (这条数据来源于server1)

interface: tag字段(这条数据是请求哪个接口生成的)

value:filed字段(存的数据的值)

存入数据表里时会加上一个当前的时间字段

这是influxDB储存数据所采用的是Line Protocol格式

详细文档地址: https://docs.influxdata.com/influxdb/v1.2/write_protocols/line_protocol_tutorial/

如图:



2. grafana的安装

和安装influxDB一样 在官网下安装包使用dpkg命令安装就行以

官网地址: grafana.com

安装后启动 

sudo service grafana-server start

grafana使用的3000端口在浏览输入

http://localhost:3000

默认的用户名和密码都是admin

登录后配置influxdb数据库

data source:



其它功能自已摸索 

往influxDB中插入一些测试数据

插入数据的例子在下文会提到(go语言)

示例图:




3.go写的一个influxDB添加和查询demo

package mainimport ("fmt""github.com/franela/goreq""io/ioutil""math/rand""net/url""time")var (host        = "http://localhost:8086" //influxDb 连接mydb        = "testDb"                //数据库名measurement = "req_time"              //表名)func main() {//每2秒插入一条数据for {addFunc()time.Sleep(2 * time.Second)}//getFunc()//var c = make(chan bool)//c <- true}//添加数据func addFunc() {pn := getRandNum()var _h string = "server2"if pn > 75 {_h = "server1"}//插入数据url := host + "/write?db=" + mydb//host和interface为Tag  value是filedparam := measurement + ",host=" + _h + ",interface=userdel value=" + fmt.Sprintf("%d", pn)byteParam := []byte(param)req, rErr := goreq.Request{Uri:     url,Method:  "POST",Accept:  "application/json",Timeout: 3 * time.Second,Body:    byteParam,}.Do()if rErr != nil {fmt.Println(rErr.Error())}defer req.Body.Close()resBody, rsErr := ioutil.ReadAll(req.Body)if rsErr != nil {fmt.Println("--222----", rsErr.Error())}fmt.Println(resBody, req.Status)fmt.Println(url)fmt.Println(param)}//获取数据func getFunc() {ql := "q=select * from " + measurementencodeQl, _ := url.Parse(ql)requrl := host + "/query?db=" + mydb + "&" + encodeQl.String()gReq, gErr := goreq.Request{Uri:     requrl,Method:  "GET",Timeout: 3 * time.Second,}.Do()if gErr != nil {fmt.Println(gErr.Error())}defer gReq.Body.Close()reqBoby, reqErr := ioutil.ReadAll(gReq.Body)if reqErr != nil {fmt.Println(reqErr.Error())}fmt.Println(gReq.Status)fmt.Println(string(reqBoby))fmt.Println(encodeQl)}//取一个随机数func getRandNum() int {RGET:s2 := rand.NewSource(time.Now().UnixNano())r2 := rand.New(s2)t := r2.Intn(100)if t < 60 {goto RGET}return t}

运行结果:



0 0
原创粉丝点击