在 CrateDB 中存储性能数据的最佳实践是什么?
What's the best practice to store performance data in CrateDB?
我的应用程序将性能时间序列数据存储在 CrateDB 中,为了正确设置,我有几个问题,因为它每天大约有 7200 万条记录并且应该适当扩展:)。我的目标是使用 Grafana 可视化生成的数据,目前我有以下结构:
CREATE TABLE metrics (
ts TIMESTAMP,
hostname STRING,
servicename STRING,
perfdata OBJECT(DYNAMIC)
)
// for example
{
"hostname": "localhost",
"servicename": "ping",
"timestamp": 1483699527,
"perfdata": {
"rta": {
"current": 0.5,
"unit": "ms",
"warn": 100,
"critical": 200
},
"pl": {
"current": 0,
"unit": "%",
"warn": 10,
"crit": 20
}
}
}
重要的位是 host-/servicename、指标的名称和值,以及时间戳。这也是替代模式:
CREATE TABLE metrics (
ts TIMESTAMP,
hostname STRING,
servicename STRING,
metric OBJECT(DYNAMIC) AS (
unit STRING,
name STRING,
value DOUBLE,
)
)
那么哪一种是存储数据的首选方式?我也需要分区吗?我的聚合通常显示最后 24 小时,很少显示上个月...
谢谢!
一般来说,我建议使用 second table 模式,因为它更简单并且可以让您捕获原始数据(而不是 pre-assembled) 并根据您的实际需要进行聚合。
不过,这个问题比较棘手,因为它很大程度上取决于实际需求。因此,从本质上讲,组合模式将使 更新变得棘手 (对象只能被替换而不能更新)因此需要一起发送数据(并且可能以相同的速度收集?)。
除此之外,设置 partitioning 可能会有用。
这可以加快查询速度并允许 change the number of shards for future partitions(并允许您更好地扩展)。
通常的做法是按月或周进行分区,在某些情况下也按天进行分区。
但必须注意防止分片数量激增,因为
分片也需要系统资源。
CrateDB 与 Grafana 配合得很好,这要归功于 datasource plugin :)
现在才看到这个,我一直在玩 perdata (nagios) 和 cratedb。
我们测试的(基于 mongodb 时间序列演示)是每小时存储并让 perfdata[ts]={perf object}
(我们确实测试了 perfdata['minute']['second']={})
24 小时架构将是 perfdata['hour']['minute']
因此,通过在 host/service/ 上定义一个主键,您可以
'on duplicate key update..'
所以 host/service/小时的查询只是一个查询:-)
我的应用程序将性能时间序列数据存储在 CrateDB 中,为了正确设置,我有几个问题,因为它每天大约有 7200 万条记录并且应该适当扩展:)。我的目标是使用 Grafana 可视化生成的数据,目前我有以下结构:
CREATE TABLE metrics (
ts TIMESTAMP,
hostname STRING,
servicename STRING,
perfdata OBJECT(DYNAMIC)
)
// for example
{
"hostname": "localhost",
"servicename": "ping",
"timestamp": 1483699527,
"perfdata": {
"rta": {
"current": 0.5,
"unit": "ms",
"warn": 100,
"critical": 200
},
"pl": {
"current": 0,
"unit": "%",
"warn": 10,
"crit": 20
}
}
}
重要的位是 host-/servicename、指标的名称和值,以及时间戳。这也是替代模式:
CREATE TABLE metrics (
ts TIMESTAMP,
hostname STRING,
servicename STRING,
metric OBJECT(DYNAMIC) AS (
unit STRING,
name STRING,
value DOUBLE,
)
)
那么哪一种是存储数据的首选方式?我也需要分区吗?我的聚合通常显示最后 24 小时,很少显示上个月...
谢谢!
一般来说,我建议使用 second table 模式,因为它更简单并且可以让您捕获原始数据(而不是 pre-assembled) 并根据您的实际需要进行聚合。
不过,这个问题比较棘手,因为它很大程度上取决于实际需求。因此,从本质上讲,组合模式将使 更新变得棘手 (对象只能被替换而不能更新)因此需要一起发送数据(并且可能以相同的速度收集?)。
除此之外,设置 partitioning 可能会有用。 这可以加快查询速度并允许 change the number of shards for future partitions(并允许您更好地扩展)。 通常的做法是按月或周进行分区,在某些情况下也按天进行分区。 但必须注意防止分片数量激增,因为 分片也需要系统资源。
CrateDB 与 Grafana 配合得很好,这要归功于 datasource plugin :)
现在才看到这个,我一直在玩 perdata (nagios) 和 cratedb。 我们测试的(基于 mongodb 时间序列演示)是每小时存储并让 perfdata[ts]={perf object} (我们确实测试了 perfdata['minute']['second']={})
24 小时架构将是 perfdata['hour']['minute']
因此,通过在 host/service/ 上定义一个主键,您可以 'on duplicate key update..'
所以 host/service/小时的查询只是一个查询:-)