超越 GUI 和 CLI 限制自动执行 MongoDB Atlas 触发器日志下载

超越 gui 和 cli 限制自动执行 mongodb atlas 触发器日志下载

我最近遇到一个场景,需要从本地 mongodb atlas triggers 下载大量日志。目前从atlas下载日志的方式有3种:

使用 gui使用 cli使用应用服务管理 api

但是,gui 和 cli 选项对于可下载的日志量有限制,特别是 10,000 条日志的上限。

gui 和 cli 对日志下载的限制

使用 gui

通过 gui,用户可以按日期、类型、用户 id 或请求 id 过滤日志,但下载时的限制设置为 10,000 个日志。

使用 cli

使用 cli,我们可以运行如下命令:

appservices logs list --project 5e208aa2d5ec1375ecd5*** --app triggers_realmapp-**** --type=trigger --start="2024-10-15t00:00:00.000+0000" -o log.logs

但是,这也有相同的下载限制,即 10,000 个日志。

解决方案:带分页的应用服务管理 api

为了克服这些下载限制,应用服务管理 api 提供了一种通过分页访问日志的方法。通过实施分页,用户可以获取超出默认 10k 限制的日志。

有关通过 api 使用分页的详细说明可以在 mongodb 文档中找到:获取分页日志。

建议的解决方案:用于大型日志下载的自动化脚本

为了简化这一过程,我开发了一个使用分页自动获取日志的脚本。该脚本可在此处的公共存储库中找到:atlas app logs aggregator。

脚本的主要特点

自动日志获取:从 mongodb atlas 应用服务获取日志,并通过分页支持大型日志集。灵活的日期范围过滤:允许使用 start_date 和 end_date 参数进行可选的日期过滤。iso 8601 验证:验证日期以确保它们遵循 iso 8601 格式。安全身份验证:支持使用 mongodb atlas 公共和私有 api 密钥进行身份验证。可选的user_id,用于用户id过滤日志。可选的co_id,用于相关id过滤日志。使用errors_only选项仅获取错误日志。使用 –filter 选项按键值对过滤日志。

该脚本仅使用 get 端点并将日志聚合到文件中,而不修改任何数据。

如何使用

要求

python 3.6 或更高版本。requirements.txt 库依赖项。

安装

创建虚拟环境

python3 -m venv venvsource venv/bin/activate  # on windows use `venvscriptsactivate`

安装依赖项

pip install -r requirements.txt

用法

命令行参数

project_id (必填):atlas 项目 id(十六进制字符串)。app_id (必填):应用程序 id(字符串)。public_api_key(必需):atlas 公共 api 密钥(字符串)。private_api_key(必需):atlas 私有 api 密钥(带连字符的字符串)。–start_date(可选):iso 8601 格式的开始日期 (yyyy-mm-ddthh:mm:ss.mmmz)。–end_date(可选):iso 8601 格式的结束日期 (yyyy-mm-ddthh:mm:ss.mmmz)。–type(可选):支持的日志类型的逗号分隔列表。目前,可用的类型有:trigger_failure、trigger_error_handler、db_trigger、auth_trigger、scheduled_trigger、function、service_function、stream_function、service_stream_function、auth、webhook、endpoint、push、api、api_key、sync_connection_start、 sync_connection_end、sync_session_start、sync_session_end、sync_client_write、sync_error 、sync_other、schema_additive_change、schema_generation、schema_validation、log_forwarder–user_id(可选):仅返回与给定 user_id 关联的日志消息。–co_id(可选):仅返回与给定请求相关 id 关联的日志消息。–filter(可选):按键值对过滤日志(例如,–filter event_subscription_name=,function_name=)。–errors_only(可选):仅返回错误日志消息。–verbose (可选):启用详细日志信息。

例子

python main.py     --start_date 2024-10-05t14:30:00.000z --end_date 2024-10-06t14:30:00.000z --type trigger_failure,schema_generation

带有可选参数

python main.py     --start_date 2024-10-05t14:30:00.000z --type trigger_failure,schema_generation --user_id 671d2e2010733ecbaa2bab8f --filter event_subscription_name=getunpausedclustersmetrics

如果未提供 start_date 和 end_date,脚本将默认 start_date 为距离当前时间最近 24 小时。

 过滤日志

–filter 选项允许您按键值对过滤日志。此选项接受多个以空格分隔的键值对。每个键值对的格式应为 key=value。

键值对必须是端点返回的值。这样它将使用它们来过滤并仅保留那些匹配的。例如,对于“type”:“scheduled_trigger”,响应键值将类似于:

{  "_id": "671d2e2010733ecbaa2bab8f",  "co_id": "671d2e2010733ecbaa2bab8d",  "type": "scheduled_trigger",  "domain_id": "65b0fc719629ac8e4d8e8774",  "app_id": "65b0fc719629ac8e4d8e8773",  "group_id": "658d46ca7605526eb45222a4",  "request_url": "",  "request_method": "",  "started": "2024-10-26t18:00:00.041z",  "completed": "2024-10-26t18:00:04.124z",  "function_id": "65f31f9f3bfc77348cb1e2e7",  "function_name": "getorgclustersprojects",  "error": "functionerror: cannot access member 'db' of undefined",  "event_subscription_id": "65f335c53d26a2b1ba5d7ba2",  "event_subscription_name": "getunpausedclustersmetrics",  "messages": [      "reading projects for page: 1",      "hay mu00e1s pu00e1ginas",      "reading projects for page: 2",      "fin"  ],  "mem_time_usage": 4081000000}

我们可以在 –filter 选项中使用其中任何一个(例如,–filter event_subscription_name=getunpausedclustersmetrics)

记录

该脚本支持记录到控制台和日志文件。默认情况下,日志文件存储在logs文件夹中。日志文件名包含时间戳,以确保每次运行的唯一性。

–verbose:使用此标志时,日志级别设置为 debug,提供详细的日志记录信息。如果没有此标志,日志级别将设置为 info。

日志文件位置

日志文件存储在logs文件夹中。每个日志文件都以时间戳命名,以确保来自不同运行的日志不会相互覆盖。

日志文件名示例

logs/app_20241005_143000.log

好处

自动日志检索:轻松从 mongodb atlas 应用服务获取日志,无需手动干预。日期范围过滤:按日期范围过滤日志以关注特定时期。分页支持:使用分页有效处理大量日志。验证:确保日期输入格式正确,以避免错误。

免责声明

请注意:此存储库“按原样”发布,不提供任何形式的保证,包括但不限于其安装、使用或性能。我们不承担任何及所有明示或暗示的保证,包括但不限于对非侵权、适销性和/或特定用途适用性的任何保证。我们不保证该技术能够满足您的要求,不保证其运行不会中断或没有错误,也不保证任何错误都会得到纠正。

使用这些脚本和工具的任何风险均由您自行承担。无法保证它们已在类似环境中经过彻底测试,并且我们对其使用过程中发生的任何损坏或数据丢失不承担任何责任。

您有责任在任何非测试环境中使用之前彻底检查和测试您运行的任何脚本。

以上就是超越 GUI 和 CLI 限制自动执行 MongoDB Atlas 触发器日志下载的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1350597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 15:12:55
下一篇 2025年12月13日 15:13:06

相关推荐

  • PyCharm无法使用Anaconda:如何解决运行Python程序的错误?

    Anaconda无法在PyCharm中使用,原因探究 在配置PyCharm使用Anaconda时,如果出现无法运行Python程序的错误,可能是由于以下原因导致: 在PyCharm中检查Anaconda环境变量是否设置正确。在“设置 → 项目:你的项目 → Python解释器”中,选择Anacond…

    2025年12月13日
    000
  • 使用zip()函数时出现两个空列表,是怎么回事?

    zip()函数使用困惑 对于初学者来说,zip()函数的使用可能会让人困惑。以下是一个常见的问题及其解答: 问题:在使用zip()函数时,出现了两个空列表,这是为什么? 回答: 你可能正在使用python 3,在这种情况下,zip()返回一个迭代器。一旦你迭代过它,迭代器就会被耗尽,这会导致两个空列…

    2025年12月13日
    000
  • 如何在 PyCharm 中使用 Anaconda?

    无法在 pycharm 中使用 anaconda 在 pycharm 中配置 anaconda 后,您可能会遇到某些 python 程序无法运行的情况。这可能令人困惑,尤其是当 anaconda 环境变量已正确设置且以前安装的 python2 已卸载时。 要解决此问题,请检查您是否已正确设置 ana…

    2025年12月13日
    000
  • Python for循环中无法定位元素的原因是什么?

    python for循环中无法定位元素的解决方法 在python中使用for循环读取excel数据进行登录参数化测试时,有时会出现第一遍执行成功,第二遍报错,无法定位元素的情况。 这个问题通常是由浏览器驱动放在for循环内造成的。为了解决这个问题,需要将浏览器驱动(如webdriver.firefo…

    2025年12月13日
    000
  • Python 中 array = [] 和 array = None 的区别是什么?

    Python中的None Python中,array = [] 和 array = None这两种赋值方式有着本质上的区别。 array = [] 这种赋值方式会创建一个空的列表,即array是一个指向空列表的引用。可以使用列表的方法对其进行操作,例如append、insert等。 立即学习“Pyt…

    2025年12月13日
    000
  • 如何使用webbrowser和selenium同时打开网页并获取源代码?

    获取网页源代码:用webbrowser打开网址与selenium结合 如何用webbrowser打开网址的同时获取网页源代码? 这是python编程中一个常见的任务。虽然webbrowser模块本身无法提供获取源代码的功能,但我们可以结合selenium模块来实现这一目标。 使用selenium获取…

    2025年12月13日
    000
  • 如何用Python统计输入中的英文字母数,排除汉字?

    如何在 python 中统计输入中的字母数(排除汉字) 在 python 中可以使用 input 函数获取用户输入的内容。为了区分字母和数字,通常使用 isdigit() 和 isalpha() 函数。然而,默认情况下,isalpha() 函数也将汉字视为字母。 为了排除汉字,可以在判断 isalp…

    2025年12月13日
    000
  • Python 自定义类实例化失败:为什么 Button 类无法创建实例?

    python 自定义类实例化失败 问题: 在尝试实例化一个自定义类 button 时,遇到 “无法创建实例” 的错误。以下代码来自 button_game 包: import pygamefrom button_game.setting import Settingsfrom…

    2025年12月13日
    000
  • SQLRAG: Transforming Database Interactions with Natural Language and LLMs

    在数据驱动的世界中,速度和洞察力的可访问性至关重要,sqlrag 带来了一种与数据库交互的全新方法。通过利用大型语言模型 (llm) 的强大功能,sqlrag 使用户能够使用自然语言查询数据库,从而无需深厚的 sql 知识。在这篇文章中,我们将深入探讨 sqlrag 的工作原理、其主要功能,以及它如…

    2025年12月13日
    000
  • 如何用Python代码准确统计输入内容中的字母数量?

    计算输入内容中字母数量,排除汉字 初始代码中未能正确识别汉字,导致字母统计结果不准确。下面提供了一种改进的解决方案: q = 0w = 0v = input(“请输入内容>>>”)for item in v: if item.isalnum(): if item.isdecimal…

    2025年12月13日
    000
  • Python 程序:如何对数字列表进行排序

    列表: 列表是 python 中项目的集合,使用方括号 [] 创建。列表可以包含不同的数据类型,包括数字、字符串和其他列表。列表是可变的(无法更改/修改)。 排序: 在列表中可以很容易地对数字进行排序。 对数字列表进行排序的先决条件: 开始对列表进行排序之前,您需要了解列表以及如何创建列表。 创建列…

    2025年12月13日
    000
  • 如何使用 Python 获取网页尺寸?

    python 获取网页尺寸 python 中尚无用于获取网页尺寸的原生库或方法。然而,您可以借助 javascript 来实现此目的。 使用 javascript 使用 javascript,您可以获取网页文档对象的长度和宽度: 立即学习“Python免费学习笔记(深入)”; // 获取文档对象的长…

    2025年12月13日
    000
  • 为什么我的 `zip()` 函数生成空列表?

    zip() 函数中的疑惑 在你的代码示例中,你使用 zip() 函数将三个列表中的元素配对,并期望得到三个包含配对元素的新列表。然而,你却发现出现了两个空列表。这究竟是怎么回事? zip() 函数是 python 中一个用于合并多个可迭代对象中的元素的内置函数。它返回一个包含配对元素的迭代器,而不是…

    2025年12月13日
    000
  • Python3 如何将列表中多个字符串字典合并为一个字典?

    python3 如何将列表中多个字典值合并为一个字典 要将包含多个字典的列表合并为一个字典,需要使用 [json.loads()](https://docs.python.org/3/library/json.html#json.loads) 函数来将每个字符串字典转换为字典对象,然后再使用 [up…

    2025年12月13日
    000
  • Python 列表能存储多少数据?

    Python 列表中可存储的数据量 当创建一个 Python 列表时,可能会好奇它可以容纳多少数据。答案是:这取决于您的计算机配置。 配置越好的计算机,可存储的数据量就越多。然而,不建议过度填充列表,因为这可能会占用大量内存,导致程序运行缓慢甚至崩溃。 针对大量数据处理,更明智的做法是逐行读取数据并…

    2025年12月13日
    000
  • PyCharm 中如何配置 Anaconda 才能避免导入 .rcParam 错误?

    PyCharm 中配置 Anaconda 时遇到的常见问题 在 PyCharm 中配置 Anaconda 时,你可能会遇到 ImportErrors,提示无法导入 .rcParam。这是因为你在配置时可能出现了一些错误。 首先,确保已正确设置 Anaconda 环境变量。如果以前安装过 Python…

    2025年12月13日
    000
  • 如何将Python列表中的多个字典值合并为一个字典?

    python3 将列表中的多个字典值合并为一个字典 您有以下列表,其中包含三个字典值: [“{‘xvda’: {‘i/o’: {‘r/s’: ‘0.33’, ‘await’: ‘12.58’, ‘w/s’: ‘0.46’}, ‘use_%’: ’32’, ‘total_g’: ’15g’}}”, “…

    2025年12月13日
    000
  • 如何使用 docopt 库解析命令手册中的命令?

    解析命令手册中的命令 命令手册通常包含大量命令和参数,对于程序理解这些命令的语法和语义至关重要。 Python 库:docopt 在 Python 中,docopt 库提供了一种方便的方法来解析命令行字符串。它将命令手册中的文档字符串转换为 Python 代码,使程序能够理解命令结构和参数约束。 如…

    2025年12月13日
    000
  • 黄页抓取器:开发潜在客户的理想工具

    在本文中,您将学习如何在没有任何编程知识的情况下抓取电话号码、传真号码、网站、营业时间和地址等潜在客户数据。即使是初学者也可以轻松创建黄页抓取工具。 从黄页可以获取哪些信息? 从黄页中可以获得很多与业务相关的信息,这对于营销、销售和市场研究特别有用。典型信息包括: 公司名称:公司名称或品牌名称。地址…

    2025年12月13日
    000
  • 如何在 Linux 系统上重新编译 Python 3?

    重新编译 Python 3 对于 Python 3 新手而言,在 Linux 系统已经安装了 Python 3 之后,如果需要重新编译 Python 3 以安装其他依赖项,可以使用以下步骤: 下载 Python 3 源码:访问 Python 官方网站下载 Python 3 源码包。解压源码:将下载的…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信