news 2026/9/15 1:42:57

使用 OpenMetadata Grafana 连接器导入仪表盘与面板:连接配置指南与源码解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 OpenMetadata Grafana 连接器导入仪表盘与面板:连接配置指南与源码解析

使用 OpenMetadata Grafana 连接器导入仪表盘与面板:连接配置指南与源码解析

【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata

本指南以 OpenMetadata 仓库中 Grafana Dashboard 连接器的配置文档(openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Grafana.md)为主体,讲解如何配置 Grafana 实例连接、完成认证并导入仪表盘与面板元数据。读完本文,你将掌握 Grafana 连接器的全部连接参数含义与推荐取值、Service Account Token 认证细节,并了解连接测试、分页拉取、面板与血缘提取在源码层面的完整实现链路。

一、前置要求:认证方式与权限

要将 Grafana 中的仪表盘(Dashboard)和面板(Panel)导入 OpenMetadata,你需要对 Grafana 实例拥有合适的访问权限,并准备正确的认证凭据。

使用 Service Account Token 认证:OpenMetadata 通过 Grafana HTTP API 拉取元数据,认证方式为 Bearer Token。当前仓库推荐使用 Service Account Token,其格式通常以glsa_开头(例如glsa_xxxxx)。

Token 必须具备读取权限:该 Token 需要拥有读取仪表盘(dashboards)、文件夹(folders)和数据源(datasources)的权限。为覆盖全部元数据,官方文档建议直接使用Admin 角色的 Token,这是实现完整元数据提取的推荐做法。

关于这一认证约定,可以从源码中得到印证。在 client.py 的GrafanaApiClient.__init__中,客户端会对 Token 前缀做一次非阻塞校验——若 Token 不以glsa_开头,会输出一条 warning 日志,提示“Legacy API keys are no longer supported by Grafana as of January 2025, please create a Service Account Token in Grafana”,即旧版 API Key 自 2025 年 1 月起已被 Grafana 官方弃用,请改用 Service Account Token:

if not api_key.startswith("glsa_"): logger.warning( "Token does not appear to be a Service Account Token (should start with 'glsa_'). " "Legacy API keys are no longer supported by Grafana as of January 2025. " "Please create a Service Account Token in Grafana." )

二、连接配置项详解(Connection Details)

Grafana 连接器在 OpenMetadata UI 的“Add Service → Dashboard → Grafana”表单中提供以下配置项,其定义与默认值以 grafanaConnection.json 中的 JSON Schema 为准。

1. Host and Port(hostPort

Grafana 实例的基础 URL(Base URL),即连接器的访问入口。

示例取值:

  • Grafana Cloud:https://<your-org>.grafana.net
  • 自托管(Self-hosted):https://grafana.company.com
  • 本地开发:http://localhost:3000

容器环境注意事项:如果你以 Docker 方式运行 OpenMetadata ingestion,而 Grafana 实例部署在本机localhost,则应将主机名改为host.docker.internal(例如http://host.docker.internal:3000),以便容器内进程访问宿主机服务。

在 JSON Schema 中,该字段为uri格式的必填字符串。底层客户端在 client.py 中会先对传入 URL 做rstrip("/")处理,再拼接/api前缀发起请求,因此 URL 尾部是否带斜杠不影响请求正确性。

2. Service Account Token(apiKey

用于调用 Grafana API 的 Service Account Token,即上节所述的glsa_前缀令牌。在 Schema 中该字段以password格式存储,属于必填项,OpenMetadata 在展示与日志中会对其做脱敏处理。

关键要点:

  • 优先使用 Service Account Token(格式如glsa_xxxxx);
  • Grafana 自 2025 年 1 月起不再支持 Legacy API Keys,请勿继续使用旧式 API Key;
  • 自托管实例与 Grafana Cloud 均支持;
  • 推荐使用 Admin 角色以获得完整元数据提取能力。

3. Verify SSL(verifySSL

控制连接 Grafana 时是否校验 SSL 证书:

  • 默认值:true(开启证书校验);
  • 仅在开发或测试等非生产环境中,且确认网络链路可信时,才建议关闭。

该布尔值在 connection.py 中被透传给 HTTP 客户端:verify_ssl=(self.service_connection.verifySSL if self.service_connection.verifySSL is not None else True),并最终设置为 requests Session 的session.verify属性。对应地,单元测试 test_grafana_client.py 中专门验证了verify_ssl=Falsesession.verifyFalse

4. Page Size(pageSize

分页请求 Grafana API 时每页返回的记录条数:

  • 默认值:100
  • 当实例中的仪表盘数量较多时,可适当增大该值以减少 API 调用次数;Schema 中约束最小值为1

分页逻辑在 client.py 的get_folderssearch_dashboards中实现:客户端从page = 1开始循环请求,携带{"page": page, "limit": self.page_size}参数,当返回条数小于page_size或返回空列表时停止翻页。单元测试 test_grafana_client.py 通过 mock 两页数据验证了该翻页逻辑(page_size=2时共发起 2 次请求)。

配置参数速查表

参数字段名必填默认值说明
Host and PorthostPortGrafana 实例基础 URL,Docker 环境可用host.docker.internal
Service Account TokenapiKeyglsa_前缀 Token,Admin 角色推荐
Verify SSLverifySSLtrue是否校验 SSL 证书,仅开发/测试可关闭
Page SizepageSize100分页大小,仪表盘多时可调大以减少 API 调用

除上述四项外,Schema 还定义了dashboardFilterPattern(按正则过滤仪表盘)、chartFilterPattern(按正则过滤图表)与supportsMetadataExtraction字段,并在required中声明hostPortapiKey为必填项。

三、连接构建与连接测试的源码实现

Grafana 连接器在 Python 侧的模块结构为:

  • connection.py:连接构建与连通性测试;
  • client.py:Grafana HTTP API 客户端;
  • metadata.py:元数据提取主流程;
  • models.py:Grafana API 响应的 Pydantic 模型;
  • service_spec.py:将GrafanaSourceGrafanaConnection组装为服务规格。

GrafanaConnection._get_client中,四个配置参数被逐一映射到GrafanaApiClient构造函数:host_portapi_key(通过get_secret_value()解密)、verify_ssl(为空时回退为True)、page_size(为空时回退为100)。

连接测试流程(test_connection)调用client.test_connection(),其底层请求 Grafana 的GET /api/org接口——能成功返回组织信息即视为连通。该探测逻辑在 test_grafana_client.py 中有对应断言(URL 为https://grafana.example.com/api/org)。因此,用于连接测试的 Token 至少需要具备访问org接口的权限,这进一步印证了推荐使用具备完整读权限(Admin)角色的必要性。

四、从连接参数到元数据导入的完整链路

配置好上述参数后,Grafana 连接器会依次完成以下元数据提取步骤(对应 metadata.py):

  1. 准备阶段(prepare:调用get_datasources()GET /api/datasources)拉取全部数据源,并按 UID 与名称双重建索引,供后续血缘解析使用;
  2. 仪表盘列表(get_dashboards_list:调用search_dashboards()GET /api/search,携带type=dash-db与分页参数)获取仪表盘列表,每个条目以 UID 作为 OpenMetadata 中的实体名称;
  3. 仪表盘详情(get_dashboard_details:对每个 UID 调用GET /api/dashboards/uid/{uid}获取完整定义(标题、描述、标签、面板、URL 等),并通过createdBy尝试匹配 OpenMetadata 中的用户作为 Owner;
  4. 面板提取(yield_dashboard_chart:遍历仪表盘panels数组,跳过row(行容器)与text类型面板,将每个面板映射为 Chart 实体。需要注意,面板 ID 仅在单个仪表盘内唯一,因此图表名称采用dashboard_uid + "_" + panel_id的组合以保证全局唯一。折叠行(collapsed row)中的子面板会通过_flatten_panels递归展开后再处理;
  5. 面板类型映射(_map_panel_type_to_chart_type:将 Grafana 面板类型映射为标准图表类型,例如timeseries/graph→ Line、table→ Table、gauge→ Gauge、piechart→ Pie、heatmap→ Heatmap、geomap→ Map、logs→ Table 等,未匹配的类型回退为 Other;
  6. 血缘提取(yield_dashboard_lineage_details:从面板的targets中提取查询语句(优先读取rawSql/rawSQL字段,兼容 Trino、Athena 等不同 SQL 插件的字段命名差异),跳过 Prometheus、Elasticsearch 等非 SQL 数据源类型(见NON_SQL_DATASOURCE_TYPES),随后通过LineageParser解析 SQL 中的源表,再结合db_service_prefix前缀过滤与 OpenMetadata 搜索匹配表实体,建立“表 → 仪表盘”的血缘关系。

这些流程均以配置小节中的hostPortapiKeyverifySSLpageSize为基础运行,其中pageSize直接影响第 1、2 步的分页请求次数。

五、错误处理与故障排查要点

从 client.py 的_make_request可以提炼出以下排查依据:

  • 401 / 403(权限不足):客户端会记录 warning 日志“Permission denied for …”,并跳过该接口继续后续处理,不会中断整个工作流。若发现仪表盘或数据源导入不完整,请优先检查 Token 权限是否覆盖 dashboards、folders、datasources 读取(Admin 角色为最稳妥选择);
  • 其他 HTTP 错误与网络异常:记录 error 日志后返回空结果,对应接口的数据会被跳过;
  • Token 格式告警:Token 不以glsa_开头时会输出 warning,提示使用 Service Account Token——注意这与 401/403 是两类独立问题:格式正确但权限不足会触发前者,格式不合法则可能在 Grafana 侧直接鉴权失败。

上述错误分支在 test_grafana_client.py 中均有覆盖(401 返回空列表、403 返回None、500 返回空列表、通用异常返回空列表),可以作为排查行为的参考依据。

六、相关代码与测试索引

如需深入阅读或二次开发,可在仓库中定位以下文件:

  • 连接配置文档:openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Grafana.md
  • 连接配置 JSON Schema:openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/grafanaConnection.json
  • 连接构建与测试:ingestion/src/metadata/ingestion/source/dashboard/grafana/connection.py
  • API 客户端:ingestion/src/metadata/ingestion/source/dashboard/grafana/client.py
  • 元数据提取主流程:ingestion/src/metadata/ingestion/source/dashboard/grafana/metadata.py
  • API 响应模型:ingestion/src/metadata/ingestion/source/dashboard/grafana/models.py
  • 单元测试:ingestion/tests/unit/topology/dashboard/test_grafana_client.py、ingestion/tests/unit/topology/dashboard/test_grafana.py、ingestion/tests/unit/topology/dashboard/test_grafana_lineage.py、ingestion/tests/unit/topology/dashboard/test_grafana_simple.py、ingestion/tests/unit/source/dashboard/grafana/test_connection.py

七、小结

Grafana 连接器的配置核心可以归结为四点:正确的主机地址(含 Docker 场景的host.docker.internal特例)、glsa_前缀的 Service Account Token(推荐 Admin 角色)、按环境取舍的 SSL 校验开关、以及按仪表盘规模调优的分页大小。理解这四个参数在 JSON Schema 与 Python 客户端中的映射关系,再结合连接测试(GET /api/org)、分页拉取(page/limit)与 401/403 告警等源码行为,即可在 OpenMetadata 中快速、稳定地完成 Grafana 仪表盘与面板的元数据导入。

【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 1:42:55

Rust 1.XX (beta) -> Rust 1.XX

Rust 1.XX (beta) -> ## Rust 1.XX 【免费下载链接】rust-clippy A bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/ 项目地址: https://gitcode.com/GitHub_Trending/ru/rust-clippy - 更新新稳定版本…

作者头像 李华
网站建设 2026/9/15 1:41:20

RAG工程落地全链路实战:从文档切块到K8s生产部署

1. 项目概述&#xff1a;这不是“速成课”&#xff0c;而是一份RAG工程落地的完整施工图你点开这个标题&#xff0c;第一反应可能是——又一个标题党&#xff1f;7天从小白到大神&#xff1f;吊打付费&#xff1f;存下吧很难找全&#xff1f;这些话术确实刺眼&#xff0c;但如果…

作者头像 李华
网站建设 2026/9/15 1:40:11

用Doom实测Astra云电脑:老游戏才是串流延迟的照妖镜

现在测云电脑的人&#xff0c;第一反应都是打开 3A 大作&#xff0c;画面一糊、帧率一掉就断定平台不行。但我一直觉得这个思路反了——真正能看出一个串流平台底子的&#xff0c;恰恰是那些“看起来毫无压力”的老游戏。Doom 这种老祖宗级别的 FPS&#xff0c;对帧率天花板要求…

作者头像 李华
网站建设 2026/9/15 1:39:21

Flutter与OpenHarmony构建高性能播放器进度条实践

1. 为什么选择 Flutter OpenHarmony 构建播放器控件在移动端开发领域&#xff0c;播放器进度条看似简单&#xff0c;实则涉及跨平台渲染性能、手势交互精度、状态同步等复杂问题。传统方案通常面临三个困境&#xff1a;一是原生开发需要针对Android/iOS分别实现&#xff0c;维…

作者头像 李华
网站建设 2026/9/15 1:37:26

实体关系抽取实战:从依赖树到图卷积神经网络的完整实现

简介&#xff1a;基于图卷积神经网络的实体关系抽取项目&#xff0c;面向深度学习、自然语言处理方向的在校学生、研究人员及企业开发者&#xff0c;完整覆盖实体关系抽取中数据预处理、GCN模型构建、训练测试、结果评估与可视化展示的流程。整个资源包共41个文件&#xff0c;以…

作者头像 李华