跳到主要内容

查询结果转换

在 Grafana Alloy 查询语言中,查询结果转换是一个强大的功能,它允许你在查询返回的数据上进行进一步的操作和转换。通过转换查询结果,你可以更好地适应特定的分析需求,或者为数据可视化准备更合适的数据格式。

什么是查询结果转换?

查询结果转换是指在查询返回的数据集上应用一系列操作,以改变数据的结构、格式或内容。这些操作可以包括过滤、排序、聚合、重命名字段等。通过转换查询结果,你可以更灵活地处理数据,使其更适合你的分析或可视化需求。

基本转换操作

1. 过滤数据

过滤是最常见的转换操作之一。它允许你根据特定条件筛选出符合要求的数据。例如,假设你有一个包含多个时间序列的数据集,你可以过滤出某个特定时间范围内的数据。

alloy
filter(metric_name == "cpu_usage" and time > now() - 1h)

输入数据:

json
[
{"time": "2023-10-01T12:00:00Z", "metric_name": "cpu_usage", "value": 75},
{"time": "2023-10-01T12:30:00Z", "metric_name": "cpu_usage", "value": 80},
{"time": "2023-10-01T13:00:00Z", "metric_name": "memory_usage", "value": 50}
]

输出数据:

json
[
{"time": "2023-10-01T12:00:00Z", "metric_name": "cpu_usage", "value": 75},
{"time": "2023-10-01T12:30:00Z", "metric_name": "cpu_usage", "value": 80}
]

2. 排序数据

排序操作允许你根据某个字段对数据进行升序或降序排列。这在需要按时间或数值顺序查看数据时非常有用。

alloy
sort(value, desc)

输入数据:

json
[
{"time": "2023-10-01T12:00:00Z", "value": 75},
{"time": "2023-10-01T12:30:00Z", "value": 80},
{"time": "2023-10-01T13:00:00Z", "value": 50}
]

输出数据:

json
[
{"time": "2023-10-01T12:30:00Z", "value": 80},
{"time": "2023-10-01T12:00:00Z", "value": 75},
{"time": "2023-10-01T13:00:00Z", "value": 50}
]

3. 聚合数据

聚合操作允许你将多个数据点合并为一个或多个汇总值。常见的聚合操作包括求和、平均值、最大值、最小值等。

alloy
aggregate(sum, value)

输入数据:

json
[
{"time": "2023-10-01T12:00:00Z", "value": 75},
{"time": "2023-10-01T12:30:00Z", "value": 80},
{"time": "2023-10-01T13:00:00Z", "value": 50}
]

输出数据:

json
[
{"sum": 205}
]

实际案例

假设你正在监控一个 Web 服务器的响应时间,并且你希望分析过去一小时内响应时间超过 500 毫秒的请求。你可以使用以下查询和转换操作来实现这一目标:

alloy
filter(metric_name == "response_time" and value > 500 and time > now() - 1h) | sort(time, asc)

输入数据:

json
[
{"time": "2023-10-01T12:00:00Z", "metric_name": "response_time", "value": 450},
{"time": "2023-10-01T12:30:00Z", "metric_name": "response_time", "value": 550},
{"time": "2023-10-01T13:00:00Z", "metric_name": "response_time", "value": 600}
]

输出数据:

json
[
{"time": "2023-10-01T12:30:00Z", "metric_name": "response_time", "value": 550},
{"time": "2023-10-01T13:00:00Z", "metric_name": "response_time", "value": 600}
]

总结

查询结果转换是 Grafana Alloy 查询语言中的一个重要功能,它允许你在查询返回的数据上进行各种操作,以适应不同的分析和可视化需求。通过过滤、排序、聚合等操作,你可以更灵活地处理数据,使其更适合你的特定场景。

附加资源

练习

  1. 编写一个查询,过滤出过去 24 小时内 CPU 使用率超过 90% 的数据点,并按时间升序排列。
  2. 编写一个查询,计算过去一小时内内存使用率的平均值。
提示

在练习中,尝试使用不同的转换操作,如 filtersortaggregate,以熟悉它们的使用方法。