原文:
towardsdatascience.com/open-source-data-observability-with-elementary-from-zero-to-hero-part-1-23d5e98b68db
数据可观察性和其重要性经常被讨论和撰写,作为现代数据和分析工程的关键方面。市场上有很多具有各种功能和价格的工具。在这两篇文章中,我们将重点关注 Elementary 的开源版本,这是这些数据可观察性平台之一,专为 dbt 设计,旨在无缝工作。我们将从零开始设置,并旨在通过第二部分的结尾了解它在不同数据场景中的工作方式和可能性。在我们开始之前,我也想透露,我与 Elementary 没有任何关联,所有表达的观点都是我个人的。
在第一部分中,我们将设置 Elementary 并检查如何读取 Elementary 的每日报告。如果你已经熟悉这一部分并且对检查不同类型的数据测试以及哪种最适合哪种场景感兴趣,你可以直接跳转到第二部分:
- 使用 Elementary 的开源数据可观察性 - 从零到英雄(第二部分)
我已经使用 Elementary 一段时间了,作为数据工程师,我的体验是积极的,关于我的团队如何理解结果。我们的团队使用 Elementary 进行自动化每日监控,并使用自托管的 elementary 仪表板。Elementary 还有一个非常方便的付费云平台,但对我们来说,开源版本已经足够了。如果你想探索两者之间的差异以及开源版本中缺少哪些功能,elementary 在这里比较了这两个产品。让我们先从设置开源版本开始。
- 如何安装 Elementary
安装 Elementary 和安装任何其他 dbt 项目中的包一样简单。只需将以下内容添加到你的packages.yml文件中。如果你还没有,你可以在与dbt_project.yml文件同一级别的位置创建一个packages.yml文件。一个包本质上是一个 dbt 项目,它包含额外的 SQL 和 Jinja 代码,这些代码可以集成到你的 dbt 项目中。
packages:-package:elementary-data/elementary version:0.15.2## you can also have different minor versions as:## version: [">=0.14.0", "<0.15.0"]## Docs: https://docs.elementary-data.com我们希望 Elementary 有自己的模式来编写输出。在dbt_project.yml文件中,我们在 models 下定义了 Elementary 的模式名称。如果你使用 dbt Core,默认情况下,所有 dbt 模型都是在你的配置文件的目标指定的模式中构建的。根据你如何定义你的自定义模式,模式将被命名为elementary或<target_schema>_elementary。
models:## see docs: https://docs.elementary-data.com/elementary:## elementary models will be created in the schema 'your_schema_elementary'+schema:"elementary"## If you dont want to run Elementary in your Dev Environment Uncomment following:# enabled: "{{ target.name in ['prod','analytics'] }}"从 dbt 1.8 版本开始,dbt 废弃了安装包覆盖内置物化的能力,除非用户明确选择启用。(查看详情) 由于这个变化,一些基本功能会崩溃,因此需要在 dbt_project.yml 文件中与模型同一级别的标志部分添加一个标志。
flags:require_explicit_package_overrides_for_builtin_materializations:True最后,为了让 Elementary 正确运行,它需要连接到与你的 dbt 项目使用相同的数据仓库。如果你有多个开发环境,Elementary 确保 dbt 连接到这些仓库的方式与 Elementary 连接的方式保持一致。这就是为什么 Elementary 需要在你的profiles.yml文件中指定配置。
elementary:outputs:dev:type:bigquery method:oauth project:dev dataset:elementary location:EU priority:interactive retries:0threads:4pp:type:bigquery method:oauth# / service-account# keyfile : [full path to your keyfile]project:prod# project_iddataset:elementary# elementary dataset, usually [dataset name]_elementarylocation:EU# [dataset location]priority:interactive retries:0threads:4以下代码在 dbt 项目中运行后也会为你生成配置文件:
dbt run-operation elementary.generate_elementary_cli_profile最后,通过运行以下命令安装 Elementary CLI:
pip install elementary-data# you should also run following for your platform too, Postgres does not requiere this steppip install'elementary-data[bigquery]'- elementary 的工作原理是什么?
现在你可能已经在你的 dbt 项目中成功运行了 Elementary,了解 Elementary 的工作方式也是有用的。基本上,Elementary 通过利用 dbt 运行期间生成的 dbt 艺术品来运行。这些艺术品,如manifest.json、run_results.json和其他日志,用于收集详细的模型元数据,跟踪模型执行,并评估测试结果。Elementary 将这些数据集中起来,以提供对管道性能的全面视图。然后,它根据分析生成报告,并可以生成警报。
- 如何使用 elementary
以最简单的方式来说,如果你想创建一个通用的 Elementary 报告,以下代码将生成一个 HTML 文件格式的报告:
edr report在你的 CLI 中,这将通过使用我们在之前步骤中提供的连接配置文件来访问你的数据仓库。如果 elementary 配置文件没有定义默认的目标名称,它将抛出错误,为了避免错误,你还可以在终端运行时提供--profile-target <target_name>作为变量。
一旦 Elementary 运行完成,它将自动以 HTML 文件的形式打开 elementary 报告。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6d45aca13a2a5ca9584b1239c31af97b.png
Elementary 报告仪表板
在仪表板的左侧栏中,你可以看到不同的页面,仪表板页面提供了 dbt 项目的性能和状态的全面概述。目录和测试配置页面仅在 Elementary Cloud 中可用,但这些配置也可以在 OSS 版本中手动实现,在第二部分中会详细解释。
- 如何阅读这份报告?
在这个示例报告中,我故意提前创建了警告和错误,以便撰写这篇文章。总共运行了 67 个测试,其中 3 个失败,5 个给出警告。我监控了 24 个表,所有配置和检查的测试都是 dbt 测试,如果配置了 Elementary 的新鲜度或体积测试,它们将显示在第一视觉的第二行。
如您在模型运行可视化中看到的,我已成功运行了 158 个模型,没有任何错误或跳过。在之前的几天里,模型运行时错误数量不断增加。我可以轻松地看到 9/7 开始出现的错误,并据此进行故障排除。
您可以将此仪表板托管在您的生产环境中,并将其发送到您的通信/警报渠道。下面是一个来自 Argo 工作流的示例,但您也可以在此处查看适合您设置/您希望在您的生产中托管它的不同方法。
-name:generate-elementary-report container:image:"{{inputs.parameters.elementary_image}}"##pre-defined elemantary image in configmap.yamlcommand:["edr"]##run command for elemantary reportargs:["report","--profile-target={{inputs.parameters.target}}"]workingDir:workdir##working directoryinputs:parameters:-name:target-name:elementary_image-name:bucket artifacts:-name:source path:workdir##working directoryoutputs:artifacts:-name:state path:/workdir/edr_target gcs:bucket:"{{inputs.parameters.bucket}}"##here is the bucket that you would like to host your dashboard outputkey:path_to_key archive:none:{}通过在我们的 Argo 工作流中使用上述模板,我们将创建 Elementary HTML 报告并将其保存在定义的存储桶中。我们可以在以后从您的存储桶中取出这份报告,并将其与您的警报一起发送。
现在我们已经了解了我们如何设置我们的报告,并且希望我们也了解了 Elementary 的基础知识,接下来,我们将检查不同类型的测试以及哪种测试最适合哪种场景。只需跳转到第二部分。
如果这已经足够满足您的需求,非常感谢您阅读!
本文参考文献
Elementary Data 文档. (n.d.).Elementary Data 文档. 2024 年 9 月 5 日检索,来自
docs.elementary-data.com。dbt Labs. (n.d.).dbt 文档. 2024 年 9 月 5 日检索,来自
docs.getdbt.com。Elementary Data. (n.d.).GitHub 仓库. 2024 年 9 月 5 日检索,来自
github.com/elementary-data。dbt Labs. (2024).升级到 dbt v1.8. 2024 年 9 月 5 日检索,来自
docs.getdbt.com/docs/dbt-versions/core-upgrade/upgrading-to-v1.8#deprecated-functionality。Elementary Data. (n.d.).Elementary 在生产中的使用. 2024 年 9 月 5 日检索,来自
docs.elementary-data.com/oss/deployment-and-configuration/elementary-in-production#ways-to-run-elementary-in-production。