插件 〉Plotly


开发者

nLine

订阅以接收偶尔的产品新闻和更新



面板
社区

Plotly

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

Grafana 的 Plotly 面板

Marketplace Downloads

使用 Plotly.js 在 Grafana 中创建高级交互式图表。

主要特性

  • 利用完整的 Plotly.js 功能灵活创建图表
  • 支持 YAML/JSON,方便配置
  • 深色/浅色主题兼容性
  • 自动和手动时区调整
  • 跨追踪数据应用
  • 可展开的代码编辑器,用于定制
  • Grafana 变量集成
  • 全面错误处理
  • 支持多种格式(SVG、PNG、JPEG、WebP)的高分辨率图像导出

有关最新更新的完整列表,请参阅我们的变更日志

开始使用

nLine 开发的 Plotly 面板在 Grafana 中提供了增强的数据可视化控制。它采用基于组件的方法,允许您独立修改图表元素,无需复杂的 JavaScript 交互。

面板结构

面板配置包含五个主要组件

  1. allData: 应用于 Plotly 图表上的所有追踪
  2. data: 定义图表的数据系列(追踪)
  3. layout: 控制图表的外观和轴
  4. config: 设置图表范围的选项
  5. 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: 一个帧对象数组,用于动画图表

注意: dataframes 属性应该是对象数组。“跨追踪数据”字段可以是一个对象,它会将参数应用于脚本部分返回的所有追踪。对象会与脚本对象合并,脚本对象具有优先级(例如,来自脚本的 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

更多信息请访问插件安装文档。

变更日志

本项目所有重要变更将记录在此文件中。

[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 函数