资讯动态

DataHub Slack Action 接入指南:把数据资产变更实时推送到你的 Slack 频道

发布时间:2026/9/15 18:12:43 来源:尧图企业网站定制
DataHub Slack Action 接入指南把数据资产变更实时推送到你的 Slack 频道【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本篇技术指南围绕 DataHub Actions 框架中的 Slack Action 展开讲解如何将 DataHub 中的标签变更、文档更新、属主变更、Domain 创建等元数据事件实时以人性化的通知消息推送到你指定的 Slack 频道。读完本文你将掌握 Slack App 的创建与安装、凭证获取、环境变量/配置文件两种激活方式以及事件过滤、系统活动抑制、消息渲染等底层实现原理可直接在 quickstart、k8s/helm 或裸机 Python 环境完成接入。概述Slack Action 能做什么Slack Action 是 DataHub Actions 生态中的一种 Action 插件负责把 DataHub 上的重要元数据变更事件转发到 Slack 工作区的指定频道。它不是一个通用聊天机器人而是面向数据治理场景的“变更通知器”。根据 关联文档它的核心能力包括向 Slack 频道发送重要事件的变更通知例如为实体dataset、dashboard 等添加或移除标签Tag在实体级或字段列级更新文档Documentation为实体添加或移除属主Ownership创建 Domain以及其他由EntityChangeEvent_v1承载的实体变更事件。用户体感Action 启动时会先向目标频道发送一条“欢迎消息”告知 DataHub Bot 已上线并开始监视事件此后每收到一个符合条件的事件就会发送一条格式化通知。原文档提供了两种消息形态的示意欢迎消息 与 事件通知消息原文档截图托管于外部静态资源本文不再重复引用。支持的事件类型事件类型是否支持说明EntityChangeEvent_v1✅ 支持Action 的核心输入承载“谁在什么时间对哪个实体做了什么操作”的语义MetadataChangeLogEvent_v1❌ 不处理当前版本不会被 Slack Action 处理这一点在源码中有明确的“双重保险”容器内置的配置文件 slack_action.yaml 中通过filters只放行EntityChangeEvent_v1并开启enable_mcl_pre_deserialization_filter: true在反序列化前就跳过 MCL 事件而 Action 本体在 slack.py 中同样只对event.event_type EntityChangeEvent_v1分支处理其余类型一律记录 debug 日志并跳过。工作流程与源码结构从源码结构看Slack Action 的完整链路如下事件来源Action 通过 Kafka 事件源订阅 DataHub 的元数据变更日志MetadataChangeLog_Versioned_v1和平台事件PlatformEvent_v1见 slack_action.yaml 的source.config.connection与topic_routes事件过滤只有EntityChangeEvent_v1进入 Action语义化组装social_util.get_message_from_entity_change_event()把原始事件翻译成人类可读的句子social_util.py限流发送post_message()使用sleep_and_retrylimits(calls1, period1)保证每秒最多发送 1 条消息避免触发 Slack API 速率限制slack.py消息排版SlackNotification.get_payload()使用 Slack Block Kit 结构section divider渲染标题与属性列表slack.py。插件入口在 setup.py 中注册为 entry pointslack datahub_actions.plugin.action.slack.slack:SlackNotificationAction这就是 YAML 配置里action.type: slack能被框架解析的原因。前提在 Slack 工作区创建并安装 DataHub App接入前必须先配置好 Slack App以下步骤需要Slack 工作区管理员操作打开 https://api.slack.com/apps/点击Create New App选择From an app manifest方式创建选择目标工作区粘贴下面的 Manifest YAML建议把name与display_name改为DataHub App YOUR_TEAM_NAME便于团队识别非强制display_information: name: DataHub App description: An app to integrate DataHub with Slack background_color: #000000 features: bot_user: display_name: DataHub App always_online: false oauth_config: scopes: bot: - channels:history - channels:read - chat:write - commands - groups:read - im:read - mpim:read - team:read - users:read - users:read.email settings: org_deploy_enabled: false socket_mode_enabled: false token_rotation_enabled: false各 Bot Scope 的作用与通知能力直接相关chat:write允许 Bot 发消息、channels:read/groups:read/im:read/mpim:read用于解析频道users:read/users:read.email用于把 Actor 的 URN 解析为可读的用户名team:read用于读取工作区信息。确认能看到Basic Information页签点击Install to WorkspaceSlack 会列出 App 申请的权限说明并让你选择一个默认频道注意Slack App 只能向它被加入的频道发消息权限授权界面也会明确提示这一点选择接收通知的频道并点击Allow回到 https://api.slack.com/apps/ 即可管理该 App。获取三项凭证与配置信息完成安装后需要收集以下三项信息1. Signing Secret签名密钥在 App 的Basic Information页找到App Credentials区域记录Signing Secret。2. Bot TokenBot 用户令牌进入OAuth Permissions页找到Bot User OAuth Token。DataHub 的 Bot 将使用该令牌与你的 Slack 工作区通信。3. Slack Channel ID目标频道 ID决定通知要发往哪个频道例如#datahub-notifications、#data-notifications或团队已有的数据/管道告警频道并确保已把 App 添加到该频道。随后获取频道 ID桌面端打开频道About页滚动到底部即可看到 Channel ID浏览器端从 URL 中提取。例如频道 URL 中的TUMKD5EGJ/C029A3M079U其中Channel ID C029A3M079U。部署与激活三种方式DataHub Cloud托管版若使用 DataHub Cloud请直接参考 DataHub Cloud 的 Slack 通知配置指南按托管平台的指引完成通知配置无需自行部署 Action。Docker Quickstart使用 docker quickstart 运行时无需额外安装软件datahub-actions容器已预装 Slack Action。只需导出环境变量并重启容器环境变量必填用途DATAHUB_ACTIONS_SLACK_ENABLED✅设为true以启用 Slack ActionDATAHUB_ACTIONS_SLACK_SIGNING_SECRET✅填入前面获取的 Signing SecretDATAHUB_ACTIONS_SLACK_BOT_TOKEN✅填入前面获取的 Bot User OAuth TokenDATAHUB_ACTIONS_SLACK_CHANNEL✅填入接收消息的 Slack Channel IDDATAHUB_ACTIONS_SLACK_DATAHUB_BASE_URL❌默认http://localhost:9002即 DataHub UI 地址本地 quickstart 一般无需修改:::note 首次导出这些环境变量后需要重启datahub-actions容器。最简单的做法是通过 Docker Desktop 界面重启或执行datahub docker quickstart --stop datahub docker quickstart重启整个实例。 :::示例export DATAHUB_ACTIONS_SLACK_ENABLEDtrue export DATAHUB_ACTIONS_SLACK_SIGNING_SECRETslack-signing-secret export DATAHUB_ACTIONS_SLACK_BOT_TOKENbot-user-oauth-token export DATAHUB_ACTIONS_SLACK_CHANNELslack_channel_id # 可选DATAHUB_ACTIONS_SLACK_DATAHUB_BASE_URL 默认 http://localhost:9002 datahub docker quickstart --stop datahub docker quickstart这些环境变量与容器内配置文件的映射关系可以直接在 slack_action.yaml 中看到enabled: ${DATAHUB_ACTIONS_SLACK_ENABLED:-false}、bot_token: ${DATAHUB_ACTIONS_SLACK_BOT_TOKEN}等全部通过${VAR:-default}语法读取容器入口 start.sh 会把/etc/datahub/actions/system/conf下所有*.yml/*.yaml以-c参数交给datahub-actions actions命令加载。k8s / Helm与 quickstart 类似无需单独安装软件只需把上述环境变量注入datahub-actions容器即可激活集成。差异在于Helm 部署下DATAHUB_ACTIONS_SLACK_DATAHUB_BASE_URL为必填例如你的 DataHub UI 托管在https://datahub.my-company.biz就需要设置DATAHUB_ACTIONS_SLACK_DATAHUB_BASE_URLhttps://datahub.my-company.biz否则通知消息中拼接的实体链接会指向错误地址。裸机CLI 或 Python 方式如果直接以 Python 库或 CLI 方式使用datahub-actions需要先在 Python 虚拟环境中安装 Slack 插件pip install acryl-datahub-actions[slack]从 setup.py 可以看到该 extra 依赖slack-bolt1.15.5Slack 官方 SDKAction 内部通过slack_bolt.App构建客户端。然后编写配置文件并启动示例 Slack Action 配置文件name: datahub_slack_action enabled: true source: type: kafka config: connection: bootstrap: ${KAFKA_BOOTSTRAP_SERVER:-localhost:9092} schema_registry_url: ${SCHEMA_REGISTRY_URL:-http://localhost:8081} topic_routes: mcl: ${METADATA_CHANGE_LOG_VERSIONED_TOPIC_NAME:-MetadataChangeLog_Versioned_v1} pe: ${PLATFORM_EVENT_TOPIC_NAME:-PlatformEvent_v1} ## 3a. 可选事件过滤器map按事件字段精确匹配 # filter: # event_type: filtered-event-type # event: # # Filter event fields by exact-match # filtered-event-fields # 3b. 可选事件转换器array # transform: # - type: transformer-type # config: # # Transformer-specific configs (map) action: type: slack config: # Action-specific configs (map) base_url: ${DATAHUB_ACTIONS_SLACK_DATAHUB_BASE_URL:-http://localhost:9002} bot_token: ${DATAHUB_ACTIONS_SLACK_BOT_TOKEN} signing_secret: ${DATAHUB_ACTIONS_SLACK_SIGNING_SECRET} default_channel: ${DATAHUB_ACTIONS_SLACK_CHANNEL} suppress_system_activity: ${DATAHUB_ACTIONS_SLACK_SUPPRESS_SYSTEM_ACTIVITY:-true} datahub: server: http://${DATAHUB_GMS_HOST:-localhost}:${DATAHUB_GMS_PORT:-8080}配置文件的datahub.server用于让 Action 通过 Graph 客户端反向解析实体名称把 URN 渲染成人类可读名字在容器化部署中还会额外带上系统客户端鉴权头见 slack_action.yaml 的datahub.extra_headers.Authorization。Slack Action 配置参数字段必填默认值说明base_url❌http://localhost:9002/DataHub UI 的访问地址用于拼接通知中实体链接。源码中SlackNotificationConfig的默认值为http://localhost:9002/slack.py。原文档参数表中该行描述存在笔误请以源码默认值为准signing_secret✅—Signing Secret用SecretStr类型保存日志打印时会被脱敏为**********bot_token✅—Bot User OAuth Token同样以SecretStr脱敏存储default_channel✅—接收通知的 Slack Channel IDsuppress_system_activity❌True是否抑制系统级活动事件。设为False会收到数据摄取等底层系统事件通知当前版本会产生大量刷屏消息不建议修改消息渲染与语义化源码级解析通知内容并非把原始 JSON 直接转发而是经过social_util.py语义化组装social_util.py操作动词映射ADD → added、UPDATE/MODIFY → updated、REMOVE → removed、CREATE → created、REINSTATE → reinstated消息模板按事件类别分派lifecycleactor has {operation} {entityType} {entityLink}.technical_schema区分“修改了 schema 字段”与“修改了 schema”字段变更会附带父实体链接并携带?schemaFilter字段名深链其他类别如tag、ownership、documentation、domainactor has {operation} {category} {modifier} for {entityType} {entityLink}.不同实体类型的链接形态dataFlow链接到/pipelines/{urn}、dataJob链接到/tasks/{urn}普通实体链接到/{entityType}/{urn}schemaField会向上解析父实体的 Schema 页消息格式适配Slack 使用 mrkdwn 语法如链接url|title、加粗*text*Teams 则使用 Markdown 语法二者由channel参数区分。欢迎消息则由get_welcome_message()生成包含 DataHub 主页地址、运行主机名、启动时间与时区social_util.py。事件过滤与系统活动抑制Slack Action 默认只关心“人”产生的操作。在 slack.py 中若事件的auditStamp.actor是系统 ActorDATAHUB_SYSTEM_ACTOR_URN且suppress_system_activity为TrueAction 会直接return丢弃该事件——这正是文档强调“不建议改为False”的原因数据摄取等自动化过程会产生大量底层事件放开后 Slack 通知会变得非常嘈杂。如需更精细的控制可在 Action 管道的filter/transform段配置事件过滤与转换器即配置文件中被注释的3a/3b部分框架会在事件进入 Action 之前先执行过滤与转换。故障排查从日志验证激活状态配置正确时datahub-actions容器的日志会显示 Slack Action 成功启用并运行docker logs datahub-datahub-actions-1 ... [2022-12-04 07:07:53,804] INFO {datahub_actions.plugin.action.slack.slack:96} - Slack notification action configured with bot_tokenSecretStr(**********) signing_secretSecretStr(**********) default_channelC04CZUSSR5X base_urlhttp://localhost:9002 suppress_system_activityTrue [2022-12-04 07:07:54,506] WARNING {datahub_actions.cli.actions:103} - Skipping pipeline datahub_teams_action as it is not enabled [2022-12-04 07:07:54,506] INFO {datahub_actions.cli.actions:119} - Action Pipeline with name ingestion_executor is now running. [2022-12-04 07:07:54,507] INFO {datahub_actions.cli.actions:119} - Action Pipeline with name datahub_slack_action is now running. ...其中INFO ... Slack notification action configured with ...来自 slack.py注意密钥已脱敏为**********Action Pipeline with name datahub_slack_action is now running.表示管道已启动。如果 Slack Action 未被启用日志会给出明确提示docker logs datahub-datahub-actions-1 .... No user action configurations found. Not starting user actions. [2022-12-04 06:45:27,509] INFO {datahub_actions.cli.actions:76} - DataHub Actions version: unavailable (installed editable via git) [2022-12-04 06:45:27,647] WARNING {datahub_actions.cli.actions:103} - Skipping pipeline datahub_slack_action as it is not enabled [2022-12-04 06:45:27,649] WARNING {datahub_actions.cli.actions:103} - Skipping pipeline datahub_teams_action as it is not enabled [2022-12-04 06:45:27,649] INFO {datahub_actions.cli.actions:119} - Action Pipeline with name ingestion_executor is now running. ...遇到此类日志时请检查DATAHUB_ACTIONS_SLACK_ENABLED是否已导出为true以及容器是否在导出变量后重启过。小结Slack Action 是 DataHub 元数据变更通知的轻量落地方案只需一个 Slack App、三个凭证字段和一个目标频道即可把标签、文档、属主、Domain 等实体变更以结构化消息推送给团队。若需要更精细的事件裁剪可结合filter/transform管道配置若关心发送限流、消息模板或新增实体链接形态可直接阅读 slack.py 与 social_util.py 两处源码继续深入。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价