Support metrics with special characters in query builder
rul-hydro opened this issue · comments
As mentioned in #128, the query builder generates invalid code when the metric name contains special characters, such as slash (/) or dash (-), and quite possibly others.
When picking a metric with special characters (e.g. foo/bar
) from the drop-down, the builder should write the query as {__name__="foo/bar"}
instead of just foo/bar
. When switching back from Code to Builder, the label filter __name__=
should also be translated to the Metric drop-down.
I suppose the distinction for the metric names could be done by a regex. Prometheus docs state that a valid metric name should match [a-zA-Z_:][a-zA-Z0-9_:]*
. The expression for compatible metric names could be a bit broader than that, like [a-z-A-Z0-9_:.]
or something like that. Anything not matching this expression would be written as a label filter.
(Beware of quotes in metric names - if anyone should be crazy enough to have them.)
Sorry guys ... I got it all wrong in #128 :D
Actually how it should be is to just escape the names from query builder:
Like for our case:
bts\-erp.sys_metrics_heap\-used
vs
{__name__="bts-erp.sys_metrics_heap-used"}
So just escape the names and take them into account when parsing or selecting the metrics from dropdown.
(based on idea from: https://stackoverflow.com/questions/52537029/escape-special-characters-in-prometheus-metric-names)
Support metrics with special characters has been added at datasource starting from v0.6.0. Closing the feature request as done.
Looks great, thank you!
@Loori-R I tried and it's actually a lot better. However for such metrics we are unable to select label filters in dropdown.
![image](https://private-user-images.githubusercontent.com/3091122/301178120-3ac0a27c-8937-45eb-ac0e-72b2729ddaff.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTU1OTI0MDIsIm5iZiI6MTcxNTU5MjEwMiwicGF0aCI6Ii8zMDkxMTIyLzMwMTE3ODEyMC0zYWMwYTI3Yy04OTM3LTQ1ZWItYWMwZS03MmIyNzI5ZGRhZmYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDUxMyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA1MTNUMDkyMTQyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZmIzZWVkMjM5OTJhODdiNzE2YzJjNTU3ZmI0NTE3YmQ2MGZjNzBjZjMyNzA1YWZlN2Y5NTE1ZjJiOGVmM2E1YiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.s5RhfizwYee9z2WsX8u_owMY2CBbzBF7ZrIIHj4NdrY)
Raw query works (and we have 4 labels (color, host, ...):
bts\-erp.heartbeat_metrics_value{color="blue"}
When changing from raw query to builder it populates the fields correctly. Just dropdown does not resolve all the possible labels.
Like when filtering labels or fetching them it does not take \ into account ?
hi @Loori-R , I found that the query builder doesn't support label names containing dot. In the following example, k8s.cluster.name
is converted to k8s
in builder
![image](https://private-user-images.githubusercontent.com/17081528/329772680-6ccfa400-3046-4745-8ffb-9f259fc800f4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTU1OTI0MDIsIm5iZiI6MTcxNTU5MjEwMiwicGF0aCI6Ii8xNzA4MTUyOC8zMjk3NzI2ODAtNmNjZmE0MDAtMzA0Ni00NzQ1LThmZmItOWYyNTlmYzgwMGY0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTEzVDA5MjE0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdlYzU0Yjg5ODZmZTIzOTk3M2VmOGRhOGY5MzYyYjFlMmI1YWZiZjQyMWVkMGI4ZGNjMzQ3MTEyMjc4MTc2YjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.8dDEf3_D7nLguijojIqNTQS1U7WFfCE7sKj61MCaWNw)
![image](https://private-user-images.githubusercontent.com/17081528/329772700-450f41f0-1b8d-4e4e-a358-3b98107a1401.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTU1OTI0MDIsIm5iZiI6MTcxNTU5MjEwMiwicGF0aCI6Ii8xNzA4MTUyOC8zMjk3NzI3MDAtNDUwZjQxZjAtMWI4ZC00ZTRlLWEzNTgtM2I5ODEwN2ExNDAxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTEzVDA5MjE0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThhMDg2YmRmZDM0Yjk0NjZjMGI3ODRkNjU3MzQ5YWE4ZjIwMmY5NmFkMzJhMDc3OGQ1ZTAxNjM1Nzk5ZmQ3OTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.dIL5b9ZLczJGEkX3DNEzhY8bCssP5zkJUDGotGuahu4)
![image](https://private-user-images.githubusercontent.com/17081528/329772709-c4b89898-ecb1-48e4-9ed1-65e3d5008265.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTU1OTI0MDIsIm5iZiI6MTcxNTU5MjEwMiwicGF0aCI6Ii8xNzA4MTUyOC8zMjk3NzI3MDktYzRiODk4OTgtZWNiMS00OGU0LTllZDEtNjVlM2Q1MDA4MjY1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTEzVDA5MjE0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYwNzQzMDM1ZjczMjVjY2ZjYjEzMjU1ZmVlYmVmMTVkNTFlNWY0MmJmNzk1ZTE3OTQwNmFkZTgzOGVhMWFjODcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.NvjDyBrIQKkejR_Sv4N7rNv-RUoYB-ujI_zVKwtmCoo)
Hello, @chenlujjj! Thanks for your message. It looks like we missed handling special characters in labels. I've reopened it.