Overview
您可以配置日志转发器,以自动将触发和函数服务器端日志存储在MongoDB集合中或将其发送到外部服务。 您还可以在创建日志时单独转发日志,或批处理以减少开销。
日志转发器由以下组件组成:
控制日志转发方式和位置的动作。
用于控制转发哪些日志的过滤。
控制日志是单独转发还是分批转发的策略。
为什么要配置日志转发?
如果您需要执行以下任一操作,请考虑设置日志转发器:
日志存储时间超过 10 天的保留期。
将日志集成到外部日志记录服务中。
访问MongoDB Search、Online 存档和Charts中的日志。
设置日志转发器
创建日志转发器
要创建日志转发器:
在 Atlas 中,转到 Triggers 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Streaming Data 标题下的 Triggers。
显示触发器页面。
单击 View All Apps 按钮。
单击包含要转发其日志的触发或函数的应用。
前往 Logs 页面。
选择 Forwarding 标签页。
单击 Create a Log Forwarder 按钮。
为日志转发器指定唯一名称。
要创建新的日志转发器,请将新的配置文件添加到应用的 log_forwarders目录中。 文件名应与配置的name字段中的值匹配。
{ "name": "<name>" }
选择要转发的日志
您可以转发所有触发或函数日志,也可以仅将子集发送到目标集合或服务。 您可以通过为日志日志定义筛选器(例如函数、触发器等)和状态(即成功或错误),从而调用转发器的动作。
在 Log Type 下拉列表中选择要转发的一种或多种日志类型。然后,在 Log Status 下拉列表中选择要转发的一个或多个状态。
指定转发器要匹配和转发的一种或多种类型以及一种或多种状态:
{ "name": "<name>", "log_types": [ "<type>", ... ], "log_statuses": [ "<status>", ... ] }
您可以转发以下日志类型:
authendpointfunctiongraphqlpushschemaservicetriggertrigger_error_handler
您可以转发以下日志状态:
errorsuccess
重要
仅当过滤中指定了日志的类型和状态时,日志转发器才会转发给定的日志。
例如,假设有一个转发器筛选状态为error的triggers日志。
筛选器将转发以下日志:
{ "type": "triggers", "status": "error", ... }
筛选器不会转发以下日志:
{ "type": "triggers", "status": "success", ... } { "type": "functions", "status": "error", ... }
配置日志批处理
您可以将多个日志合并到单个批处理请求中,以减少开销。您选择的批处理策略决定了日志转发器如何对日志进行分组。
您可以选择以下批处理策略:
无批处理:日志转发器在发生相应请求时单独转发日志。
批处理:日志转发器在文档发生时将其分组为一个批处理。每个批处理最多可包含 100 个日志条目。当批处理已满时,日志转发器会在单个请求中转发整个批处理。无论当前批处理中的日志数量有多少,日志转发器至少每分钟转发一次日志。
要配置批处理,请选择No batch或Batching策略。
要配置批处理,请在policy字段中指定策略类型,即single或batch :
{ "name": "<name>", "log_types": [ "<type>", ... ], "log_statuses": [ "<status>", ... ], "policy": { "type": "<single|batch>" } }
定义操作
日志转发器可以自动将日志存储在链接的 MongoDB 集合中,或调用将日志发送到外部服务的自定义函数。
将日志存储在 MongoDB collection中
要将日志存储在集合中,请选择To Collection操作并输入应保存转发日志的关联集群、数据库和集合的名称。
要将日志存储在集合中,请指定类型为collection的action ,其中包括应保存转发日志的关联集群、数据库和集合的名称。
{ "name": "<name>", "log_types": [ "<type>", ... ], "log_statuses": [ "<status>", ... ], "policy": { "type": "<single|batch>" }, "action": { "type": "collection", "data_source": "<data source name>", "database": "<database name>", "collection": "<collection name>" } }
使用自定义函数转发日志
要将日志转发到外部服务,请 写入一个函数,该函数接受日志对象大量并通过API、SDK 或库调用该服务。
注意
根据批处理策略和日志频率,日志转发器可能会使用最多包含 100 个日志对象的大量调用日志转发函数。
该函数应具有与以下示例相同的签名:
exports = async function(logs) { // `logs` is an array of 1-100 log objects // Use an API or library to send the logs to another service. await context.http.post({ url: "https://api.example.com/logs", body: logs, encodeBodyAsJSON: true }); }
写入日志转发函数后,可以按名称将其分配给日志转发器。
要将函数分配给日志转发器,请选择To Function操作,然后从下拉输入中选择函数。
要将函数分配给日志转发器,请指定类型为function的action ,其中包含日志转发函数的名称。
{ "name": "<name>", "log_types": [ "<type>", ... ], "log_statuses": [ "<status>", ... ], "policy": { "type": "<single|batch>" }, "action": { "type": "function", "name": "<function name>" } }
重新启动暂停的日志转发器
日志转发器可能会挂起,以响应阻止其继续运行的事件,例如网络中断或存储日志的根本的集群发生更改。一旦暂停,就无法调用转发器,也无法转发任何日志。
您可以从Atlas用户界面的 Logs > Forwarding 屏幕重新启动已暂停的日志转发器。
注意
如果日志转发器被暂停,则会向项目所有者发送一封电子邮件,通知他们该问题。