InfluxDB时序数据库

InfluxData提供的开源方案

开源的几个产品简称TICK. 相对于付费的企业版/云版少了集群和高可用等支持.

我主要使用的Telegraf和InfluxDB, 后两者感觉易用性太差.

展示这部分使用Grafana替代,它自带基本的告警.

  • Telegraf : 性能数据的收集,插件支持丰富
  • InfluxDB: 核心的时序数据库,负责存储
  • Chronograf : 前端图形化展示
  • Kapacitor: 流数据处理,异常检测并触发报警

InfluxDB备忘

几个概念:

  • measurement : 概念上对应SQL表,主索引是时间戳
  • tags : 对应表列,有索引
  • fields : 对应表列,无索引
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.6.1-amd64.deb
sudo dpkg -i influxdb2-2.6.1-amd64.deb

# v1->v2数据迁移
influxd upgrade

# 查看日志
sudo journalctl -u influxdb.service
# 命令行工具
influx
## 性能提高
# 走UDP协议
# insert走批量接口
# 如果内存够大,增加 LRU大小

InfluxQL

show databases;
use telegraf;
SHOW MEASUREMENTS
LIST SERIES

# 有些删除操作需要重启服务以生效
systemctl restart influxd

类SQL查询

# 查询
select * from mem where host='moon'
select \* from /.\*/ order by time desc limit 3
SHOW TAG VALUES FROM "mem" WITH KEY = "host"

# 删除measurement
drop measurement mem
delete from com\_load\_avg_one where time < now() -1h
# 删除数据和序列
DROP SERIES FROM <measurement_name> WHERE <tag_key>='<tag_value>'


# 时间查询, 格式now() 或者2016-11-01 HH:MM:SS

# 注: 操作符和时间之间需要 空格; 时间串需要使用 单引号 "; 如果不指定时间,默认为 00:00:00

# 正则匹配, 支持 measurements 和 tags

/.\*abc.\* / # 包含字符串

/^abc/ # 以指定字符串为开头

/[ab]/ #包含 a 或 b

# WHERE子语句, =~ 匹配, !~ 不匹配

学习资源

  • Jolokia: Remote JMX with JSON over HTTP