• 查询示例
    • " level="2">简单的时间序列选择器
    • " level="2">子查询
    • " level="2">使用函数、操作符等

    查询示例

    简单的时间序列选择器

    返回数据指标名称为http_requests_total的所有时间序列:

    1. http_requests_total

    返回数据指标名称为http_requests_total及给定jobhandler标签的所有时间序列:

    1. http_requests_total{job="apiserver", handler="/api/comments"}

    返回相同向量的整个时间范围(在本例中为5分钟),使其成为范围向量:

    1. http_requests_total{job="apiserver", handler="/api/comments"}[5m]

    请注意,无法直接绘制范围向量的表达式结果,而是在表达式浏览器的表格视图(“控制台”)中查看。

    使用正则表达式,您可以只选择job标签值与特定模式匹配的时间序列,在本例子中,所有job标签以server结尾的向量:

    1. http_requests_total{job=~".*server"}

    Prometheus中的所有正则表达式都使用RE2语法

    想要选择除了 4xx 以外的所有 HTTP 状态码,你可以执行:

    1. http_requests_total{status!~"4.."}

    子查询

    返回过去 30 分钟的 http_requests_total 指标的 5 分钟内的平均速率,分辨率为 1 分钟.

    1. rate(http_requests_total[5m])[30m:1m]

    这是一个嵌套子查询的示例。deriv函数的子查询使用默认分辨率。请注意,不必要地使用子查询是不明智的。

    1. max_over_time(deriv(rate(distance_covered_total[5s])[30s:5s])[10m:])

    使用函数、操作符等

    返回最近 5 分钟内指标名称为http_requests_total的所有时间序列的每秒速率:

    1. rate(http_requests_total[5m])

    假设http_requests_total时间序列都有job(按作业名称进行划分)和instance(按作业的实例进行划分),我们可能希望得到的输出时间序列较少,所以对所有实例的速率进行求和,但仍然保留job维度:

    1. sum by (job) (
    2. rate(http_requests_total[5m])
    3. )

    如果我们有具有两个相同维度标签的不同数据指标,则可以对它们进行二元运算,并且具有相同标签集的两侧的元素都将匹配并传播到输出。例如:此实例表达式为每个实例以 MiB 返回未使用的内存(在虚构的集群上暴露了有关其运行实例的这些指标):

    1. (instance_memory_limit_bytes - instance_memory_usage_bytes) / 1024 / 1024

    相同的表达式,但根据应用汇总,可以这么写:

    1. sum by (app, proc) (
    2. instance_memory_limit_bytes - instance_memory_usage_bytes
    3. ) / 1024 / 1024

    如果相同的虚拟集群调度程序对每个实例暴露了以下 CPU 使用率指标:

    1. instance_cpu_time_ns{app="lion", proc="web", rev="34d0f99", env="prod", job="cluster-manager"}
    2. instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"}
    3. instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"}
    4. instance_cpu_time_ns{app="fox", proc="widget", rev="4d3a513", env="prod", job="cluster-manager"}

    我们可以按应用程序(app)和进程类型(proc)分组,排名前 3 位的 CPU 用户是这样的:

    1. topk(3, sum by (app, proc) (rate(instance_cpu_time_ns[5m])))

    假设此指标每个运行实例包含一个时间序列,则可以像这样计算每个应用程序的运行实例数:

    1. count by (app) (instance_cpu_time_ns)