将日志转发到服务
在此页面上
Overview
您可以配置日志转发器,以自动将应用程序的服务器端日志存储在 MongoDB collection中或将其发送到外部服务。 Atlas App Services 可以在创建日志时单独转发日志,也可以进行批处理转发日志以减少开销。
日志转发器由以下组件组成:
控制 App Services 转发日志的方式和位置的操作。
用于控制 App Services 转发哪些日志的筛选器。
控制 App Services 是批处理日志还是单独转发日志的策略。
为什么要配置日志转发?
如果需要执行以下任一操作,请考虑设置日志转发器:
存储日志的时间超过 App Services 10 天的保留期。
将日志集成到外部日志记录服务中
访问 Atlas Search、Atlas Online Archive 和 Charts 中的日志
日志转发如何计费?
每个日志转发操作调用(针对单个日志或批处理)将作为一个App Services 请求进行计费。
设置日志转发器
1. 创建日志转发器
要创建新的日志转发器,请导航至 Logs页面并选择Forwarding标签页。 然后,单击Create a Log Forwarder按钮。
在下一个屏幕上,为日志转发器指定唯一名称。
要创建新的日志转发器,请将新的配置文件添加到应用的 log_forwarders
目录中。 文件名应与配置的name
字段中的值匹配。
{ "name": "<name>" }
2. 选择要转发的日志
App Services 可以转发应用程序的所有日志,或仅将一部分日志发送到目标collection或服务。您可以通过为日志类型定义筛选器(例如 函数、同步等)和状态(即 成功或错误),从而调用转发器的操作。
在Log Type下拉列表中选择要转发的一种或多种日志类型:
在Log Status下拉列表中选择要转发的一个或多个状态:
指定转发器要匹配和转发的一种或多种类型以及一种或多种状态:
{ "name": "<name>", "log_types": [ "<type>", ... ], "log_statuses": [ "<status>", ... ] }
App Services支持转发以下日志类型:
auth
endpoint
function
graphql
push
schema
service
sync
trigger
trigger_error_handler
App Services支持转发以下日志状态:
error
success
重要
仅当筛选器中指定了日志的类型和状态时,App Services 才会转发给定的日志。
例如,假设有一个转发器筛选状态为error
的sync
日志。
筛选器将转发以下日志:
{ "type": "sync", "status": "error", ... }
筛选器不会转发以下日志:
{ "type": "sync", "status": "success", ... } { "type": "schema", "status": "error", ... }
3. 配置日志批处理
App Services 可以将多个登录合并到单个批处理请求中,以减少开销。App Services 将日志分组为批处理的方式由批处理策略控制。
App Services 支持以下批处理策略:
无批处理: App Services 在发生相应请求时单独转发日志。
批处理:转发器在文档发生时将其分组为批处理。每个批处理最多可包含 100 个日志条目。当批处理已满时,App Services 将在单个请求中转发整个批处理。 无论当前批处理中的日志数量有多少,App Services 至少每分钟转发一次日志。
要配置批处理,请选择No batch或Batching策略。
要配置批处理,请在policy
字段中指定策略类型,即single
或batch
:
{ "name": "<name>", "log_types": [ "<type>", ... ], "log_statuses": [ "<status>", ... ], "policy": { "type": "<single|batch>" } }
5. 定义操作
日志转发器可以自动将日志存储在链接的 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 或库调用该服务。
注意
根据批处理策略和日志频率,App Services 可能会使用最多包含 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>" } }
6. 保存并部署更改
配置日志转发器后,单击Save 。 如果启用了部署草稿,请确保部署更改。
配置日志转发器后,保存配置文件,然后推送更新的应用配置:
appservices push
重新启动暂停的日志转发器
日志转发器可能会因阻止其继续运行的事件而挂起,例如网络中断或存储日志的底层集群发生更改。 一旦暂停,就无法调用转发器,也无法转发任何日志。
您可以从 App Services 用户界面的Logs > Forwarding屏幕重新启动已暂停的日志转发器。
注意
如果日志转发器被暂停,App Services 会向项目所有者发送一封电子邮件,提醒他们存在问题。