最近要实现接口监控, 准备用主流的时序数据库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秒计算一个接口响应耗时平均值到新表 |
图表
grafana 是 influxdb 的良好伴侣, 写个query语句就能得到很炫酷的图形. 比如接口请求量图表按handler_name, response_code, time(10s) group by就得到了.