在Grafana中进行数据查询和过滤
一、数据查询
(一)选择数据源
- 数据源类型与配置
- 在Grafana中,首先要确保已经正确配置了数据源(如Prometheus、MySQL、Elasticsearch等)。不同的数据源有不同的配置方式。
- 例如,对于Prometheus数据源,在配置时需要指定Prometheus服务器的地址(如
http://prometheus - server:9090
)。一旦数据源配置完成,就可以在面板(Panels)中基于该数据源进行数据查询。
- 在面板中指定数据源
- 当创建或编辑一个面板时,在“Queries”(查询)选项卡中,需要从已配置的数据源中选择要查询的数据源。如果有多个数据源,如既有Prometheus采集的系统性能数据,又有MySQL中的业务数据,要根据面板展示内容选择合适的数据源。
(二)根据数据源查询语言编写查询语句
- Prometheus数据源(PromQL)
- 基本指标查询:如果要查询一个简单的指标,例如Prometheus采集的服务器CPU使用率指标(假设指标名为
cpu_usage_total
),查询语句可能是cpu_usage_total
。 - 聚合查询:若要对多个服务器的CPU使用率进行求和,可以使用
sum(cpu_usage_total)
。如果想计算一段时间内的平均CPU使用率,可以使用avg(cpu_usage_total)
。 - 时间序列操作:对于查看CPU使用率随时间的变化趋势,可能会用到类似
rate(cpu_usage_total[5m])
的查询语句。这里rate
函数用于计算每秒的平均增长率,[5m]
表示计算过去5分钟内的情况。
- 基本指标查询:如果要查询一个简单的指标,例如Prometheus采集的服务器CPU使用率指标(假设指标名为
- MySQL数据源(SQL)
- 基本查询:如果要查询一个名为
orders
表中的订单数量,可以使用SELECT COUNT(*) FROM orders
。 - 条件查询:若要查询特定状态(如已完成)的订单数量,可以是
SELECT COUNT(*) FROM orders WHERE status = 'completed'
。 - 多表查询(关联查询):当有多个相关的表,如
orders
表和customers
表通过customer_id
关联,要查询每个客户的订单数量,可以使用SELECT customers.customer_name, COUNT(orders.order_id) FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id GROUP BY customers.customer_name
。
- 基本查询:如果要查询一个名为
二、数据过滤
(一)在查询语句中添加过滤条件(适用于多种数据源)
- 基于标签过滤(Prometheus)
- 在Prometheus中,指标通常带有标签(Labels)。例如,服务器指标可能带有
server_name
(服务器名称)、environment
(环境,如生产环境或测试环境)等标签。如果要查询特定服务器的CPU使用率,可以使用cpu_usage_total{server_name = 'server - 1'}
。 - 对于多标签过滤,可以同时指定多个条件,如
cpu_usage_total{server_name = 'server - 1', environment = 'production'}
,这样就只查询生产环境下名为server - 1
的服务器的CPU使用率。
- 在Prometheus中,指标通常带有标签(Labels)。例如,服务器指标可能带有
- 基于列值过滤(MySQL)
- 在MySQL数据源中,可以直接在SQL查询语句中使用
WHERE
子句进行过滤。例如,要查询价格大于100的商品信息,可以使用SELECT * FROM products WHERE price > 100
。
- 在MySQL数据源中,可以直接在SQL查询语句中使用
(二)使用仪表板变量进行过滤(高级功能)
- 创建仪表板变量
- 在仪表板(Dashboard)的设置(Settings)页面中,可以创建仪表板变量。例如,创建一个名为
server_list
的变量,其类型可以是“Query”(查询型)。 - 如果数据源是Prometheus,可以设置变量的查询语句来获取服务器名称列表,如
label_values(cpu_usage_total, server_name)
。这个查询会从cpu_usage_total
指标的server_name
标签中获取所有可能的服务器名称值。
- 在仪表板(Dashboard)的设置(Settings)页面中,可以创建仪表板变量。例如,创建一个名为
- 在查询中使用变量进行过滤
- 在面板的查询语句中使用创建的变量。例如,在Prometheus的查询中,将原来固定的服务器名称替换为变量,
cpu_usage_total{server_name = '$server_list'}
。这样,在仪表板上就可以通过改变变量的值(如从下拉列表中选择不同的服务器名称)来动态地过滤数据并查看相应的指标。 - 在MySQL数据源中,如果创建了一个名为
customer_list
的变量,查询语句可以调整为SELECT * FROM orders WHERE customer_id IN ('$customer_list')
,从而实现根据变量值进行数据过滤。
- 在面板的查询语句中使用创建的变量。例如,在Prometheus的查询中,将原来固定的服务器名称替换为变量,