
DataHub Grafana 采集连接器图表血缘、列级血缘与看板所有权提取实践【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本篇围绕 DataHub 摄取框架中的 Grafana 源type: grafana展开聚焦其两大核心能力——图表与数据源之间的血缘提取含 SQL 列级血缘和看板所有权提取。读完本文你将掌握include_lineage、include_column_lineage、connection_to_platform_map、ingest_owners、remove_email_suffix等关键参数的配置方法与默认行为并理解底层如何通过 Grafana REST API 和模板变量清洗实现 SQL 血缘解析从而为生产环境编写可复制、可验证的 Grafana 摄取配置。连接器能力总览Grafana 源在代码中以GrafanaSource实现支持状态GA标记与多项默认启用的能力声明见 GrafanaSourcePLATFORM_INSTANCE、DELETION_DETECTION状态化陈旧实体删除、LINEAGE_COARSE数据集级血缘、LINEAGE_FINE列级血缘、OWNERSHIP、TAGS均默认开启。采集结果的概念映射关系Folder → Container、Dashboard → Container、Panel → Chart、Data Source → Dataset、Dashboard Owner → Corp User、Tags → Tag可参考 README 中的 Concept Mapping 表格。一个完整的最小可运行配置示例来自仓库自带的 grafana_recipe.ymlsource: type: grafana config: # Coordinates platform_instance: production # optional env: PROD # optional url: https://grafana.company.com service_account_token: ${GRAFANA_SERVICE_ACCOUNT_TOKEN} # SSL verification for HTTPS connections verify_ssl: true # optional, default is true # Ownership configuration ingest_owners: true # optional, default is true - extract dashboard ownership remove_email_suffix: true # optional, default is true - remove email suffix like acryl.io # Source type mapping for lineage connection_to_platform_map: postgres: platform: postgres database: grafana # optional database_schema: grafana # optional platform_instance: database_2 # optional env: PROD # optional mysql_uid_1: # Grafana datasource UID platform: mysql platform_instance: database_1 # optional database: my_database # optional sink: # sink configs血缘提取配置Grafana 源可以从面板Panel引用的 SQL 查询和数据源配置中提取血缘分为数据集级与列级两个层次。相关配置项定义在 GrafanaSourceConfig 中source: type: grafana config: url: https://grafana.company.com service_account_token: your_token # 血缘提取开关默认: true include_lineage: true # 来自 SQL 查询的列级血缘默认: true # 仅在 include_lineage 为 true 时生效 include_column_lineage: true # 血缘提取的平台映射 connection_to_platform_map: postgres_datasource_uid: platform: postgres platform_instance: my_postgres env: PROD database: analytics database_schema: public各参数的默认值与含义来自 grafana_config.py 的 Pydantic 字段定义参数默认值说明include_lineagetrue是否提取图表与数据源之间的血缘。开启后源会解析面板 SQL 查询与数据源配置来构建血缘关系include_column_lineagetrue是否从 SQL 查询提取字段级血缘仅当include_lineage为true时生效connection_to_platform_map空字典Grafana 数据源类型/UID 到平台连接配置的映射用于把血缘落点到正确的 DataHub 平台血缘能力涵盖四个方面数据集级血缘将图表链接到其底层数据源列级血缘从 SQL 查询中提取字段到字段的关系平台映射将 Grafana 数据源映射到其真实平台保证血缘 URN 指向正确的数据集SQL 解析支持解析面板中的 SQL 查询以获得更细粒度的血缘。性能提示当不需要血缘信息时可设置include_lineage: false关闭血缘提取以提升摄取性能。从源码看GrafanaSource.init中只有当config.include_lineage为真时才会实例化LineageExtractor因此关闭后不会执行任何 SQL 解析开销。connection_to_platform_map 参数详解connection_to_platform_map的每个条目对应 PlatformConnectionConfig字段如下字段必填说明platform是平台名如postgres、mysql、snowflakedatabase否默认数据库名database_schema否默认 schema 名platform_instance否继承自PlatformInstanceConfigMixinenv否继承自EnvConfigMixin映射的键既可以是数据源类型名如postgres也可以是具体数据源的 UID如mysql_uid_1以便对同一类型的多个数据源分别指定不同的库和实例。列级血缘的底层实现SQL 模板变量清洗列级血缘依赖对面板 SQL 的解析而 Grafana 面板中的 SQL 常包含会破坏 SQL 解析器的模板语法。仓库中的 lineage.py 提供了_clean_grafana_template_variables函数在解析前做清洗处理策略如下带参数的时间/过滤宏如$__timeFilter(column)、$__timeGroup(...)替换为布尔表达式TRUE独立出现的时间/过滤宏如WHERE event_timestamp $__timeFilter替换为合法谓词 TIMESTAMP 2000-01-01其他通用宏$__interval、$__range等替换为数值1废弃的[[variable]]语法替换为合法标识符grafana_identifier现代语法${variable}与${variable:format}替换为字符串字面量grafana_var简单$variable不在引号内替换为grafana_var而引号内的$status保持原样。清洗后的 SQL 交给 DataHub 的 sqlglot 血缘解析器create_lineage_sql_parsed_result最终生成FineGrainedLineage等 MCP 消息。相关行为可用单测 test_grafana_lineage.py 与 test_grafana_query_extraction.py 验证。优化列级血缘的建议来自 grafana_pre.md在数据源连接配置中配好 database/schema 信息设置connection_to_platform_map使其覆盖所有需要血缘的数据源。所有权提取配置Grafana 源从看板的创建者dashboard creator提取所有权并将其指定为 Technical Owner。配置如下source: type: grafana config: url: https://grafana.company.com service_account_token: your_token # 所有权提取默认: true ingest_owners: true # 去除邮箱后缀如 acryl.io默认: true remove_email_suffix: true对应的所有权能力Technical Owner 分配看板创建者自动被指定为 Technical Owner邮箱后缀控制通过remove_email_suffix控制 Grafana 用户邮箱如何转换为 DataHub 用户 URN——默认去除domain后缀仅用本地部分作为用户标识禁用所有权设置ingest_owners: false可完全跳过所有权提取。这两个字段的定义见 grafana_config.pyingest_owners默认trueremove_email_suffix默认true描述示例为acryl.io。提取模式与其他可用参数原文档提到的能力均依赖增强模式Enhanced Mode下的 API 访问。Grafana 源支持两种提取模式详见 grafana_pre.md增强模式默认需要Admin 权限的服务账号 token可读取看板/文件夹详情、数据源配置、用户信息与面板配置从而获得完整的层级、面板与血缘数据基础模式basic_mode: true仅需Viewer 权限通过/api/search端点提取看板实体不含文件夹层级、面板详情、血缘或 schema 元数据用于向后兼容受限权限场景。除本文档重点参数外GrafanaSourceConfig 还定义了以下与运行行为直接相关的字段可按需补充到 recipe 中参数默认值说明url必填Grafana 地址形如http://your-grafana-instance无尾部斜杠字段校验器会自动去除service_account_token必填服务账号 token以SecretStr存储verify_ssltrueHTTPS 连接是否校验 SSL 证书page_size100分页遍历文件夹与看板时每页条数basic_modefalse启用受限权限的基础提取模式dashboard_pattern/folder_pattern允许全部用正则AllowDenyPattern过滤要摄取的看板/文件夹ingest_tagstrue是否摄取看板与图表标签支持普通标签与 key:value 标签skip_text_panelsfalse是否跳过 text 面板无数据可视化对血缘无意义platform_instance/env无平台实例与环境标注stateful_ingestionnull状态化陈旧实体删除配置增强模式下的摄取流程按阶段划分并输出报告阶段常量定义于 grafana_source.pyGrafana Basic Dashboard Extraction、Grafana Folder Extraction、Grafana Dashboard Extraction、Grafana Panel Extraction报告结构见 report.py。限制与故障排查限制模块行为受源 API、权限和平台暴露的元数据范围约束不支持或条件性功能应参考上文能力说明如基础模式不含血缘与面板详情。故障排查建议若摄取失败建议按以下顺序排查凭证确认service_account_token有效且权限级别匹配所选模式增强模式需 Admin基础模式需 Viewer权限与连通性确认 token 可读看板/文件夹、数据源配置/api/search等端点可达url无尾部斜杠、verify_ssl与内网证书环境一致范围过滤检查dashboard_pattern、folder_pattern是否意外排除了目标内容日志审查摄取报告中的 source-specific 错误如基础模式的 Dashboard Search Error 报告项见 grafana_source.py并据此调整配置。测试与验证路径如需自行验证本连接器的行为仓库提供了分层测试单元测试tests/unit/grafana/ 下的test_grafana_source.py、test_grafana_lineage.py、test_grafana_api.py、test_grafana_entity_mcp_builder.py、test_grafana_field_utils.py、test_grafana_models.py、test_grafana_report.py、test_grafana_validation.py等集成测试tests/integration/grafana/ 提供含 Postgres 初始化数据init.sql、看板与数据源 provision 配置provisioning/的完整 docker-compose 环境以及 golden 文件 grafana_mcps_golden.json增强模式与 grafana_basic_mcps_golden.json基础模式可用于比对 MCP 输出是否与预期一致。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考