博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker监控方案(TIG)的研究与实践之Influxdb
阅读量:6250 次
发布时间:2019-06-22

本文共 5332 字,大约阅读时间需要 17 分钟。

hot3.png

前言:

Influxdb也是有influxdata公司(www.influxdata.com )开发的用于数据存储的时间序列数据库.可用于数据的时间排列。在整个TIG(Telegraf+influxdb+grafana)方案中,influxdb可算作一个中间件,主要负责原始数据的存储,并按照时间序列进行索引构建以提供时间序列查询接口。在整个TIG方案中,应该先构建的就是Influxdb。

Influxdb研究与实践:

influxdb介绍:

使用TSM(Time Structured Merge)存储引擎,允许高摄取速度和数据压缩; 

使用go编写,无需其他依赖; 
简单,高性能写查询httpAPI接口; 
支持其他数据获取协议的插件,比如graphite,collected,OpenTSDB; 
使用relay构建高可用;
扩展的类sql语言,很容易查询汇总数据; 
tag的支持,可用让查询变的更加高效和快速; 
保留策略有效地自动淘汰过期的数据; 
持续所产生的自动计算的数据会使得频繁的查询更加高效; 
web管理页面的支持

下载安装:

github: 源码编译 

官网下载: 
Centos系列:wget && sudo yum localinstall influxdb-1.0.0.x86_64.rpm 
源码包系列:wget && tar xvfz influxdb-1.0.0_linux_amd64.tar.gz 
docker系列:docker pull influxdb 
安装手册:

配置:

#cat /etc/influxdb/influxdb.confreporting-disabled = false[registration][meta]dir = "/var/lib/influxdb/meta"hostname = "10.0.0.2"    #此hostname必须写本机,否则无法连接到数据操作的APIbind-address = ":8088"retention-autocreate = trueelection-timeout = "1s"heartbeat-timeout = "1s"leader-lease-timeout = "500ms"commit-timeout = "50ms"cluster-tracing = false[data]dir = "/var/lib/influxdb/data"max-wal-size = 104857600 # Maximum size the WAL can reach before a flush. Defaults to 100MB.wal-flush-interval = "10m" # Maximum time data can sit in WAL before a flush.wal-partition-flush-delay = "2s" # The delay time between each WAL partition being flushed.wal-dir = "/var/lib/influxdb/wal"wal-logging-enabled = true[hinted-handoff]enabled = truedir = "/var/lib/influxdb/hh"max-size = 1073741824max-age = "168h"retry-rate-limit = 0retry-interval = "1s"retry-max-interval = "1m"purge-interval = "1h"[admin]enabled = truebind-address = ":8083"https-enabled = falsehttps-certificate = "/etc/ssl/influxdb.pem"[http]enabled = truebind-address = ":8086"auth-enabled = falselog-enabled = truewrite-tracing = falsepprof-enabled = falsehttps-enabled = falsehttps-certificate = "/etc/ssl/influxdb.pem"[opentsdb]enabled = false[collectd]enabled = false

注意:influxdb服务会启动三个端口:8086为服务的默认数据处理端口,主要用来influxdb数据库的相关操作,可提供相关的API;8083为管理员提供了一个可视化的web界面,用来为用户提供友好的可视化查询与数据管理;8088主要为了元数据的管理。需要注意的是,influxdb默认是需要influxdb用户启动,且数据存放在/var/lib/influxdb/下面,生产环境需要注意这个。

启动:

和telegraf启动方式一样,可以使用init.d或者systemd进行管理influxdb 

注意,启动之后需要查看相关的端口是否正在监听,并检查日志确保服务正常启动

使用:

如果说使用telegraf最核心的部分在配置,那么influxdb最核心的就是SQL语言的使用了。influxdb默认支持三种操作方式: 

登录influxdb的shell中操作:

创建数据库:create database mydb创建用户:create user "bigdata" with password 'bigdata' with all privileges查看数据库:show databases;数据插入:insert bigdata,host=server001,regin=HC load=88切换数据库: use mydb查看数据库中有哪些measurement(类似数据库中的表):show measurements查询:select * from cpu limit 2查询一小时前开始到现在结束的:#select load from cpu where time > now() - 1h查询从历史纪元开始到1000天之间:#select load from cpu where time < now() + 1000d查找一个时间区间:#select load from cpu where time > '2016-08-18' and time < '2016-09-19'查询一个小时间区间的数据,比如在September 18, 2016 21:24:00:后的6分钟:#select load from cpu where time > '2016-09-18T21:24:00Z' +6m使用正则查询所有measurement的数据:#select * from /.*/ limit 1#select * from /^docker/ limit 3#select * from /.*mem.*/ limit 3正则匹配加指定tag:(=~ !~)#select * from cpu where "host" !~ /.*HC.*/ limit 4#SELECT * FROM "h2o_feet" WHERE ("location" =~ /.*y.*/ OR "location" =~ /.*m.*/) AND "water_level" > 0 LIMIT 4排序:group by的用法必须得是在复合函数中进行使用#select count(type) from events group by time(10s)#select count(type) from events group by time(10s),type给查询字段做tag:#select count(type) as number_of_types group by time(10m)#select count(type) from events group by time(1h) where time > now() - 3h使用fill字段:#select count(type) from events group by time(1h) fill(0)/fill(-1)/fill(null) where time > now() - 3h数据聚合:select count(type) from user_events merge admin_events group by time(10m)

使用API进行操作数据:

创建数据库:curl -G "http://localhost:8086/query" --data-urlencode "q=create database mydb"插入数据:curl -XPOST 'http://localhost:8086/write?db=mydb' -d 'biaoge,name=xxbandy,xingqu=coding age=2'curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server02 value=0.67cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'将sql语句写入文件,并通过api插入:#cat sql.txtcpu_load_short,host=server02 value=0.67cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257#curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @cpu_data.txt查询数据:(--data-urlencode "epoch=s" 指定时间序列 "chunk_size=20000" 指定查询块大小)# curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=ydb" --data-urlencode "q=select * from biaoge where xingqu='coding'"数据分析:#curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=mydb" --data-urlencode "q=select mean(load) from cpu"#curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=mydb" --data-urlencode "q=select load from cpu"可以看到load的值分别是42 78 15.4;用mean(load)求出来的值为45,13curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=ydb" --data-urlencode "q=select mean(load) from cpu where host='server01'"

使用influxdb提供的web界面进行操作:

这里只是简单的介绍了influxdb的使用,后期如果想在grafana中汇聚并完美地展示数据,可能需要熟悉influxdb的各种查询语法。(其实就是sql语句的一些使用技巧,聚合函数的使用,子查询等等)

 

注意:原创著作,转载请联系作者!

转载于:https://my.oschina.net/xxbAndy/blog/751329

你可能感兴趣的文章
数据丢失与重复_消息队列重复消费和数据丢失问题(石衫面试突击学习笔记)...
查看>>
摄像头 火狐_为什么谷歌浏览器打不开电脑摄像头?
查看>>
两张图片合成一张_ps技巧:大光比照片后期曝光合成技法
查看>>
码条形码属性_条码生成器如何批量生成code 11码
查看>>
和lua的效率对比测试_不同编程语言能耗不同?看这27种语言对比!
查看>>
让某控件失去焦点_常用基本控件测试用例(一)
查看>>
天气模式_今年台风活跃期即将结束!下周天气将开启“大变脸”模式
查看>>
扫码枪关闭常亮模式_生意好时最怕收银出故障,这几个扫码枪的常见问题你一定要知道...
查看>>
如何双击打开vivado工程_利用TCL重建vivado工程
查看>>
mysql的引双向链表_Mysql高手系列 - 第22篇:mysql索引原理详解(高手必备技能)
查看>>
mysql in 查询改成_MySQL not in嵌套查询改写成外连接方式
查看>>
mysql community安装_MySQL Community Server 5.7安装详细步骤
查看>>
python处理多行字符串_python多行字符串
查看>>
java冒泡排序_用java写个冒泡排序?
查看>>
linux 开发java_做开发环境的操作系统是 Linux 好还是 Windows 好?
查看>>
java正文提取_Java网页正文提取工具
查看>>
blocked java_使用jstack排查多线程死锁、阻塞
查看>>
centos7 nohup无法保持_CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)...
查看>>
显示图片java代码_用于显示下载或是显示图片的一段代码
查看>>
java scrip_js java scrip基本语法
查看>>