amazon-web-services – AWS – 将多个lambda日志订阅到一个elasticsearch服务

我有两个由两个不同的lambda生成的日志组.当我将一个日志组订阅到我的elasticsearch服务时,它正在运行.但是,当我添加其他日志组时,我在cloudwatch生成的日志中出现以下错误:

"responseBody": "{\"took\":5,\"errors\":true,\"items\":[{\"index\":{\"_index\":\"cwl-2018.03.01\",\"_type\":\"/aws/lambda/lambda-1\",\"_id\":\"33894733850010958003644005072668130559385092091818016768\",\"status\":400,\"error\":
{\"type\":\"illegal_argument_exception\",\"reason\":\"Rejecting mapping update to [cwl-2018.03.01] as the final mapping would have more than 1 type: [/aws/lambda/lambda-1, /aws/lambda/lambda-2]\"}}}]}"

我该如何解决这个问题,并且在我的Elasticsearch服务中仍然有两个日志组,并可视化所有日志?

谢谢.

最佳答案
问题是ElasticSearch 6.0.0进行了一项更改,允许索引只包含一个映射类型. (https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html)我假设您正在运行使用6.0版的ElasticSearch服务实例.

如果通过AWS控制台创建,则默认的Lambda JS文件会将索引类型设置为日志组名称.这个要点就是JS文件的一个例子(https://gist.github.com/iMilnb/27726a5004c0d4dc3dba3de01c65c575)

第86行:action.index._type = payload.logGroup;

我个人有一个正在使用的脚本的修改版本,并将该行更改为:

action.index._type =’cwl’;

我有来自各种不同日志组的日志流到同一个ElasticSearch实例.将它们全部设为相同类型是有意义的,因为它们都是CloudWatch日志而不是类型是日志组名称.该名称也在@log_group字段中设置,因此查询可以使用该名称进行过滤.

就我而言,我做了以下事情:

>部署修改后的Lambda
> Reindex今天的指数(例如cwl-2018.03.07)改变类型
对于来自< log group name>的旧文档到了cwl
>现在,来自不同日志组的条目将共存.

转载注明原文:amazon-web-services – AWS – 将多个lambda日志订阅到一个elasticsearch服务 - 代码日志