Bootstrap

在 Grafana 中如何进行数据查询和过滤?

在Grafana中进行数据查询和过滤

一、数据查询

(一)选择数据源

  1. 数据源类型与配置
    • 在Grafana中,首先要确保已经正确配置了数据源(如Prometheus、MySQL、Elasticsearch等)。不同的数据源有不同的配置方式。
    • 例如,对于Prometheus数据源,在配置时需要指定Prometheus服务器的地址(如http://prometheus - server:9090)。一旦数据源配置完成,就可以在面板(Panels)中基于该数据源进行数据查询。
  2. 在面板中指定数据源
    • 当创建或编辑一个面板时,在“Queries”(查询)选项卡中,需要从已配置的数据源中选择要查询的数据源。如果有多个数据源,如既有Prometheus采集的系统性能数据,又有MySQL中的业务数据,要根据面板展示内容选择合适的数据源。

(二)根据数据源查询语言编写查询语句

  1. 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分钟内的情况。
  2. 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

二、数据过滤

(一)在查询语句中添加过滤条件(适用于多种数据源)

  1. 基于标签过滤(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使用率。
  2. 基于列值过滤(MySQL)
    • 在MySQL数据源中,可以直接在SQL查询语句中使用WHERE子句进行过滤。例如,要查询价格大于100的商品信息,可以使用SELECT * FROM products WHERE price > 100

(二)使用仪表板变量进行过滤(高级功能)

  1. 创建仪表板变量
    • 在仪表板(Dashboard)的设置(Settings)页面中,可以创建仪表板变量。例如,创建一个名为server_list的变量,其类型可以是“Query”(查询型)。
    • 如果数据源是Prometheus,可以设置变量的查询语句来获取服务器名称列表,如label_values(cpu_usage_total, server_name)。这个查询会从cpu_usage_total指标的server_name标签中获取所有可能的服务器名称值。
  2. 在查询中使用变量进行过滤
    • 在面板的查询语句中使用创建的变量。例如,在Prometheus的查询中,将原来固定的服务器名称替换为变量,cpu_usage_total{server_name = '$server_list'}。这样,在仪表板上就可以通过改变变量的值(如从下拉列表中选择不同的服务器名称)来动态地过滤数据并查看相应的指标。
    • 在MySQL数据源中,如果创建了一个名为customer_list的变量,查询语句可以调整为SELECT * FROM orders WHERE customer_id IN ('$customer_list'),从而实现根据变量值进行数据过滤。
;