Prometheus query for table in grafana
After some experimentations in Grafana 9.1.1, I have obtained a way to construct a table like you have described with prometheus metric like that. Here are Grafana transform functions you will need:
- Labels to fields
This function separate the labels in the metric to columns.
- Set Mode to Columns
- Set Labels to be only the columns that are relevant so in this case it's my_col and my_row
- Set Value field name to my_col
- Reduce
This function reduce all values in separate times into one row.
- Set Mode to Reduce fields
- Set Calculations to Last*. You may change this part according to your needs.
- Set include time to false
- Merge
This function will merge all datasets into one with corresponding columns. - Organize fields
Finally, this function will help you reorganize the table into something that's more proper. For presenting the data in bar chart, ensure that my_row column is the most left one.
There is some documentation in the Grafana docs about Table Panels here: https://grafana.com/docs/features/panels/table_panel/#table-panel
The particular transform you showed in the example doesn't appear to be supported in the above documentation unfortunately.
If possible, a change to the structure of the prometheus data to something like the below should make this easier:
my_metric{instance="lh",job="job",col_1="6",col_2="8",my_row="A"}
my_metric{instance="lh",job="job",col_1="10",col_2="17",my_row="B"}
It is possible with Grafana 7.0.3. I think it was possible with earlier versions as well, but the approach has changed since 7.0.0 with the introduction of transformations.
Add two queries:
my_metric{instance="lh",job="job",my_col="1"}
my_metric{instance="lh",job="job",my_col="2"}
Make them instant queries and format them as tables. Create the transformation Outer join
and join by my_col
. You should get the two values as Value #A
and Value #B
. You can use the transformation Organize fields
to rename them and drop all the other fields.