Docs 菜单
Docs 主页
/ /
Atlas App Services
/

将日志转发到服务

在此页面上

  • Overview
  • 为什么要配置日志转发?
  • 日志转发如何计费?
  • 设置日志转发器
  • 1. 创建日志转发器
  • 2. 选择要转发的日志
  • 3. 配置日志批处理
  • 5. 定义操作
  • 6. 保存并部署更改
  • 重新启动暂停的日志转发器

您可以配置日志转发器,以自动将应用程序的服务器端日志存储在 MongoDB collection中或将其发送到外部服务。 Atlas App Services 可以在创建日志时单独转发日志,也可以进行批处理转发日志以减少开销。

日志转发器由以下组件组成:

  • 控制 App Services 转发日志的方式和位置的操作

  • 用于控制 App Services 转发哪些日志的筛选器

  • 控制 App Services 是批处理日志还是单独转发日志的策略

如果需要执行以下任一操作,请考虑设置日志转发器:

  • 存储日志的时间超过 App Services 10 天的保留期。

  • 将日志集成到外部日志记录服务中

  • 访问 Atlas Search、Atlas Online Archive 和 Charts 中的日志

每个日志转发操作调用(针对单个日志或批处理)将作为一个App Services 请求进行计费。

要创建新的日志转发器,请导航至 Logs页面并选择Forwarding标签页。 然后,单击Create a Log Forwarder按钮。

在下一个屏幕上,为日志转发器指定唯一名称。

要创建新的日志转发器,请将新的配置文件添加到应用的 log_forwarders目录中。 文件名应与配置的name字段中的值匹配。

/log_forwarders/<name>.json
{
"name": "<name>"
}

App Services 可以转发应用程序的所有日志,或仅将一部分日志发送到目标collection或服务。您可以通过为日志类型定义筛选器(例如 函数、同步等)和状态(即 成功或错误),从而调用转发器的操作。

Log Type下拉列表中选择要转发的一种或多种日志类型:

用于选择要转发的日志类型的下拉列表

Log Status下拉列表中选择要转发的一个或多个状态:

用于选择要转发的日志状态的下拉列表

指定转发器要匹配和转发的一种或多种类型以及一种或多种状态:

/log_forwarders/<name>.json
{
"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 才会转发给定的日志。

例如,假设有一个转发器筛选状态为errorsync日志。

筛选器转发以下日志:

{ "type": "sync", "status": "error", ... }

筛选器不会转发以下日志:

{ "type": "sync", "status": "success", ... }
{ "type": "schema", "status": "error", ... }

App Services 可以将多个登录合并到单个批处理请求中,以减少开销。App Services 将日志分组为批处理的方式由批处理策略控制。

App Services 支持以下批处理策略:

  • 无批处理: App Services 在发生相应请求时单独转发日志。

  • 批处理:转发器在文档发生时将其分组为批处理。每个批处理最多可包含 100 个日志条目。当批处理已满时,App Services 将在单个请求中转发整个批处理。 无论当前批处理中的日志数量有多少,App Services 至少每分钟转发一次日志。

要配置批处理,请选择No batchBatching策略。

批处理策略选项:“无批处理”和“批处理”。

要配置批处理,请在policy字段中指定策略类型,即singlebatch

/log_forwarders/<name>.json
{
"name": "<name>",
"log_types": [ "<type>", ... ],
"log_statuses": [ "<status>", ... ],
"policy": { "type": "<single|batch>" }
}

日志转发器可以自动将日志存储在链接的 MongoDB 集合中,或调用将日志发送到外部服务的自定义函数。

要将日志存储在集合中,请选择To Collection操作并输入应保存转发日志的关联集群、数据库和集合的名称。

指定了集群、数据库和集合的“To Collection”(发送到集合)动作。

要将日志存储在集合中,请指定类型为collectionaction ,其中包括应保存转发日志的关联集群、数据库和集合的名称。

/log_forwarders/<name>.json
{
"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 个对象的数组调用日志转发函数。

该函数应具有与以下示例相同的签名:

/functions/<function name>.js
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操作,然后从下拉输入中选择函数。

要将函数分配给日志转发器,请指定类型为functionaction ,其中包含日志转发函数的名称。

/log_forwarders/<name>.json
{
"name": "<name>",
"log_types": [ "<type>", ... ],
"log_statuses": [ "<status>", ... ],
"policy": { "type": "<single|batch>" },
"action": {
"type": "function",
"name": "<function name>"
}
}

配置日志转发器后,单击Save 。 如果启用了部署草稿,请确保部署更改。

配置日志转发器后,保存配置文件,然后推送更新的应用配置:

appservices push

日志转发器可能会因阻止其继续运行的事件而挂起,例如网络中断或存储日志的底层集群发生更改。 一旦暂停,就无法调用转发器,也无法转发任何日志。

您可以从 App Services 用户界面的Logs > Forwarding屏幕重新启动已暂停的日志转发器。

注意

如果日志转发器被暂停,App Services 会向项目所有者发送一封电子邮件,提醒他们存在问题。

后退

查看应用程序日志