github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/configs/legacy_promql/testdata/operators.test (about) 1 load 5m 2 http_requests{job="api-server", instance="0", group="production"} 0+10x10 3 http_requests{job="api-server", instance="1", group="production"} 0+20x10 4 http_requests{job="api-server", instance="0", group="canary"} 0+30x10 5 http_requests{job="api-server", instance="1", group="canary"} 0+40x10 6 http_requests{job="app-server", instance="0", group="production"} 0+50x10 7 http_requests{job="app-server", instance="1", group="production"} 0+60x10 8 http_requests{job="app-server", instance="0", group="canary"} 0+70x10 9 http_requests{job="app-server", instance="1", group="canary"} 0+80x10 10 11 load 5m 12 vector_matching_a{l="x"} 0+1x100 13 vector_matching_a{l="y"} 0+2x50 14 vector_matching_b{l="x"} 0+4x25 15 16 17 eval instant at 50m SUM(http_requests) BY (job) - COUNT(http_requests) BY (job) 18 {job="api-server"} 996 19 {job="app-server"} 2596 20 21 eval instant at 50m 2 - SUM(http_requests) BY (job) 22 {job="api-server"} -998 23 {job="app-server"} -2598 24 25 eval instant at 50m -http_requests{job="api-server",instance="0",group="production"} 26 {job="api-server",instance="0",group="production"} -100 27 28 eval instant at 50m +http_requests{job="api-server",instance="0",group="production"} 29 http_requests{job="api-server",instance="0",group="production"} 100 30 31 eval instant at 50m - - - SUM(http_requests) BY (job) 32 {job="api-server"} -1000 33 {job="app-server"} -2600 34 35 eval instant at 50m - - - 1 36 -1 37 38 eval instant at 50m 1000 / SUM(http_requests) BY (job) 39 {job="api-server"} 1 40 {job="app-server"} 0.38461538461538464 41 42 eval instant at 50m SUM(http_requests) BY (job) - 2 43 {job="api-server"} 998 44 {job="app-server"} 2598 45 46 eval instant at 50m SUM(http_requests) BY (job) % 3 47 {job="api-server"} 1 48 {job="app-server"} 2 49 50 eval instant at 50m SUM(http_requests) BY (job) % 0.3 51 {job="api-server"} 0.1 52 {job="app-server"} 0.2 53 54 eval instant at 50m SUM(http_requests) BY (job) ^ 2 55 {job="api-server"} 1000000 56 {job="app-server"} 6760000 57 58 eval instant at 50m SUM(http_requests) BY (job) % 3 ^ 2 59 {job="api-server"} 1 60 {job="app-server"} 8 61 62 eval instant at 50m SUM(http_requests) BY (job) % 2 ^ (3 ^ 2) 63 {job="api-server"} 488 64 {job="app-server"} 40 65 66 eval instant at 50m SUM(http_requests) BY (job) % 2 ^ 3 ^ 2 67 {job="api-server"} 488 68 {job="app-server"} 40 69 70 eval instant at 50m SUM(http_requests) BY (job) % 2 ^ 3 ^ 2 ^ 2 71 {job="api-server"} 1000 72 {job="app-server"} 2600 73 74 eval instant at 50m COUNT(http_requests) BY (job) ^ COUNT(http_requests) BY (job) 75 {job="api-server"} 256 76 {job="app-server"} 256 77 78 eval instant at 50m SUM(http_requests) BY (job) / 0 79 {job="api-server"} +Inf 80 {job="app-server"} +Inf 81 82 eval instant at 50m SUM(http_requests) BY (job) + SUM(http_requests) BY (job) 83 {job="api-server"} 2000 84 {job="app-server"} 5200 85 86 87 eval instant at 50m http_requests{job="api-server", group="canary"} 88 http_requests{group="canary", instance="0", job="api-server"} 300 89 http_requests{group="canary", instance="1", job="api-server"} 400 90 91 eval instant at 50m http_requests{job="api-server", group="canary"} + rate(http_requests{job="api-server"}[5m]) * 5 * 60 92 {group="canary", instance="0", job="api-server"} 330 93 {group="canary", instance="1", job="api-server"} 440 94 95 eval instant at 50m rate(http_requests[25m]) * 25 * 60 96 {group="canary", instance="0", job="api-server"} 150 97 {group="canary", instance="0", job="app-server"} 350 98 {group="canary", instance="1", job="api-server"} 200 99 {group="canary", instance="1", job="app-server"} 400 100 {group="production", instance="0", job="api-server"} 50 101 {group="production", instance="0", job="app-server"} 249.99999999999997 102 {group="production", instance="1", job="api-server"} 100 103 {group="production", instance="1", job="app-server"} 300 104 105 106 eval instant at 50m http_requests{group="canary"} and http_requests{instance="0"} 107 http_requests{group="canary", instance="0", job="api-server"} 300 108 http_requests{group="canary", instance="0", job="app-server"} 700 109 110 eval instant at 50m (http_requests{group="canary"} + 1) and http_requests{instance="0"} 111 {group="canary", instance="0", job="api-server"} 301 112 {group="canary", instance="0", job="app-server"} 701 113 114 eval instant at 50m (http_requests{group="canary"} + 1) and on(instance, job) http_requests{instance="0", group="production"} 115 {group="canary", instance="0", job="api-server"} 301 116 {group="canary", instance="0", job="app-server"} 701 117 118 eval instant at 50m (http_requests{group="canary"} + 1) and on(instance) http_requests{instance="0", group="production"} 119 {group="canary", instance="0", job="api-server"} 301 120 {group="canary", instance="0", job="app-server"} 701 121 122 eval instant at 50m (http_requests{group="canary"} + 1) and ignoring(group) http_requests{instance="0", group="production"} 123 {group="canary", instance="0", job="api-server"} 301 124 {group="canary", instance="0", job="app-server"} 701 125 126 eval instant at 50m (http_requests{group="canary"} + 1) and ignoring(group, job) http_requests{instance="0", group="production"} 127 {group="canary", instance="0", job="api-server"} 301 128 {group="canary", instance="0", job="app-server"} 701 129 130 eval instant at 50m http_requests{group="canary"} or http_requests{group="production"} 131 http_requests{group="canary", instance="0", job="api-server"} 300 132 http_requests{group="canary", instance="0", job="app-server"} 700 133 http_requests{group="canary", instance="1", job="api-server"} 400 134 http_requests{group="canary", instance="1", job="app-server"} 800 135 http_requests{group="production", instance="0", job="api-server"} 100 136 http_requests{group="production", instance="0", job="app-server"} 500 137 http_requests{group="production", instance="1", job="api-server"} 200 138 http_requests{group="production", instance="1", job="app-server"} 600 139 140 # On overlap the rhs samples must be dropped. 141 eval instant at 50m (http_requests{group="canary"} + 1) or http_requests{instance="1"} 142 {group="canary", instance="0", job="api-server"} 301 143 {group="canary", instance="0", job="app-server"} 701 144 {group="canary", instance="1", job="api-server"} 401 145 {group="canary", instance="1", job="app-server"} 801 146 http_requests{group="production", instance="1", job="api-server"} 200 147 http_requests{group="production", instance="1", job="app-server"} 600 148 149 150 # Matching only on instance excludes everything that has instance=0/1 but includes 151 # entries without the instance label. 152 eval instant at 50m (http_requests{group="canary"} + 1) or on(instance) (http_requests or cpu_count or vector_matching_a) 153 {group="canary", instance="0", job="api-server"} 301 154 {group="canary", instance="0", job="app-server"} 701 155 {group="canary", instance="1", job="api-server"} 401 156 {group="canary", instance="1", job="app-server"} 801 157 vector_matching_a{l="x"} 10 158 vector_matching_a{l="y"} 20 159 160 eval instant at 50m (http_requests{group="canary"} + 1) or ignoring(l, group, job) (http_requests or cpu_count or vector_matching_a) 161 {group="canary", instance="0", job="api-server"} 301 162 {group="canary", instance="0", job="app-server"} 701 163 {group="canary", instance="1", job="api-server"} 401 164 {group="canary", instance="1", job="app-server"} 801 165 vector_matching_a{l="x"} 10 166 vector_matching_a{l="y"} 20 167 168 eval instant at 50m http_requests{group="canary"} unless http_requests{instance="0"} 169 http_requests{group="canary", instance="1", job="api-server"} 400 170 http_requests{group="canary", instance="1", job="app-server"} 800 171 172 eval instant at 50m http_requests{group="canary"} unless on(job) http_requests{instance="0"} 173 174 eval instant at 50m http_requests{group="canary"} unless on(job, instance) http_requests{instance="0"} 175 http_requests{group="canary", instance="1", job="api-server"} 400 176 http_requests{group="canary", instance="1", job="app-server"} 800 177 178 eval instant at 50m http_requests{group="canary"} / on(instance,job) http_requests{group="production"} 179 {instance="0", job="api-server"} 3 180 {instance="0", job="app-server"} 1.4 181 {instance="1", job="api-server"} 2 182 {instance="1", job="app-server"} 1.3333333333333333 183 184 eval instant at 50m http_requests{group="canary"} unless ignoring(group, instance) http_requests{instance="0"} 185 186 eval instant at 50m http_requests{group="canary"} unless ignoring(group) http_requests{instance="0"} 187 http_requests{group="canary", instance="1", job="api-server"} 400 188 http_requests{group="canary", instance="1", job="app-server"} 800 189 190 eval instant at 50m http_requests{group="canary"} / ignoring(group) http_requests{group="production"} 191 {instance="0", job="api-server"} 3 192 {instance="0", job="app-server"} 1.4 193 {instance="1", job="api-server"} 2 194 {instance="1", job="app-server"} 1.3333333333333333 195 196 # https://github.com/prometheus/prometheus/issues/1489 197 eval instant at 50m http_requests AND ON (dummy) vector(1) 198 http_requests{group="canary", instance="0", job="api-server"} 300 199 http_requests{group="canary", instance="0", job="app-server"} 700 200 http_requests{group="canary", instance="1", job="api-server"} 400 201 http_requests{group="canary", instance="1", job="app-server"} 800 202 http_requests{group="production", instance="0", job="api-server"} 100 203 http_requests{group="production", instance="0", job="app-server"} 500 204 http_requests{group="production", instance="1", job="api-server"} 200 205 http_requests{group="production", instance="1", job="app-server"} 600 206 207 eval instant at 50m http_requests AND IGNORING (group, instance, job) vector(1) 208 http_requests{group="canary", instance="0", job="api-server"} 300 209 http_requests{group="canary", instance="0", job="app-server"} 700 210 http_requests{group="canary", instance="1", job="api-server"} 400 211 http_requests{group="canary", instance="1", job="app-server"} 800 212 http_requests{group="production", instance="0", job="api-server"} 100 213 http_requests{group="production", instance="0", job="app-server"} 500 214 http_requests{group="production", instance="1", job="api-server"} 200 215 http_requests{group="production", instance="1", job="app-server"} 600 216 217 218 # Comparisons. 219 eval instant at 50m SUM(http_requests) BY (job) > 1000 220 {job="app-server"} 2600 221 222 eval instant at 50m 1000 < SUM(http_requests) BY (job) 223 {job="app-server"} 1000 224 225 eval instant at 50m SUM(http_requests) BY (job) <= 1000 226 {job="api-server"} 1000 227 228 eval instant at 50m SUM(http_requests) BY (job) != 1000 229 {job="app-server"} 2600 230 231 eval instant at 50m SUM(http_requests) BY (job) == 1000 232 {job="api-server"} 1000 233 234 eval instant at 50m SUM(http_requests) BY (job) == bool 1000 235 {job="api-server"} 1 236 {job="app-server"} 0 237 238 eval instant at 50m SUM(http_requests) BY (job) == bool SUM(http_requests) BY (job) 239 {job="api-server"} 1 240 {job="app-server"} 1 241 242 eval instant at 50m SUM(http_requests) BY (job) != bool SUM(http_requests) BY (job) 243 {job="api-server"} 0 244 {job="app-server"} 0 245 246 eval instant at 50m 0 == bool 1 247 0 248 249 eval instant at 50m 1 == bool 1 250 1 251 252 eval instant at 50m http_requests{job="api-server", instance="0", group="production"} == bool 100 253 {job="api-server", instance="0", group="production"} 1 254 255 # group_left/group_right. 256 257 clear 258 259 load 5m 260 node_var{instance="abc",job="node"} 2 261 node_role{instance="abc",job="node",role="prometheus"} 1 262 263 load 5m 264 node_cpu{instance="abc",job="node",mode="idle"} 3 265 node_cpu{instance="abc",job="node",mode="user"} 1 266 node_cpu{instance="def",job="node",mode="idle"} 8 267 node_cpu{instance="def",job="node",mode="user"} 2 268 269 load 5m 270 random{foo="bar"} 1 271 272 load 5m 273 threshold{instance="abc",job="node",target="a@b.com"} 0 274 275 # Copy machine role to node variable. 276 eval instant at 5m node_role * on (instance) group_right (role) node_var 277 {instance="abc",job="node",role="prometheus"} 2 278 279 eval instant at 5m node_var * on (instance) group_left (role) node_role 280 {instance="abc",job="node",role="prometheus"} 2 281 282 eval instant at 5m node_var * ignoring (role) group_left (role) node_role 283 {instance="abc",job="node",role="prometheus"} 2 284 285 eval instant at 5m node_role * ignoring (role) group_right (role) node_var 286 {instance="abc",job="node",role="prometheus"} 2 287 288 # Copy machine role to node variable with instrumentation labels. 289 eval instant at 5m node_cpu * ignoring (role, mode) group_left (role) node_role 290 {instance="abc",job="node",mode="idle",role="prometheus"} 3 291 {instance="abc",job="node",mode="user",role="prometheus"} 1 292 293 eval instant at 5m node_cpu * on (instance) group_left (role) node_role 294 {instance="abc",job="node",mode="idle",role="prometheus"} 3 295 {instance="abc",job="node",mode="user",role="prometheus"} 1 296 297 298 # Ratio of total. 299 eval instant at 5m node_cpu / on (instance) group_left sum by (instance,job)(node_cpu) 300 {instance="abc",job="node",mode="idle"} .75 301 {instance="abc",job="node",mode="user"} .25 302 {instance="def",job="node",mode="idle"} .80 303 {instance="def",job="node",mode="user"} .20 304 305 eval instant at 5m sum by (mode, job)(node_cpu) / on (job) group_left sum by (job)(node_cpu) 306 {job="node",mode="idle"} 0.7857142857142857 307 {job="node",mode="user"} 0.21428571428571427 308 309 eval instant at 5m sum(sum by (mode, job)(node_cpu) / on (job) group_left sum by (job)(node_cpu)) 310 {} 1.0 311 312 313 eval instant at 5m node_cpu / ignoring (mode) group_left sum without (mode)(node_cpu) 314 {instance="abc",job="node",mode="idle"} .75 315 {instance="abc",job="node",mode="user"} .25 316 {instance="def",job="node",mode="idle"} .80 317 {instance="def",job="node",mode="user"} .20 318 319 eval instant at 5m node_cpu / ignoring (mode) group_left(dummy) sum without (mode)(node_cpu) 320 {instance="abc",job="node",mode="idle"} .75 321 {instance="abc",job="node",mode="user"} .25 322 {instance="def",job="node",mode="idle"} .80 323 {instance="def",job="node",mode="user"} .20 324 325 eval instant at 5m sum without (instance)(node_cpu) / ignoring (mode) group_left sum without (instance, mode)(node_cpu) 326 {job="node",mode="idle"} 0.7857142857142857 327 {job="node",mode="user"} 0.21428571428571427 328 329 eval instant at 5m sum(sum without (instance)(node_cpu) / ignoring (mode) group_left sum without (instance, mode)(node_cpu)) 330 {} 1.0 331 332 333 # Copy over label from metric with no matching labels, without having to list cross-job target labels ('job' here). 334 eval instant at 5m node_cpu + on(dummy) group_left(foo) random*0 335 {instance="abc",job="node",mode="idle",foo="bar"} 3 336 {instance="abc",job="node",mode="user",foo="bar"} 1 337 {instance="def",job="node",mode="idle",foo="bar"} 8 338 {instance="def",job="node",mode="user",foo="bar"} 2 339 340 341 # Use threshold from metric, and copy over target. 342 eval instant at 5m node_cpu > on(job, instance) group_left(target) threshold 343 node_cpu{instance="abc",job="node",mode="idle",target="a@b.com"} 3 344 node_cpu{instance="abc",job="node",mode="user",target="a@b.com"} 1 345 346 # Use threshold from metric, and a default (1) if it's not present. 347 eval instant at 5m node_cpu > on(job, instance) group_left(target) (threshold or on (job, instance) (sum by (job, instance)(node_cpu) * 0 + 1)) 348 node_cpu{instance="abc",job="node",mode="idle",target="a@b.com"} 3 349 node_cpu{instance="abc",job="node",mode="user",target="a@b.com"} 1 350 node_cpu{instance="def",job="node",mode="idle"} 8 351 node_cpu{instance="def",job="node",mode="user"} 2 352 353 clear 354 355 load 5m 356 random{foo="bar"} 2 357 metricA{baz="meh"} 3 358 metricB{baz="meh"} 4 359 360 # On with no labels, for metrics with no common labels. 361 eval instant at 5m random + on() metricA 362 {} 5 363 364 # Ignoring with no labels is the same as no ignoring. 365 eval instant at 5m metricA + ignoring() metricB 366 {baz="meh"} 7 367 368 eval instant at 5m metricA + metricB 369 {baz="meh"} 7