Grafana 仪表板变量问题 – 需要用户手册

huangapple go评论71阅读模式
英文:

Grafana dashboard variable issues - need a user manual

问题

I am trying to set up a Grafana dashboard, pulling information from Prometheus, that is scraping data from a Kubernetes cluster. I'm running into issues that seem related to dashboard level variables.

Dashboard variable query syntax

There is very little information regarding how to build queries to populate the available values for a given dashboard variable. I've based what I've done so far on the few examples I've found in other dashboards. While this is helpful, it gives a very limited view into how this works. As an example, there is a function (label_values) that appears to get the available values for a given label in the scraped data. I cannot find documentation for this function anywhere. I also do not know what other functions may exist. Where is there documentation that explains how to use all of this? I think this is probably the main issue.

Dashboard variable filtering

I've been reading the Grafana documentation and am under the impression that dashboard level variables can be filtered so that, for example, if I select a node, the other variable values can be filtered to only show the values available on that selected node. I can't get this to work - if I select a node, the other variable available values are not being filtered. I assume I'm not writing the variable queries correctly, but I can't tell for sure. The Grafana documentation is a little vague or too high-level in some areas.

Example dashboard variable definitions:


type: query name: nemspace query: label_values(namespace) ```

**Note**: I also tried setting the query for `namespace` to `label_values(node="$node", namespace)` but this did not work either. I have not been able to find good information on the correct query syntax, functions, etc. Again, I refer back to the first bullet item.

## Dashboard variable "include all" option

I'm under the impression that if you configure a variable to allow the "all" option, that this essentially turns off filtering for this variable. However, if I do this, I get no data at all in the view. I've tried setting the associated "custom all value" to "All" and wildcard ("*"), but neither makes any difference. What am I doing wrong?

## Conclusion

I think of all of these issues stem from the fact that I do not have information on how to properly configure Grafana dashboard variables. It would be so helpful if there was a detailed comprehensive guide - alas, I have not been able to find one.

<details>
<summary>英文:</summary>

I am trying to set up a Grafana dashboard, pulling information from Prometheus, that is scraping data from a Kubernetes cluster. I&#39;m running into issues that seem related to dashboard level variables.

## Dashboard variable query syntax

There is very little information regarding how to build queries to populate the available values for a given dashboard variable. I&#39;ve based what I&#39;ve done so far on the few examples I&#39;ve found in other dashboards. While this is helpful, it gives a very limited view into how this works. As an example, there is a function (`label_values`) that appears to get the available values for a given label in the scraped data. I cannot find documentation for this function anywhere. I also do not know what other functions may exist. Where is there documentation that explains how to use all of this? I think this is probably the main issue.

## Dashboard variable filtering

I&#39;ve been reading the Grafana documentation and am under the impression that dashboard level variables can be filtered so that, for example, if I select a node, the other variable values can be filtered to only show the values available on that selected node. I can&#39;t get this to work - if I select a node, the other variable available values are not being filtered. I assume I&#39;m not writing the variable queries correctly, but I can&#39;t tell for sure. The Grafana documentation is a little vague or too high-level in some areas.

Example dashboard variable definitions:

type: query
name: node
query: label_values(node)

type: query
name: nemspace
query: label_values(namespace)


**Note**: I also tried setting the query for `namespace` to `label_values(node=&quot;$node&quot;, namespace)` but this did not work either. I have not been able to find good information on the correct query syntax, functions, etc. Again, I refer back to the first bullet item.

## Dashboard variable &quot;include all&quot; option

I&#39;m under the impression that if you configure a variable to allow the &quot;all&quot; option, that this essentially turns off filtering for this variable. However, if I do this, I get no data at all in the view. I&#39;ve tried setting the associated &quot;custom all value&quot; to &quot;All&quot; and wildcard (&quot;*&quot;), but neither makes any difference. What am I doing wrong?

## Conclusion

I think of all of these issues stem from the fact that I do not have information on how to properly configure Grafana dashboard variables. It would be so helpful if there was a detailed comprehensive guide - alas, I have not been able to find one.


</details>


# 答案1
**得分**: 1

&gt; 这里有解释如何使用所有这些的文档吗?

我不知道是否有关于 `label_values` 的文档,但它非常简单:您提供指标选择器和要提取的标签,它会提取该标签的不同值。

例如
```shell
label_values(up{instance=~".*prod.*"}, job)

执行查询 up{instance=~".*prod.*"} 并提取 job 指标的不同值。

关于没有指标选择器的 label_values 的情况,我不确定,但我认为它在语义上等同于类似于 label_values({__name__=~".+"}, job) 这样的东西。

请注意,label_values 函数不支持查询,如果您需要从一些更复杂的查询中提取标签,请使用带有适当正则表达式的 query_result,参考此示例

> 我假设我没有正确编写变量查询,但我无法确定。

根据您的描述,我假设您需要为第二个变量编写如下的查询:

label_values({node=~"$node"}, namespace)

它选择所有具有标签 node 的值等于当前选择的变量 node 名称的值的指标。但如果可能的话,我建议考虑使用某个特定的指标以降低此查询的性能影响。例如,类似于 label_values(up{node=~"$node"}, namespace) 的查询应该更快。对于第一个变量的查询也适用:考虑类似于 label_values(up, node) 的查询。

> 我的印象是,如果您配置一个变量以允许 "all" 选项,这基本上会关闭此变量的筛选。

这不完全正确。 "包括全部" 基本上会用所有可能的变量值替换变量。替换发生的方式取决于数据源。

例如,如果您的值节点有三个可能的值:node1.comnode2.comnode3.com,那么在将此值替换为 Prometheus 查询值时将使用 (node1.com|node2.com|node3.com)

注意:如果您计划使用带有选项 "多个值" 或 "包括全部" 的变量,预计您将使用正则表达式选择器,例如 up{node=~"$node"},以适应通过变量提供的多个值的查询。

> 如果有详细全面的指南将非常有帮助

您可以在 Grafana 的 GitHub 问题 中提出这个问题。那里的人相当响应,如果您向他们传达了需要更详细描述如何使用 label_values,那么它有很大机会被添加到 Grafana 的官方文档中。

英文:

> Where is there documentation that explains how to use all of this?

I don't know if there is any documentation on label_values, but it is pretty simple: you supply metric selector and label to extract, and id extracts distinct values of said label.

For example

label_values(up{instance=~&quot;.*prod.*&quot;}, job)

Executes query up{instance=~&quot;.*prod.*&quot;} and extracts distinct values of job metric.

I'm not sure on the case of label_values without metric selector, but I assume it is semantically equivalent to something like label_values({__name__=~&quot;.+&quot;}, job).

Notice, that label_values function doesn’t support queries, if you need to extract labels from some more complex query, use query_result with appropriate regex, per this example.

> I assume I'm not writing the variable queries correctly, but I can't tell for sure.

Based on your description I assume, you need query like this for your second variable:

label_values({node=~&quot;$node&quot;}, namespace)

It selects all metrics with value of label node equal to currently selected value of your variable with name node. But if it is possible, I'd recommend to consider using some specific metric to lower performance impact of this query. For example, something like label_values(up{node=~&quot;$node&quot;}, namespace) should e way faster. Same applies to query of first variable: consider something like label_values(up, node).

> I'm under the impression that if you configure a variable to allow the "all" option, that this essentially turns off filtering for this variable.

That is not entirely correct. "Include all" basically substitutes variable with all possible values of variable. How substitution happens depends on data source.

For example, if your value node has three possible values: node1.com, node2.com, node3.com, then on substitution of this value to Prometheus query value (node1.com|node2.com|node3.com) will be used.

Note: If you plan to use variables with either options "multiple values" or "include all", it's expected that you will use regex selectors, for example up{node=~&quot;$node&quot;}, to accommodate multiple values supplied to query through variable.

> It would be so helpful if there was a detailed comprehensive guide

You can raise said concern in grafana's issues on GitHub. Folks around there are quite responsive, and if you'll convey to them need of more detailed description on how to use label_values, there is pretty good chance that it will be added to official documentation of Grafana.

huangapple
  • 本文由 发表于 2023年6月12日 23:55:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/76458341.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定