promr
is a
PromQL
query client for the Prometheus time-series
database.
Install the latest release from CRAN:
install.packages("promr")
Or install the development version using devtools
:
devtools::install_github("domodwyer/promr")
library(promr)
# Define your PromQL query
q <- "sum by (handler, result) (rate(dml_handler_write_duration_seconds_count{}[1m]))"
# And execute the query within the specified time range
df <- query_range(
q,
"2022-08-19T00:00:00Z",
"2022-08-20T00:00:00Z"
)
Timestamps can be provided as rfc3339
strings, numerical unix
timestamps, or POSIXct
objects. Optionally timeout
, and step
parameters can be provided.
The output df
contains all the returned series, with the measurements
nested within. For this query, there are 10 series:
print(df)
## # A tibble: 10 × 3
## handler result values
## <chr> <chr> <list>
## 1 parallel_write error <tibble [8,641 × 2]>
## 2 parallel_write success <tibble [8,641 × 2]>
## 3 partitioner error <tibble [8,641 × 2]>
## 4 partitioner success <tibble [8,641 × 2]>
## 5 request error <tibble [8,641 × 2]>
## 6 request success <tibble [8,641 × 2]>
## 7 schema_validator error <tibble [8,641 × 2]>
## 8 schema_validator success <tibble [8,641 × 2]>
## 9 sharded_write_buffer error <tibble [8,641 × 2]>
## 10 sharded_write_buffer success <tibble [8,641 × 2]>
The unnested data can be easily extracted using tidyr::unnest()
(part
of of the tidyverse
), to produce a “long” tibble of measurements:
df |>
tidyr::unnest(values) |>
head()
## # A tibble: 6 × 4
## handler result timestamp value
## <chr> <chr> <dttm> <dbl>
## 1 parallel_write error 2022-08-19 02:00:00 0
## 2 parallel_write error 2022-08-19 02:00:10 0
## 3 parallel_write error 2022-08-19 02:00:20 0
## 4 parallel_write error 2022-08-19 02:00:30 0
## 5 parallel_write error 2022-08-19 02:00:40 0
## 6 parallel_write error 2022-08-19 02:00:50 0
Which makes it easy to work on, and visualise the actual data:
library(ggplot2)
library(tidyverse)
df |>
unnest(values) |>
filter(handler == "partitioner") |>
ggplot(aes(x = timestamp, y = value, colour = result)) +
geom_line() +
labs(
title = "Partitioner Calls",
x = "Time",
y = "Requests per Second"
)