继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Orchestra webhook警报系统:轻松将警报发送到任何地方

四季花海
关注TA
已关注
手记 316
粉丝 42
获赞 161
例如,Datadog、PagerDuty 甚至是自定义应用程序,让最终用户了解情况并增强信任
简介

本周Orchestra(奥齐斯特拉)的最新功能主要围绕提醒。数据团队的一个大痛点就是缺乏有用的提醒。

我们常常遇到这种情况:收到一个警报,不知道它指的是什么,这导致打开多个浏览器标签,并经历痛苦的调试过程。

出问题了

管弦乐团收集并清洗来自所有底层进程产生的元数据,这样你就能获得有用的错误信息。作为你数据操作的一站式服务,除非绝对必要,否则你无需切换到其他平台。

清晰且简洁的错误提示

话说回来——工程师因此会失去一些灵活性。虽然错误消息可以自定义,但它们无法像错误代码、任务ID等一样利用运行时动态生成的信息。

没有这种灵活性意味着数据工程师有时需要维护额外的警报系统——最理想的是,这些系统能访问Orchestra产生的元数据。这带来了额外的复杂性和负担。这种情况在物流、支付和零售等行业尤为常见,在这些行业中,警报需要发送给Orchestra的客户。

为了应对这种情况,Orchestra 现在支持通过 webhook 警报目标将警报分发到任何系统。当 Pipeline 或 Task 完成时,可以将一个包含核心管道运行信息的任意数据包发送到任何指定的位置。

Orchestra也负责授权过程,因此工程师可以轻松地将Orchestra链接到预先构建的、高度可定制的消息传递系统上,在很多情况下,这些消息传递系统直接面向最终用户。

在这里查看 文档 🤓

我们很兴奋能够看到这种连接的实际效果。每个数据团队都会遇到与数据使用者建立信任的问题——他们如何才能确信数据质量实时监控,而不需要频繁更新?

这在数据团队使用像Power BI, Tableau, Looker, Lightdash 或 Sigma这样的仪表板技术时尤其如此。数据团队通过自定义警报,可以确保组织外部的相关方及时了解数据中断和质量问题。

下述为 Orchestra Webhook 警报设置示例配置

在这个例子中,我们定义了一个简单的带有业务逻辑的 lambda 函数,这样的 lambda 函数用于向客户发出提醒。

来自orchestra的JSON负载示例如下:

{
  "event_type": "任务执行完成事件",
  "detail": {
    "completed_at": "2023-11-16T12:43:31.344299+00:00",
    "message": "任务'TestTask'的运行状态为警告。",
    "pipeline_id": "78935650-3ef6-4154-a0b7-9ec015ea19bc",
    "pipeline_run_id": "6b20676d-86f9-447b-862f-0ea7820e939e",
    "started_at": "2023-11-16T11:24:52.452634+00:00",
    "status": "WARNING",
    "task_id": "01f70cbb-c4a0-4df0-beb1-da1e36e576f1",
    "task_name": "TestTask",
    "task_run_id": "1d876307-8c0a-42a1-8299-af0516223652"
  }
}

这将对应于如下所示的管道:

(注:由于原文中没有给出具体的管道示例,此处直接翻译文本内容。)

纠正为:
这将对应于如下的管道:

(注:由于原文中没有给出具体的管道示例,此处直接翻译文本内容,无需添加示例说明。)

最终修正为:
这将对应于如下的管道配置流程。

特别针对任务的提醒

将 webhook 目的地添加到 Orchestra 中

在这种情况下,我们知道管道流程是为特定客户设置的,这意味着只要某个客户的管道ID保持不变,lambda函数就可以包含相关的路由逻辑来,将可自定义的警报转发给指定的客户。

import json  

def lambda_handler(event, context):  
    # TODO 实现  
    event = event['key1']  
    print(event)  
    return {  
        'statusCode': 200,  
        'body': json.dumps(event)  
    }  
import json  
import os  
import requests  

pipeline_mappings = {"70cb2c77-b552-4c3c-9205-9fdb7d31151e":"customer-channel-1"}  
channel_mappings = {"70cb2c77-b552-4c3c-9205-9fdb7d31151e":"https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"}  

def lambda_handler(event, context):  
    # 解析事件  
    event_type = event.get("event_type")  
    details = event.get("detail", {})  

    # 提取相关信息  
    pipeline_id = details.get("pipeline_id")  
    task_name = details.get("task_name")  
    status = details.get("status")  
    completed_at = details.get("completed_at")  

    # 为Slack自定义消息  
    channel = pipeline_mappings.get(pipeline_id)  
    slack_webhook_url = channel_mappings.get(pipeline_id)  
    slack_message = {  
        "text": f":warning: 流水线 '{pipeline_id}' 任务 '{task_name}' 已完成,状态为 '{status}',完成时间为 '{completed_at}'."  
    }  

    # 从环境变量中获取Slack webhook URL  

    # 发送消息到Slack  
    response = requests.post(  
        slack_webhook_url+channel,   
        data=json.dumps(slack_message),  
        headers={'Content-Type': 'application/json'}  
    )  

    # 检查Slack响应  
    if response.status_code != 200:  
        raise ValueError(f"向Slack请求返回错误 {response.status_code}, 响应:\n{response.text}")  

    return {  
        "statusCode": 200,  
        "body": json.dumps({"消息": "已成功向Slack发送通知"})  
    }  

在这个代码示例中,有一个将 Pipeline ID 映射到客户ID 的映射表。当 webhook 集成完成后,lambda 函数被触发并发送相应的请求。

结论:

乐团的 webhook 警报现已推出,重新定义数据操作流程。不再需要猜测或翻找无数个标签页——这些警报是定制的,可操作的,并直接发送到所需的系统中,甚至可以直接发送到客户界面系统。

这不仅仅是一个普通的警报工具。Orchestra 给数据团队带来真正的优势:整合且有意义的通知,直接将数据事件实时传达给您的团队和客户。再也不用维护额外的警报系统——Orchestra 的 webhook 集成一应俱全,具备足够的灵活性,可以保持客户随时了解情况、追踪数据质量并确保系统正常运行,无需烦恼。

借助实时提醒和无缝集成,您不仅在监控数据,更在团队内部以及每个依赖您洞察力的最终用户之间增强信任。通过无缝集成,这就是简化且功能增强的数据操作,功能大幅提升。

了解更多关于Orchestra的信息

[ Orchestra ] 一个统一的数据和AI操作控制平面。

我们帮助数据团队减少他们在基础设施维护上的时间花费,使他们更加主动而非被动反应,最终赢得企业对数据和AI的信任。

我们通过将Orchestration与监控、数据质量测试和数据发现结合来实现这一点。使用Orchestra,你不需要额外的可观测性工具、数据溯源或数据目录等功能。

看看

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP