插件 〉Plotly
Plotly
Grafana 的 Plotly 面板
使用 Plotly.js 在 Grafana 中创建高级交互式图表。
主要特性
- 利用完整的 Plotly.js 功能灵活创建图表
- 支持 YAML/JSON,方便配置
- 深色/浅色主题兼容性
- 自动和手动时区调整
- 跨追踪数据应用
- 可展开的代码编辑器,用于定制
- Grafana 变量集成
- 全面错误处理
- 支持多种格式(SVG、PNG、JPEG、WebP)的高分辨率图像导出
有关最新更新的完整列表,请参阅我们的变更日志。
开始使用
由 nLine 开发的 Plotly 面板在 Grafana 中提供了增强的数据可视化控制。它采用基于组件的方法,允许您独立修改图表元素,无需复杂的 JavaScript 交互。
面板结构
面板配置包含五个主要组件
- allData: 应用于 Plotly 图表上的所有追踪
- data: 定义图表的数据系列(追踪)
- layout: 控制图表的外观和轴
- config: 设置图表范围的选项
- frames: (可选)用于动画图表
这些组件遵循 Plotly.js 模式。您可以在面板选项中使用 YAML 或 JSON 配置它们。
数据转换
您可以使用自定义脚本在渲染之前转换数据。脚本可以访问:
data
: 来自 Grafana 数据源的原始数据variables
: Grafana 仪表盘和系统变量options
: 当前面板配置utils
: 辅助函数(例如,时区转换,用于日期操作的 dayjs)
上下文变量
脚本可以访问多个上下文变量,这些变量提供有用的信息和功能:
variables
此对象包含 Grafana 的仪表盘变量和原生 Grafana 变量。原生变量优先于同名仪表盘变量。
主要原生变量包括:
__from
和__to
: 当前时间范围的开始和结束时间戳__interval
和__interval_ms
: 间隔的字符串格式(例如,“1h”)和毫秒格式__timezone
: 当前仪表盘时区__timeFilter
: 一个生成时间范围过滤表达式的函数__dashboard
: 当前仪表盘对象
utils
utils
对象提供了多个实用函数和服务,帮助进行数据处理和面板交互:
timeZone
: 仪表盘时区dayjs
: 一个轻量级日期处理库matchTimezone
: 一个方便的函数,用于将时间序列数据转换为用户的时区locationService
: Grafana 用于 URL 操作的位置服务getTemplateSrv
: Grafana 用于变量替换的模板服务replaceVariables
: 一个在字符串中替换 Grafana 变量的函数
处理脚本
脚本必须返回一个定义图表配置的对象。此对象可以包含以下一个或多个属性:
data
: 一个追踪对象数组,定义图表的数据系列layout
: 一个控制图表外观和轴的对象config
: 一个设置图表范围选项的对象frames
: 一个帧对象数组,用于动画图表
注意: data
和 frames
属性应该是对象数组。“跨追踪数据”字段可以是一个对象,它会将参数应用于脚本部分返回的所有追踪。对象会与脚本对象合并,脚本对象具有优先级(例如,来自脚本的 data
> allData
> data
)。
脚本在“处理脚本”编辑器中定义。
// Example: Basic timeseries plot const { data, variables, options, utils } = arguments; let series = data.series[0]; let x = series.fields[0]; let y = series.fields[1];
return { data: [ { x: x.values || x.values.buffer, y: y.values || y.values.buffer, type: ‘scatter’, mode: ’lines’, name: x.name, }, ], layout: { xaxis: { title: x.name }, yaxis: { title: y.name }, }, };
点击事件处理
面板支持点击、选择和缩放事件。您可以使用“事件触发器”编辑器为这些事件定义自定义行为。
// Event handling const { type: eventType, data: eventData } = event; const { timeZone, dayjs, locationService, getTemplateSrv } = utils;
switch (eventType) { case ‘click’: console.log(‘Click event:’, eventData.points); break; case ‘select’: console.log(‘Selection event:’, eventData.range); break; case ‘zoom’: console.log(‘Zoom event:’, eventData); break; }
截图
截图请参见 src/img
文件夹。
在 Grafana Cloud 上安装 Plotly
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
在 Grafana Cloud 实例上安装插件是一键式操作;更新也一样。很酷,对吧?
请注意,可能需要长达 1 分钟才能在您的 Grafana 中看到该插件。
更多信息请访问插件安装文档。
在本地 Grafana 上安装
对于本地实例,插件通过简单的 CLI 命令安装和更新。插件不会自动更新,但当有更新可用时,您会在 Grafana 中收到通知。
1. 安装面板
使用 grafana-cli 工具从命令行安装 Plotly
grafana-cli plugins install
插件将安装到您的 Grafana 插件目录中;默认目录是 /var/lib/grafana/plugins。更多关于 CLI 工具的信息。
2. 将面板添加到仪表盘
安装的面板会立即在您的 Grafana 主菜单的仪表盘部分中可用,并且可以像 Grafana 中的任何其他核心面板一样添加。
要查看已安装面板的列表,请点击主菜单中的插件项。核心面板和已安装面板都会显示。
变更日志
本项目所有重要变更将记录在此文件中。
[1.8.1] - 2024-09-30
已更改
- 向 utils 添加了正确的 replaceVariables 函数(适用于作用域变量)
已修复
- 错误检测空数据帧
[1.8.0] - 2024-08-27
已更改
- 添加对点击、选择和缩放事件的支持
- 实现仪表盘时间范围与图表缩放同步
- 扩展脚本上下文,包含更多 Grafana 变量和实用程序
- 更新 README,包含详细使用说明和示例
- 改进错误处理和代码组织
- 添加迁移脚本,用于与旧版本兼容
已修复
- 标题正确替换变量
[1.7.0] - 2024-08-07
已更改
- 重大重构,包含多项修复和改进
- 图像导出反映所有配置选项
- 与 Grafana 匹配的浅色/深色主题
- 更新了主题颜色
- 更好的错误显示
- 源中无数据时显示更清晰的消息
- 更新了边距(所有边距默认为 0)
- 更多记忆化以减少重新渲染
- 修复了工作流程并更新了 Node 版本
- 使用 grafana/create-plugin 更新
- 更新了许可证
- 添加了变更日志
已修复
- 高度/宽度调整的 Bug 修复
- 修复了脚本验证可能导致的崩溃
[1.6.7] - 2024-04-08
已修复
- 1.6.7 版本的小修复
[1.6.6] - 2024-03-27
已更改
- 将图像渲染函数移出了面板
- 改进了错误处理
- 更新到 create-plugin
[1.6.5] - 2024-01-08
已更改
- 更新了 README.md
- 修复了可调整大小的问题
[1.6.4] - 2023-11-16
已修复
- 修复了时区匹配器
[1.6.3] - 2023-11-16
已添加
- 添加了选择用于时间修正的列的功能
[1.6.2] - 2023-10-26
已改进
- 增强了 matchTimezone 逻辑
[1.6.1] - 2023-10-06
已添加
- 添加了图像导出格式选择器
已更改
- 现在传递整个变量对象
[1.6.0] - 2023-09-25
已修复
- 修复了“浏览器”时区问题
已更改
- 移除了强制默认值
- 添加了 matchTimezone 函数