HoraeDB 是一个开放的系统,鼓励合作和创新,允许开发者使用最适合其自身需求的系统。目前 HoraeDB 支持以下系统:
This is the multi-page printable view of this section. Click here to print.
周边生态
- 1: InfluxDB
- 2: OpenTSDB
- 3: Prometheus
1 - InfluxDB
InfluxDB 是一个时间序列数据库,旨在处理高写入和查询负载。它是 TICK 堆栈的一个组成部分。InfluxDB 旨在用作涉及大量时间戳数据的任何用例的后备存储,包括 DevOps 监控、应用程序指标、物联网传感器数据和实时分析。
HoraeDB 支持 InfluxDB v1.8 写入和查询 API。
注意:用户需要将以下配置添加到服务器的配置中才能尝试 InfluxDB 写入/查询。
[server.default_schema_config]
default_timestamp_column_name = "time"
写入
curl -i -XPOST "http://localhost:5440/influxdb/v1/write" --data-binary '
demo,tag1=t1,tag2=t2 field1=90,field2=100 1679994647000
demo,tag1=t1,tag2=t2 field1=91,field2=101 1679994648000
demo,tag1=t11,tag2=t22 field1=90,field2=100 1679994647000
demo,tag1=t11,tag2=t22 field1=91,field2=101 1679994648000
'
Post 的内容采用的是 InfluxDB line protocol 格式。
measurement
将映射到 HoraeDB 中的一个表,在首次写入时 server 会自动进行建表(注意:创建表的 TTL 是 7d,写入超过当前周期数据会被丢弃)。
例如,在上面插入数据时,HoraeDB 中将创建下表:
CREATE TABLE `demo` (
`tsid` uint64 NOT NULL,
`time` timestamp NOT NULL,
`field1` double,
`field2` double,
`tag1` string TAG,
`tag2` string TAG,
PRIMARY KEY (tsid, time),
timestamp KEY (time))
注意事项
- InfluxDB 在写入时,时间戳精度默认是纳秒,HoraeDB 只支持毫秒级时间戳,用户可以通过
precision
参数指定数据精度,HoraeDB 内部会自动转成毫秒精度。 - 暂时不支持诸如
db
等查询参数
查询
|
|
查询结果和 InfluxDB 查询接口一致:
|
|
如何在 Grafana 中使用
HoraeDB 可以用作 Grafana 中的 InfluxDB 数据源。具体方式如下:
- 在新增数据源时,选择 InfluxDB 类型
- 在 HTTP URL 处,输入
http://{ip}:{5440}/influxdb/v1/
。对于本地部署的场景,可以直接输入 http://localhost:5440/influxdb/v1/ Save & test
注意事项
暂时不支持诸如 epoch
, db
等的查询参数
2 - OpenTSDB
OpenTSDB 是基于 HBase 的分布式、可伸缩的时间序列数据库。
写入
HoraeDB 遵循 OpenTSDB put 写入接口。
summary
和 detailed
还未支持。
curl --location 'http://localhost:5440/opentsdb/api/put' \
--header 'Content-Type: application/json' \
-d '[{
"metric": "sys.cpu.nice",
"timestamp": 1692588459000,
"value": 18,
"tags": {
"host": "web01",
"dc": "lga"
}
},
{
"metric": "sys.cpu.nice",
"timestamp": 1692588459000,
"value": 18,
"tags": {
"host": "web01"
}
}]'
metric
将映射到 HoraeDB 中的一个表,在首次写入时 server 会自动进行建表(注意:创建表的 TTL 是 7d,写入超过当前周期数据会被丢弃)。
例如,在上面插入数据时,HoraeDB 中将创建下表:
CREATE TABLE `sys.cpu.nice`(
`tsid` uint64 NOT NULL,
`timestamp` timestamp NOT NULL,
`dc` string TAG,
`host` string TAG,
`value` bigint,
PRIMARY KEY(tsid, timestamp),
TIMESTAMP KEY(timestamp))
ENGINE = Analytic
WITH(arena_block_size = '2097152', compaction_strategy = 'default',
compression = 'ZSTD', enable_ttl = 'true', num_rows_per_row_group = '8192',
segment_duration = '2h', storage_format = 'AUTO', ttl = '7d',
update_mode = 'OVERWRITE', write_buffer_size = '33554432')
查询
暂不支持 OpenTSDB 查询,tracking issue。
3 - Prometheus
Prometheus是一个流行的云原生监控工具,由于其可扩展性、可靠性和可伸缩性,被企业广泛采用。它用于从云原生服务(如 Kubernetes 和 OpenShift)中获取指标,并将其存储在时序数据库中。Prometheus 也很容易扩展,允许用户用其他数据库扩展其特性和功能。
HoraeDB 可以作为 Prometheus 的长期存储解决方案,同时支持远程读取和远程写入 API。
配置
你可以通过在prometheus.yml
中添加以下几行来配置 Prometheus 使用 HoraeDB 作为一个远程存储:
|
|
每一个指标都会对应一个 HoraeDB 中的表:
- 标签(labels)对应字符串类型的
tag
列 - 数据的时间戳对应一个 timestamp 类型的
timestmap
列 - 数据的值对应一个双精度浮点数类型的
value
列
比如有如下 Prometheus 指标:
up{env="dev", instance="127.0.0.1:9090", job="prometheus-server"}
对应 HoraeDB 中如下的表(注意:创建表的 TTL 是 7d,写入超过当前周期数据会被丢弃):
CREATE TABLE `up` (
`timestamp` timestamp NOT NULL,
`tsid` uint64 NOT NULL,
`env` string TAG,
`instance` string TAG,
`job` string TAG,
`value` double,
PRIMARY KEY (tsid, timestamp),
timestamp KEY (timestamp)
);
SELECT * FROM up;
tsid | timestamp | env | instance | job | value |
---|---|---|---|---|---|
12683162471309663278 | 1675824740880 | dev | 127.0.0.1:9090 | prometheus-server | 1 |