ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenMetadata SSRS 连接器实战指南:从 REST API 接入配置到报表元数据与血缘提取

OpenMetadata SSRS 连接器实战指南:从 REST API 接入配置到报表元数据与血缘提取 OpenMetadata SSRS 连接器实战指南从 REST API 接入配置到报表元数据与血缘提取【免费下载链接】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 仓库中的 SSRSSQL Server Reporting Services连接器文档与源码系统讲解如何在 OpenMetadata 中接入 SSRS 报表服务器涵盖权限前置要求、完整的连接参数说明Host/Port、域账号、SSL 校验等、底层 REST API 调用机制NTLM 认证、OData 分页、RDL 解析以及如何通过元数据摄取流水线将 SSRS 报表、图表、数据集与血缘关系同步到 OpenMetadata。读完本文你将能够独立完成 SSRS 服务的连接配置、连通性测试并理解摄取过程的内部原理便于排查问题与二次开发。SSRS 连接器能做什么SSRS 是微软提供的本地化on-premises报表服务用于创建、部署和管理分页报表。OpenMetadata 的 SSRS 连接器通过报表服务器的 REST API v2.0 读取目录信息将报表与文件夹以标准化的元数据实体导入 OpenMetadataDashboard报表每个 SSRS 报表作为一个 Dashboard 实体包含名称、描述、路径、访问 URL 与所有者信息Chart图表每个报表同时生成一个 Chart 实体ChartType.Other便于在图表维度统一检索Dashboard Data Model数据集解析报表 RDL 定义中的 DataSet生成SsrsDataModel类型的数据模型包含查询 SQL 与字段SSRS Field列Lineage血缘解析数据集查询语句与 OpenMetadata 中已登记的数据库表建立「表 → 报表/数据模型」的血缘关系。上述行为可在摄取源码 ingestion/src/metadata/ingestion/source/dashboard/ssrs/metadata.py 中得到印证yield_dashboard、yield_dashboard_chart、yield_datamodel与yield_dashboard_lineage_details分别对应这四类实体的产出逻辑。接入前置要求Requirements要访问 SSRS REST API 并将报表导入 OpenMetadata需要准备一个在 SSRS 实例上具有相应权限的服务账号该账号在 SSRS 门户上至少需要Browser浏览者角色才能列出报表与文件夹若希望完整提取元数据包括数据源信息建议授予Content Manager内容管理员角色报表服务器必须启用SSRS REST API v2.0SSRS 2017 及更高版本提供。关于权限要求的细节同时可以在 openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Ssrs.md 中查看。从源码看客户端在test_access中请求/Folders、在test_get_reports中请求/Reports端点见 client.py因此该账号至少需要能访问这两个 OData 资源否则连接测试会直接失败。连接参数详解Connection DetailsSSRS 连接的所有配置项定义在 JSON Schema ssrsConnection.json 中。其中hostPort、username、password为必填项required数组其余参数可选。下面逐一说明。Host and PorthostPortSSRS 报表服务器实例的基础 URL格式为 URI例如http://ssrs.example.com/reports https://ssrs.example.com/Reports客户端会基于该地址拼接 REST API 路径{hostPort}/api/v2.0源码常量API_VERSION api/v2.0。报表的访问 URL 则形如{hostPort}/report{report.path}。Usernameusername用于连接 SSRS 的用户名。SSRS 通常使用 Windows 身份验证因此域账号格式DOMAIN\username如CORP\report_user本地账号格式直接写username。该账号需要有报表服务器上的相应权限见上文 Requirements。从源码 client.py 可见客户端使用requests_ntlm的HttpNtlmAuth(username, password)进行 NTLM 身份认证这正是 Windows 域集成认证的标准做法。Passwordpassword连接所用用户账号的密码。在 JSON Schema 中该字段类型为password在 OpenMetadata UI 与 API 中均会作为敏感信息加密存储配置时不会明文展示。Verify SSLverifySSL控制连接 SSRS 时是否校验 SSL 证书可选值如下取值含义适用场景validate使用 CA 公钥证书校验服务器证书生产环境推荐ignore跳过证书校验仅限开发/测试环境no-ssl不进行 SSL 校验默认值HTTP 明文连接或无需校验的场景该枚举在 verifySSLConfig.json 中统一定义no-ssl为默认值。在摄取端connection.py 通过get_verify_ssl_fn(verifySSL)获取对应的校验函数并将结果作为verify参数传入 requests 会话——即该配置最终映射为 Pythonrequests的证书校验行为。SSL ConfigsslConfig当连接启用 SSL 的 SSRS 实例时的客户端 SSL 配置。Schema 中sslConfig类型为oneOf引用validateSSLClientConfig即启用后需要进一步提供客户端证书相关文件见下三个参数。注意sslConfig在 Schema 中标记为mask: true属于敏感配置。SSL CAcaCertificate用于 SSL 校验的 CA 证书PEM 格式内容。配置后客户端将以该 CA 作为信任链根来验证报表服务器证书对应validate模式的推荐做法。SSL CertificatesslCertificate用于客户端认证的 SSL 证书。当 SSRS 服务器要求双向 TLSmTLS时需要同时提供客户端证书与私钥。SSL KeysslKey与 SSL 证书关联的私钥。私钥必须与sslCertificate中的证书匹配否则 TLS 握手会失败。过滤模式Filter Patterns在 UI 文档之外Schema 还提供了三类过滤参数用于控制摄取范围均引用 filterPattern.json 中的filterPattern定义支持正则表达式包含/排除dashboardFilterPattern按正则包含或排除符合模式的报表chartFilterPattern按正则包含或排除符合模式的图表projectFilterPattern按正则包含或排除符合条件的项目SSRS 中对应文件夹路径见下文「项目名解析」。连接与认证的底层机制了解了配置项之后再看客户端如何真正建立连接。核心实现位于 ingestion/src/metadata/ingestion/source/dashboard/ssrs/client.py要点如下NTLM 认证使用requests_ntlm.HttpNtlmAuth处理 Windows 集成认证因此账号必须属于报表服务器所在域或本地账号体系OData 分页/Folders与/Reports均按$top100、$skip递增方式分页拉取$orderbyId保证顺序稳定报表列表通过$select仅取Id,Name,Path,Description,Type,Hidden,HasDataSources,CreatedBy字段文件夹取Id,Name,Path超时与重试连接超时 10 秒、读超时 120 秒对500/502/503/504状态码最多重试 2 次退避因子为 1仅对 GET 请求生效隐藏报表处理摄取时若Hiddentrue该报表会被过滤并记录状态见 metadata.py 中get_dashboards_listRDL 内容获取依次尝试/Reports({id})/Content/$value与/CatalogItems({id})/Content两个路径拉取报表定义仅 404 会静默降级其余错误401/403/5xx抛出异常避免在 SSRS 瞬时故障时误删实体同时通过 Content-Length 预检与流式读取限制单个 RDL 超过 50 MB 会被跳过防止内存溢出。连接测试在 connection.py 中定义了两个步骤测试步骤底层调用验证内容CheckAccessclient.test_access请求/Folders?$top1验证认证与基础连通性GetDashboardsclient.test_get_reports请求/Reports?$top1验证报表列表可访问元数据摄取流程与实体映射摄取端入口在 ingestion/src/metadata/ingestion/source/dashboard/ssrs/service_spec.pyServiceSpec BaseSpec(metadata_source_classSsrsSource, connection_classSsrsConnection)将连接类与元数据源类绑定为「SSRS」服务类型。整体流程如下Prepare调用get_folders()拉取全部文件夹构建{folder.path: folder.name}映射用于后续项目名解析列表提取get_dashboards_list()遍历/Reports过滤隐藏报表报表实体yield_dashboard以报表Id作为实体名displayName使用报表NamesourceUrl拼接为{hostPort}/report{path}报表CreatedBy形如DOMAIN\user会被归一化为 OpenMetadata 用户并尝试解析为所有者includeOwners开启时图表实体yield_dashboard_chart为每个报表生成一个名为{reportId}_chart的 Chart 实体类型为Other数据模型yield_datamodel在includeDataModels开启时解析报表 RDL为每个 DataSet 生成名为{reportId}.{datasetName}的SsrsDataModel实体包含查询 SQL跳过StoredProcedure与Expression两种 CommandType以及字段列dataTypeUNKNOWN显示为SSRS Field血缘yield_dashboard_lineage_details基于数据集CommandText使用LineageParser解析出源表通过 ES FQN 搜索在任意数据库服务中定位表实体再建立「表 → 数据模型/报表」的血缘边。血缘方言由数据库服务类型或 RDL 中 DataProvider 推断SQL→TSQL、ORACLE、MYSQL、POSTGRESQL等映射见 metadata.py 的DATA_PROVIDER_DIALECT缺省回退为 TSQL。项目名Project解析SSRS 报表的Path形如/Sales/Region/ReportAget_project_name会取路径的父目录如/Sales/Region去folder_path_map中查找对应文件夹名作为报表的 project 归属——这就是projectFilterPattern过滤与 UI 中「Project」字段的来源。RDL 解析的安全与兼容设计RDLReport Definition Language是报表定义的 XML 文档解析实现在 ingestion/src/metadata/ingestion/source/dashboard/ssrs/rdl_parser.py。该模块有两个值得注意的设计跨版本兼容不同 SSRS 版本的 RDL 命名空间不同2008/2010/2016解析器按元素「局部名local name」遍历忽略命名空间前缀差异安全防护解析前会检查文档中是否包含!doctype或!entity声明一旦存在直接拒绝解析防止「billion laughs」实体扩展攻击Python 标准库 ElementTree 会解析内部实体因此需要显式拦截单个报表 RDL 解析失败ValueError仅跳过该报表并告警不会中断整个摄取任务。端到端配置示例在 OpenMetadata 中新建 SSRS 服务的连接配置YAML 形式等价于 UI 表单填写内容如下source: type: ssrs serviceName: ssrs_prod serviceConnection: config: type: Ssrs hostPort: http://ssrs.example.com/reports username: DOMAIN\report_reader password: secret verifySSL: validate sslConfig: certificateAuthority: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- # dashboardFilterPattern: # excludes: # - .*archived.* # chartFilterPattern: # includes: # - .* sourceConfig: config: type: DashboardMetadata includeOwners: true includeDataModels: true dbServiceNames: - mssql_warehouse sink: type: metadata-rest config: {} workflowConfig: openMetadataServerConfig: hostPort: http://localhost:8585/api authProvider: openmetadata securityConfig: jwtToken: token该配置与单元测试 ingestion/tests/unit/topology/dashboard/test_ssrs.py 中的 mock 配置结构一致type: ssrs、hostPort、username、password、DashboardMetadata源类型可作为排查问题时的对照基准。要点说明verifySSL在生产环境建议validate并配置 CA仅开发联调时才使用ignore或no-sslincludeDataModels控制是否解析 RDL 生成数据集模型includeOwners控制是否尝试将报表CreatedBy映射为所有者dbServiceNames用于血缘解析时限定查询的数据库服务范围帮助定位源表。常见问题与排查建议连接测试失败CheckAccess优先检查账号是否为域账号、密码是否正确、账号是否具备 Browser 及以上角色以及hostPort是否可达且开启了 REST API v2.0SSRS 2017报表列表为空确认账号能访问/Reports资源若报表设置了 Hidden摄取会按设计跳过可在运行状态中看到 Hidden report 过滤记录数据模型缺失检查是否开启了includeDataModels以及报表 RDL 是否包含 DataSet无数据源/共享数据集的报表不会产出模型血缘未生成SSRS 侧数据集必须包含CommandText且CommandType不是StoredProcedure/Expression数据提供方不是 MDX 系列OLEDB-MD/ADOMD/SAPBW且查询引用的源表需已存在于 OpenMetadata 中并可通过 FQN 搜索到SSL 相关报错validate模式下需确保 CA 证书正确自签名证书环境可先使用ignore验证连通性再切换回validate补齐证书配置。需要进一步参考的仓库资源SSRS 连接 Schema、SSRS 客户端实现、SSRS 摄取源、RDL 解析器 以及 SSRS 单元测试。【免费下载链接】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),仅供参考
返回列表