InfluxDB 中的连续查询 - 第一部分

导航至

警告!请注意,此博客已超过 1 年,请查看关于 InfluxDB 的最新信息,并阅读 InfluxDB 文档中关于 连续查询的内容。

在应用程序开发中,返回聚合、汇总和计算数据的查询经常被使用。例如,如果您正在构建一个在线仪表板应用程序来报告指标,您可能需要显示汇总数据。这些汇总查询通常计算成本很高,因为它们必须处理大量数据,并且一遍又一遍地运行它们是无法扩展的。现在,如果您可以预先计算并存储聚合查询结果,以便在您需要时随时可用,那么这将显着加快仪表板应用程序中的汇总查询速度,而不会使数据库过载。InfluxDB 的连续查询功能应运而生!

这是帮助您理解 InfluxDB 中连续查询的三部分系列文章的第一篇。在这篇文章中,我们将介绍连续查询的基础知识及其用例。在第二部分中,我们将深入了解连续查询的工作原理,最后在第三部分中,我们将解释如何监控和管理连续查询。

那么,让我们开始吧。

InfluxDB 中连续查询简介

如果您来自 RDBMS 背景,那么连续查询在概念上与物化视图非常相似,其中昂贵的查询结果是预先计算和存储的,而不是在运行时计算的。InfluxDB 中的连续查询功能强大且用途广泛,主要用于改善围绕数据分析的体验,如下所述。

使用连续查询高效查看数据

在仪表板应用程序中,指标数据通常以图形的形式呈现。通常,这些指标在显示之前会进行降采样。这意味着,它们要么围绕特定的时间间隔进行聚合,要么只是在指标序列中选择第 N 个数据点。

借助 InfluxDB 中的连续查询,您可以对应用程序数据进行降采样,并改善用户的最终用户体验。例如,如下面的图中所示,输入图表被降采样,输出捕获输入图表中的每第 10 个点。

downsample

例如,使用下面描述的连续查询,InfluxDB 对 CPU 负载指标进行降采样,并保留每 15 分钟一个按服务器区域分组的平均数据点。

CREATE CONTINUOUS QUERY "downsampled_cpu_load"
ON database_name
BEGIN
  SELECT mean(value) as value,
  INTO "downsampled.cpu_load"
  FROM cpu_load
  GROUP BY time(15m), region
END

当您在当前或最近的过去检测问题和解决问题时,高分辨率数据非常有用,但是随着数据老化,并且您不需要那么精细的细节时,您可以使用连续查询来降采样并降低数据分辨率(每天或每周)。

使用连续查询高效分析数据

除了降采样数据外,连续查询还可以转换和隔离来自一个序列的数据到一个或多个其他依赖序列中,以便更高效地访问。当您想要按时间段“汇总”时间序列数据时,它们也很有用(例如,获取 5 分钟、10 分钟和 15 分钟时间段内 99% 的服务时间)。

例如,假设您正在将传入的 HTTP 请求捕获为 http_requests 序列,并希望计算您已收集的序列中传入请求的 95% 百分位数和平均持续时间。您可以使用下面的连续查询来解决这个问题 -

CREATE CONTINUOUS QUERY "transformed_http_requests"
ON database_name
BEGIN
  SELECT mean(duration) as mean,
	  PERCENTILE(duration, 95.0) as p95
  FROM http_requests
  GROUP BY time(15m), http_status
END

在下面的下一个示例中,可以在连续查询的 FROM 子句中使用正则表达式来收集从所有测量中选择的点,并将它们写入具有相同测量名称的 policy1 保留策略中。

CREATE CONTINUOUS QUERY myquery ON testdb 
	BEGIN 
   		SELECT mean(value) INTO "policy1".:MEASUREMENT 
FROM /.*/ 
GROUP BY time(1h) 
END

在您的应用程序中使用连续查询

要开始使用连续查询,您需要在服务器上创建一个连续查询。可以在 InfluxDB 中通过针对服务器的查询端点运行 CREATE CONTINUOUS QUERY 语句来创建连续查询。

使用 curl,您可以使用以下命令在 InfluxDB 中创建连续查询

curl -G 'http://localhost:8086/query' --data-urlencode 'q=CREATE CONTINUOUS QUERY ...'

创建后,连续查询将作为集群元数据的一部分持久化,并且它们会随着数据的收集而定期运行。

新的连续查询引擎

InfluxDB v0.9 在保留、集群和 InfluxQL 语言方面进行了一些重大的架构更改。因此,连续查询引擎必须重新设计,并且 v0.9 中的重写引入了与先前版本 (v0.8) 相比的一些更改。这些更改在下表中捕获。

[table id=2 /]

结论

在今天的文章中,我们仅触及了连续查询的表面。要了解有关连续查询在幕后如何工作或如何管理连续查询的更多信息,请继续关注 InfluxDB 中连续查询的第二部分和第三部分。

在那之前,我们希望您注册免费的 14 天托管 InfluxDB 试用版并开始使用!

grafana