插件 〉Tree View


开发者

Peter Gillich

注册以接收不定期的产品新闻和更新



面板
社区

Tree View

  • 概述
  • 安装
  • 变更日志
  • 相关内容

Grafana Tree 面板插件

Build

此面板插件可以根据数据源提供的记录显示一个树状结构。该插件已针对JSON API数据源进行了优化和测试。

此插件用于呈现 JSON API 响应,例如从 Kubernetes API 接收的 Kubernetes 资源。可能的生产环境在https://github.com/pgillich/grafana-kubernetes中有所描述。

关于 Kubernetes Namespace 的示例截图

2 panels

面板编辑器截图

simple-editor

数据源

数据源的所有值都转换为字符串。对象类型则转换为 JSON 字符串。最好的数据源是JSON API,但也可能使用其他数据源,例如 TestData Logs

TestData, Logs

字段中的值数量必须相同,因此必须替换缺失值。JSON API支持 JSONata,因此这是可能的。

用于 Kubernetes API 的示例 JSONata 表达式,它替换了缺失值(appNamecontainerState)并生成关于列表(containerImagecontainerState)的字符串

$map(items, function($v) {{"namespace": $v.metadata.namespace, "name": $v.metadata.name, "appName": $v.metadata.labels."app.kubernetes.io/name" ? $v.metadata.labels."app.kubernetes.io/name" : ($v.metadata.labels."app" ? $v.metadata.labels."app" : "-"), "statusPhase": $v.status.phase, "containerCount": $count($v.spec.containers), "containerImage": $join($v.spec.containers[*].image, " "), "containerState": $v.status.containerStatuses[*].state ? $string($v.status.containerStatuses[*].state) : "-"}})

如果 Grafana 在 Kubernetes 集群外部运行,可以通过kubectl proxy命令为JSON API创建 API 端点,以便访问集群

kubectl proxy --address 0.0.0.0 --accept-hosts='.*' --reject-methods=POST,PUT,PATCH -v5

强烈建议在字段定义中使用相同的 JSONata 表达式,只需更改选定的字段即可,例如

Query editor 1

Query editor 2

面板选项

选项说明可在面板选项编辑器中查看

Panel options

默认模板引擎是一个简单快速的${field}-风格表达式处理器,例如

${statusPhase}
${namespace}
${appName} ${name}
${containerImage}

如果需要更复杂的模板引擎,可以使用Handlebars,它是一个{{field}}-风格的引擎,例如

handlebars-options

面板编辑器截图,使用 Handlebars 引擎

handlebars-editor

Handlebars 扩展

Pod 信息

已向Handlebars添加了额外功能,以便更好地获取 Kubernetes Pods 的信息。从 Kubernetes API 响应评估STATUS和其他kubectl get pod -o wide列是很复杂的,因此我们将printPod()函数移植到了 TypeScript。语法为:{{printPodColumn <whole_pod> "<column>"}},其中<whole_pod>是包含整个 pod 的字段,<column>kubectl get pod -o wide列名称,例如

  • NAME
  • READY
  • STATUS
  • RESTARTS
  • AGE
  • IP
  • NODE
  • NOMINATED_NODE
  • READINESS_GATES
  • MESSAGE

AGE的行为稍有不同:它更精确一些。MESSAGE列包含有关STATUS的附加信息(原因)。printPodColumn示例

{{printPodColumn rawPod "STATUS"}}
{{namespace}}
{{appName}} {{name}}
{{containerImage}} {{printPodColumn rawPod "MESSAGE"}}

上述模板的示例 JSONata 数据源表达式

$map(items, function($v) {{"rawPod": $v, "namespace": $v.metadata.namespace, "name": $v.metadata.name, "appName": $v.metadata.labels."app.kubernetes.io/name" ? $v.metadata.labels."app.kubernetes.io/name" : ($v.metadata.labels."app" ? $v.metadata.labels."app" : "-"), "statusPhase": $v.status.phase, "containerCount": $count($v.spec.containers), "containerImage": $join($v.spec.containers[*].image, " "), "containerState": $v.status.containerStatuses[*].state ? $string($v.status.containerStatuses[*].state) : "-"}})

比较来自原始 Kubernetes API 和printPodColumn函数的 Pod 状态信息的示例截图

simple-handlebars

示例仪表盘

示例仪表盘可在examples中找到。

  • Namespace Pods.json 所选 Namespace 的 Pods,简单模板引擎
  • All Pods.json 所有 Namespaces 的 Pods,使用kubectl列的 Handlebars 模板引擎。

创建 Issue

请在新 Issue 中附加示例 JSON 文件。

贡献

更多详情请见CONTRIBUTING.md

在 Grafana Cloud 上安装 Tree View

更多信息,请访问文档关于插件安装

变更日志

<!-- 0.1.9 START -->

0.1.9 (2022-06-)

特性和增强

错误修复

  • 移除 kubernetes/client-node 依赖
  • 处理空的和未定义的 JSON 列表

<!-- 0.1.9 END -->

<!-- 0.1.8 START -->

0.1.8 (2022-02-)

特性和增强

  • 添加Handlebars模板引擎。
  • 添加生成的@kubernetes/client-node模型到源代码
  • 向 Handlebars 模板引擎添加类似kubectl get pod -o wide列的评估功能。

错误修复

  • 更好地处理空的 JSON 列表
  • Kubernetes 开发者信息

<!-- 0.1.8 END -->

<!-- 0.1.7 START -->

0.1.7 (2022-05-26)

特性和增强

已签名插件。

错误修复

<!-- 0.1.6 START -->

0.1.6 (2022-02-01)

首次提交给 Grafana 评审的版本。

特性和增强

错误修复

<!-- 0.1.6 END -->