最近要实现接口监控, 准备用主流的时序数据库influxdb.
基本概念
influxdb的库也 database, 概念和mysql一样
influxdb的表叫 MEASUREMENTS, 意义更贴切, 测量的复数形式.
influxdb的一行数据叫 point, 就像做物理实验的打点, 每个点有其值和属性
influxdb的字段分类为 tag 和 field, field就是值, tag是其属性. 拿接口来说, 字段有 service_name, instance_id, method, handler_name, method, request_url, response_code, content_length, response_size, duration. 显然, 前面7个字段是tag, 特点是一般不是数值变量, 可枚举的, 所以influxdb对tag加了索引. 后面3个是field, 是数值变量, 是范围变化的, 不需要加索引.
插入数据
对于插入数据, influxdb同时提供了单条和批量插入的API. 开始不知道有批量方式, 来一条插一条, influxdb CPU巨高. 后面在官网文档找到了办法, 改用批量插入, 大大降低了CPU占用, 官方推荐是5k~1w条数据一批.
https://docs.influxdata.com/influxdb/v1.7/concepts/glossary/#batch
InfluxData recommends batch sizes of 5,000-10,000 points,
although different use cases may be better served by significantly smaller or larger batches.
influxdb同时提供了HTTP接口和UDP接口. UDP的好处在于减少了HTTP头部的开销, 性能更好
常用命令
库
# 创建数据库
CREATE DATABASE "db_name"
# 显示所有数据库
SHOW DATABASES
# 删除数据库
DROP DATABASE "db_name"
# 使用数据库
USE mydb表
# 显示该数据库中的表
SHOW MEASUREMENTS
# 创建表, 插入数据时会自动创建
# 删除表
DROP MEASUREMENT "measurementName"查看数据保留策略 retention polices
SHOW RETENTION POLICIES ON "testDB"
创建新的Retention Policies并设置为默认值
# DURATION 保留多少天
# REPLICATION 副本数
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 30d REPLICATION 1 DEFAULT
连续查询
# 创建一个连续查询, 每10秒计算一个接口响应耗时平均值到新表
CREATE CONTINUOUS QUERY cq_http_handler_stats_duration ON statsdb BEGIN SELECT mean("duration") INTO http_handler_stats_average_duraion_10s FROM http_handler_stats GROUP BY time(10s) END
# 如果成功创建, 那么过了第一个周期后, SHOW MEASUREMENTS 能看到多了一张表
# 显示创建的连续查询
SHOW CONTINUOUS QUERIES
# 删除
DROP CONTINUOUS QUERY cq_http_handler_stats_duration ON statsdb
图表
grafana 是 influxdb 的良好伴侣, 写个query语句就能得到很炫酷的图形. 比如接口请求量图表按handler_name, response_code, time(10s) group by就得到了.