Search code examples
sortingprometheusgrafana

How can I sort the legend by series name in Prometheus/Grafana


I have a Grafana dashboard panel configured to render the results of a Prometheus query. There are a large number of series returned by the query, with the legend displayed to the right. If the user is looking for a specific series, they have to potentially scroll through all of them, and it's easy to miss the one they're looking for. So I'd like to sort the legend by series name, but I can't find any way to do that.

My series name is a concatenation of two labels, so if I could sort the instant vector returned from the PromQL query by label value, I think Grafana would use that order in the legend. But I don't see any way to do that in Prometheus. There is a sort() function, but it sorts by sample value. And I don't see any way to sort the legend in Grafana.


Solution

  • As far as I know, You can only use the function sort() to sort metrics by value.

    • According to this PR, Prometheus does not intend to provide the function sort_by_label().
    • According to this Issue, Grafana displays the query results from Prometheus without sorting.
    • According to this Issue, Grafana supports sorting by value when displaying legend.

    In Grafana 7, Prometheus metrics can be transformed from time series format to table format using the Transform module, so that you can sort the metrics by any label or value.


    In December 2023, prometheus v2.49 finally added sort_by_label() and sort_by_label_desc()