插件元数据 (plugin.json)
plugin.json 文件是所有插件必需的。当 Grafana 启动时,它会扫描插件文件夹,并挂载包含 plugin.json 文件的所有文件夹,除非该文件夹包含名为 dist 的子文件夹。在这种情况下,Grafana 会改为挂载 dist 文件夹。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| id | 字符串 | 插件的唯一名称。如果插件发布在 grafana.com 上,则插件 id 必须遵循命名约定。模式: ^[0-9a-z]+\-([0-9a-z]+\-)?(app|panel|datasource)$ | ✅ |
| type | 字符串 | 插件类型。 枚举: "app", "datasource", "panel", "renderer" | ✅ |
| info | 对象 | 插件的元数据。部分字段用于 Grafana 的插件页面,如果插件已发布,则部分字段用于 grafana.com。 | ✅ |
| name | 字符串 | 插件的人类可读名称,显示在 UI 中给用户看。 | ✅ |
| dependencies | 对象 | 与 Grafana 和其他插件相关的依赖信息。 | ✅ |
| $schema | 字符串 | plugin.json 文件的模式定义。主要用于模式验证。 | |
| alerting | 布尔值 | 对于数据源插件,表示插件是否支持告警。需要将 backend 设置为 true。 | |
| annotations | 布尔值 | 对于数据源插件,表示插件是否支持注解查询。 | |
| autoEnabled | 布尔值 | 对于应在所有组织中启用并固定到导航栏的应用插件,请设置为 true。 | |
| backend | 布尔值 | 表示插件是否具有后端组件。 | |
| buildMode | 字符串 | 插件的构建模式。此字段在构建时自动设置,因此不应手动提供。 | |
| builtIn | 布尔值 | [仅限内部使用] 指示插件是否作为 Grafana 的一部分进行开发和分发。也称为“核心插件”。 | |
| category | 字符串 | 在“添加数据源”页面上使用的插件类别。 枚举: "tsdb", "logging", "cloud", "tracing", "profiling", "sql", "enterprise", "iot", "other" | |
| enterpriseFeatures | 对象 | Grafana Enterprise 特定的功能 | |
| executable | 字符串 | 后端组件可执行文件文件名的第一部分。可以针对不同的操作系统和架构构建多个可执行文件。Grafana 将检查名为 <executable>_<$GOOS>_<lower case $GOARCH><.exe for Windows> 的可执行文件,例如 plugin_linux_amd64。$GOOS 和 $GOARCH 的组合可以在此处找到:https://golang.ac.cn/doc/install/source#environment。 | |
| hideFromList | 布尔值 | [仅限内部使用] 从 Grafana 的 UI 列表中排除插件。仅允许用于 builtIn 插件。 | |
| includes | 对象数组 | 包含在插件中的资源。 | |
| logs | 布尔值 | 对于数据源插件,表示插件是否支持日志。它可能用于过滤仅日志功能。 | |
| metrics | 布尔值 | 对于数据源插件,表示插件是否支持指标查询。用于在面板编辑器中启用插件。 | |
| multiValueFilterOperators | 布尔值 | 对于数据源插件,表示插件是否支持 adhoc 过滤器中的多值运算符。 | |
| pascalName | 字符串 | [仅限内部使用] 插件的 PascalCase 名称。用于创建机器友好的标识符,通常用于代码生成。如果未提供,则默认为 name,但会转换为首字母大写并进行净化(仅允许字母字符)。 模式: ^([A-Z][a-zA-Z]{1,62})$ | |
| preload | 布尔值 | 在启动时初始化插件。默认情况下,插件在首次使用时初始化,但当 preload 设置为 true 时,插件会在 Grafana web 应用首次加载时加载。仅适用于应用插件。设置为 true 时,请实现前端代码分割以最大程度地减少性能影响。 | |
| queryOptions | 对象 | 对于数据源插件。插件的查询编辑器中有一个查询选项部分,如果需要可以启用这些选项。 | |
| routes | 对象数组 | 对于数据源插件。用于插件认证和向插件发出的 HTTP 请求添加请求头的代理路由。有关更多信息,请参阅数据源插件的认证。 | |
| skipDataQuery | 布尔值 | 对于面板插件。隐藏查询编辑器。 | |
| state | 字符串 | 将插件标记为预发布版本。 枚举: "alpha", "beta" | |
| streaming | 布尔值 | 对于数据源插件,表示插件是否支持流式传输。用于在 Explore 中启动实时流式传输。 | |
| tracing | 布尔值 | 对于数据源插件,表示插件是否支持追踪。例如,用于将日志(如 Loki 日志)与追踪插件关联。 | |
| iam | 对象 | Grafana 读取 Identity and Access Management 部分,并为插件初始化一个服务账号,该账号具有一套定制的 Grafana RBAC 权限。Grafana 将使用 GF_PLUGIN_APP_CLIENT_SECRET 环境变量与插件后端共享该服务账号的持有者令牌。需要 Grafana 10.3.0 或更高版本。目前,此功能位于 externalServiceAccounts 功能开关之后。要试用此功能,请按照此指南进行操作。 | |
| roles | 对象数组 | 插件定义的 RBAC 角色列表及其与基本角色(Viewer、Editor、Admin、Grafana Admin)的默认分配。需要 Grafana 9.4.0 或更高版本。 | |
| extensions | 对象 | 插件扩展是一种扩展 Grafana 核心 UI 或其他插件的方式。 |
info
插件的元数据。部分字段用于 Grafana 的插件页面,如果插件已发布,则部分字段用于 grafana.com。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| author | 对象 | 关于插件作者的信息。 | |
| build | 对象 | 构建信息 | |
| description | 字符串 | 插件描述。用于 Grafana 的插件页面和 grafana.com 上的搜索。 | |
| keywords | 字符串数组 | 插件关键词数组。用于 grafana.com 上的搜索。 | ✅ |
| links | 对象数组 | 要在该插件项目页面上显示的链接对象数组,格式为 {name: 'foo', url: 'http://example.com'} | |
| logos | 对象 | 用作插件图标的 SVG 图像。 | ✅ |
| screenshots | 对象数组 | 截图对象数组,格式为 {name: 'bar', path: 'img/screenshot.png'} | |
| updated | 字符串 | 此插件构建的日期。 模式: ^(\d{4}-\d{2}-\d{2}|\%TODAY\%)$ | ✅ |
| version | 字符串 | 此提交的SemVer 版本,例如 6.7.1。模式: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)|(\%VERSION\%)$ | ✅ |
info.author
关于插件作者的信息。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| name | 字符串 | 作者姓名。 | |
字符串 | 作者姓名。 格式: "email" | ||
| url | 字符串 | 作者网站链接。 格式: "uri" |
info.build
构建信息
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| time | 数字 | 插件构建时的时间,以 Unix 时间戳表示。 | |
| repo | 字符串 | ||
| branch | 字符串 | 构建插件所用的 Git 分支。 | |
| hash | 字符串 | 构建插件所用的 Git 提交哈希值 | |
| 数字 | 数字 | ||
| pr | 数字 | 构建插件所用的 GitHub pull request | |
| build | 数字 | 构建此插件所用的构建作业编号。 |
info.keywords[]
插件关键词数组。用于 grafana.com 上的搜索。
项
项类型: 字符串
最小项数 1
info.links[]
要在该插件项目页面上显示的链接对象数组,格式为 {name: 'foo', url: 'http://example.com'}
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| name | 字符串 | 链接的显示名称。具有预定义行为的特殊名称 • documentation - 在插件详情页设置文档链接• repository - 用于确定并链接到插件的代码库• license - 在插件详情页设置许可证链接• raise issue - 在插件详情页设置提出问题链接• sponsorship - 在插件详情页设置赞助此开发者链接,引导用户了解如何支持您的工作 | |
| url | 字符串 | 此特定链接使用的 URL 值。 格式: "uri" |
info.logos
用作插件图标的 SVG 图像。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| small | 字符串 | 指向插件小版本 Logo 的链接,必须是 SVG 图像。“大”和“小”Logo 可以是同一图像。 | ✅ |
| large | 字符串 | 指向插件大版本 Logo 的链接,必须是 SVG 图像。“大”和“小”Logo 可以是同一图像。 | ✅ |
info.screenshots[]
截图对象数组,格式为 {name: 'bar', path: 'img/screenshot.png'}
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| name | 字符串 | ||
| path | 字符串 |
dependencies
与 Grafana 和其他插件相关的依赖信息。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| grafanaVersion | 字符串 | (已弃用)此插件所需的 Grafana 版本,例如 6.x.x 7.x.x 表示插件需要 Grafana v6.x.x 或 v7.x.x。模式: ^([0-9]+)(\.[0-9x]+)?(\.[0-9x])?$ | |
| grafanaDependency | 字符串 | 此插件所需的 Grafana 版本。使用 https://github.com/npm/node-semver 进行验证。 模式: ^(<=|>=|<|>|=|~|\^)?([0-9]+)(\.[0-9x\*]+)?(\.[0-9x\*]+)?(\s(<=|>=|<|=>)?([0-9]+)(\.[0-9x\*]+)?(\.[0-9x\*]+)?)?$ | ✅ |
| plugins | 对象数组 | 此插件依赖的必需插件数组。只有非核心(即外部插件)才必须在此列表中指定。 | |
| extensions | 对象 | 此插件依赖的插件扩展。 |
dependencies.plugins[]
此插件依赖的必需插件数组。只有非核心(即外部插件)才必须在此列表中指定。
项
插件依赖项。用于在 Grafana UI 中显示有关插件依赖项的信息。
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| id | 字符串 | 模式: ^[0-9a-z]+\-([0-9a-z]+\-)?(app|panel|datasource)$ | ✅ |
| type | 字符串 | 枚举: "app", "datasource", "panel" | ✅ |
| name | 字符串 | ✅ |
dependencies.extensions
此插件依赖的插件扩展。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| exposedComponents | 字符串数组 | 此插件依赖的暴露组件 ID 数组。 |
dependencies.extensions.exposedComponents[]
此插件依赖的暴露组件 ID 数组。
项
项类型: 字符串
enterpriseFeatures
Grafana Enterprise 特定的功能
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| healthDiagnosticsErrors | 布尔值 | 启用/禁用健康诊断错误。需要 Grafana >=7.5.5。 默认值: false |
includes[]
包含在插件中的资源。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| uid | 字符串 | 包含的资源的唯一标识符 | |
| type | 字符串 | 枚举: "dashboard", "page", "panel", "datasource" | |
| name | 字符串 | ||
| component | 字符串 | (旧版)用于页面的 Angular 组件。 | |
| role | 字符串 | 用户在导航菜单中查看此页面所需的最低角色。 枚举: "Admin", "Editor", "Viewer" | |
| action | 字符串 | 用户在导航菜单中查看此页面必须具有的 RBAC 操作。警告:除非操作目标是插件,否则仅验证操作本身,而不验证其应用的具体内容。 | |
| path | 字符串 | 用于应用插件。 | |
| addToNav | 布尔值 | 将此项添加到导航菜单。 | |
| defaultNav | 布尔值 | 当用户点击侧边菜单中的图标时显示的页面或仪表盘。 | |
| icon | 字符串 | 在侧边菜单中使用的图标。有关可用图标的信息,请参阅图标概述。 |
queryOptions
对于数据源插件。插件的查询编辑器中有一个查询选项部分,如果需要可以启用这些选项。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| maxDataPoints | 布尔值 | 对于数据源插件。表示是否应在查询编辑器的查询选项部分显示最大数据点选项。 | |
| minInterval | 布尔值 | 对于数据源插件。表示是否应在查询编辑器的查询选项部分显示最小间隔选项。 | |
| cacheTimeout | 布尔值 | 对于数据源插件。表示是否应在查询编辑器的查询选项部分显示缓存超时选项。 |
routes[]
对于数据源插件。用于插件认证和向插件发出的 HTTP 请求添加请求头的代理路由。有关更多信息,请参阅数据源插件的认证。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| path | 字符串 | 对于数据源插件。调用被代理时,由 route URL 字段替换的路由路径。 | |
| method | 字符串 | 对于数据源插件。路由方法匹配 HTTP 动词,如 GET 或 POST。可以提供逗号分隔的多个方法列表。 | |
| url | 字符串 | 对于数据源插件。Route URL 是请求被代理到的位置。 | |
| reqSignedIn | 布尔值 | ||
| reqRole | 字符串 | ||
| reqAction | 字符串 | 用户使用此路由必须具有的 RBAC 操作。警告:除非操作目标是插件(或嵌套的数据源插件),否则仅验证操作本身,而不验证其应用的具体内容。 | |
| headers | 数组 | 对于数据源插件。路由头用于向代理请求添加 HTTP 头。 | |
| body | 对象 | 对于数据源插件。路由头设置代理请求的主体内容和长度。(*注意:原文此处描述似乎有误,可能应指 body 本身而非 headers*) | |
| tokenAuth | 对象 | 对于数据源插件。与 OAuth API 一起使用的令牌认证部分。 | |
| jwtTokenAuth | 对象 | 对于数据源插件。与 JWT OAuth API 一起使用的令牌认证部分。 | |
| urlParams | 对象数组 | 向代理路由添加 URL 参数 |
routes[].headers[]
对于数据源插件。路由头用于向代理请求添加 HTTP 头。
routes[].body
对于数据源插件。路由头设置代理请求的主体内容和长度。(*注意:原文此处描述似乎有误,可能应指 body 本身而非 headers*)
routes[].tokenAuth
对于数据源插件。与 OAuth API 一起使用的令牌认证部分。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| url | 字符串 | 用于获取认证令牌的 URL。 | |
| scopes | 字符串数组 | 您的应用程序应被授予访问权限的范围列表。 | |
| params | 对象 | 令牌认证请求的参数。 |
routes[].tokenAuth.scopes[]
您的应用程序应被授予访问权限的范围列表。
项
项类型: 字符串
routes[].tokenAuth.params
令牌认证请求的参数。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| grant_type | 字符串 | OAuth 授权类型 | |
| client_id | 字符串 | OAuth 客户端 ID | |
| client_secret | 字符串 | OAuth 客户端 secret。通常通过解密 SecureJson blob 中的 secret 来填充。 | |
| resource | 字符串 | OAuth 资源 |
routes[].jwtTokenAuth
对于数据源插件。与 JWT OAuth API 一起使用的令牌认证部分。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| url | 字符串 | 用于获取 JWT 令牌的 URL。 格式: "uri" | |
| scopes | 字符串数组 | 您的应用程序应被授予访问权限的范围列表。 | |
| params | 对象 | JWT 令牌认证请求的参数。 |
routes[].jwtTokenAuth.scopes[]
您的应用程序应被授予访问权限的范围列表。
项
项类型: 字符串
routes[].jwtTokenAuth.params
JWT 令牌认证请求的参数。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| token_uri | 字符串 | ||
| client_email | 字符串 | ||
| private_key | 字符串 |
routes[].urlParams[]
向代理路由添加 URL 参数
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| name | 字符串 | URL 参数名称 | |
| content | 字符串 | URL 参数值 |
iam
Grafana 读取 Identity and Access Management 部分,并为插件初始化一个服务账号,该账号具有一套定制的 Grafana RBAC 权限。Grafana 将使用 GF_PLUGIN_APP_CLIENT_SECRET 环境变量与插件后端共享该服务账号的持有者令牌。需要 Grafana 10.3.0 或更高版本。目前,此功能位于 externalServiceAccounts 功能开关之后。要试用此功能,请按照此指南进行操作。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| permissions | 对象数组 | 权限是插件需要其关联服务账号拥有的、用于查询 Grafana 的权限。 |
iam.permissions[]
权限是插件需要其关联服务账号拥有的、用于查询 Grafana 的权限。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| action | 字符串 | 操作,例如:teams:read。 | |
| scope | 字符串 | 插件需要访问的范围,例如:teams:*。 |
roles[]
插件定义的 RBAC 角色列表及其与基本角色(Viewer、Editor、Admin、Grafana Admin)的默认分配。需要 Grafana 9.4.0 或更高版本。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| role | 对象 | 角色将您的插件相关的 RBAC 权限分组(例如:Projects Admin 会将创建、读取、写入和删除项目的权限分组)。您的角色中定义的 RBAC 操作必须以您的插件 id 开头(例如:grafana-test-app.projects:read)。 | |
| grants | 字符串数组 | 角色与 Grafana 基本角色(Viewer、Editor、Admin、Grafana Admin)的默认分配。 |
roles[].role
角色将您的插件相关的 RBAC 权限分组(例如:Projects Admin 会将创建、读取、写入和删除项目的权限分组)。您的角色中定义的 RBAC 操作必须以您的插件 id 开头(例如:grafana-test-app.projects:read)。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| name | 字符串 | 角色的显示名称。 | |
| description | 字符串 | 描述角色的目的。 | |
| permissions | 对象数组 | 插件上的 RBAC 权限。 |
roles[].role.permissions[]
插件上的 RBAC 权限。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| action | 字符串 | ||
| scope | 字符串 |
roles[].grants[]
角色与 Grafana 基本角色(Viewer、Editor、Admin、Grafana Admin)的默认分配。
项
项类型: 字符串
extensions
插件扩展是一种扩展 Grafana 核心 UI 或其他插件的方式。
属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| addedComponents | 对象数组 | 此列表必须包含您的插件使用 .addComponent() 注册到其他扩展点的所有组件扩展。未在此处列出的组件将无法工作。 | |
| addedLinks | 对象数组 | 此列表必须包含您的插件使用 .addLink() 注册到其他扩展点的所有链接扩展。未在此处列出的链接将无法工作。 | |
| exposedComponents | 对象数组 | 此列表必须包含您的插件使用 .exposeComponent() 暴露的所有组件。未在此处列出的组件将无法工作。 | |
| extensionPoints | 对象数组 | 此列表必须包含您的插件使用 usePluginLinks() 或 usePluginComponents() 定义的所有扩展点。未在此处列出的扩展点将无法工作。 |
extensions.addedComponents[]
此列表必须包含您的插件使用 .addComponent() 注册到其他扩展点的所有组件扩展。未在此处列出的组件将无法工作。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| targets | 字符串数组 | 您的插件注册扩展所针对的扩展点 ID,例如 ["grafana/user/profile/tab"] | ✅ |
| title | 字符串 | 您的组件扩展的标题。 最小长度: 10 | ✅ |
| description | 字符串 | 关于您的组件扩展的附加信息。 |
extensions.addedComponents[].targets[]
您的插件注册扩展所针对的扩展点 ID,例如 ["grafana/user/profile/tab"]
项
项类型: 字符串
extensions.addedLinks[]
此列表必须包含您的插件使用 .addLink() 注册到其他扩展点的所有链接扩展。未在此处列出的链接将无法工作。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| targets | 字符串数组 | 您的插件注册扩展所针对的扩展点 ID,例如 ["grafana/dashboard/panel/menu"] | ✅ |
| title | 字符串 | 您的链接扩展的标题。 最小长度: 10 | ✅ |
| description | 字符串 | 关于您的链接扩展的附加信息。 |
extensions.addedLinks[].targets[]
您的插件注册扩展所针对的扩展点 ID,例如 ["grafana/dashboard/panel/menu"]
项
项类型: 字符串
extensions.exposedComponents[]
此列表必须包含您的插件使用 .exposeComponent() 暴露的所有组件。未在此处列出的组件将无法工作。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| id | 字符串 | 暴露组件的唯一标识符。用于在其他插件中引用该组件。格式必须如下:{PLUGIN_ID}/component-name/v1。建议添加版本后缀以防止未来出现重大更改。例如:myorg-extensions-app/exposed-component/v1。模式: ^[0-9a-z]+-([0-9a-z]+-)?(app|panel|datasource)\/[a-zA-Z0-9_-]+\/v[0-9_.-]+$ | ✅ |
| title | 字符串 | 您的暴露组件的标题。 | |
| description | 字符串 | 关于您的暴露组件的附加信息。 |
extensions.extensionPoints[]
此列表必须包含您的插件使用 usePluginLinks() 或 usePluginComponents() 定义的所有扩展点。未在此处列出的扩展点将无法工作。
项
项属性
| 名称 | 类型 | 描述 | 必需 |
|---|---|---|---|
| id | 字符串 | 您的扩展点的唯一标识符。用于在其他插件中引用该扩展点。格式必须如下:{PLUGIN_ID}/extension-point-name/v1。建议添加版本后缀以防止未来出现重大更改。例如:myorg-extensions-app/extension-point/v1。模式: ^[0-9a-z]+-([0-9a-z]+-)?(app|panel|datasource)\/[a-zA-Z0-9_-]+\/v[0-9_.-]+$ | ✅ |
| title | 字符串 | 您的扩展点的标题。 | |
| description | 字符串 | 关于您的扩展点的附加信息。 |