首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS -订阅多个lambda日志到一个elasticsearch服务

AWS -订阅多个lambda日志到一个elasticsearch服务
EN

Stack Overflow用户
提问于 2018-03-01 08:28:43
回答 3查看 4.9K关注 0票数 13

我有两个日志组,由两个不同的lambda生成。当我订阅一个日志组到我的elasticsearch服务时,它就正常工作了。但是,当我添加另一个日志组时,cloudwatch生成的日志中有以下错误:

代码语言:javascript
复制
"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服务中同时拥有两个日志组,并可视化所有日志?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-07 17:05:17

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

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

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

我个人已经使用了该脚本的修改版本,并将该行修改为:

action.index._type = 'cwl';

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

就我而言,我做了以下工作:

  1. 部署修改后的Lambda
  2. 重新索引今天的索引(例如cwl-2018.03.07),将旧文档的类型从<log group name>更改为cwl
  3. 来自不同日志组的条目现在将共存。
票数 31
EN

Stack Overflow用户

发布于 2018-11-05 02:02:53

您还可以像下面这样修改生成的Lambda代码,使其与多个CW日志组一起工作。如果Lambda函数可以为同一日志组下的不同日志流创建不同的ES索引,那么我们可以避免这个问题。因此,您需要找到Lambda函数LogsToElasticsearch_<AWS-ES-DOMAIN-NAME>,然后是函数function transform(payload),最后将索引名称形成部分更改如下。

代码语言:javascript
复制
    // index name format: cwl-YYYY.MM.DD
    //var indexName = [
        //'cwl-' + timestamp.getUTCFullYear(),              // year
        //('0' + (timestamp.getUTCMonth() + 1)).slice(-2),  // month
        //('0' + timestamp.getUTCDate()).slice(-2)          // day
    //].join('.');

    var indexName = [
        'cwl-' + payload.logGroup.toLowerCase().split('/').join('-') + '-' + timestamp.getUTCFullYear(),              // log group + year
        ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),  // month
        ('0' + timestamp.getUTCDate()).slice(-2)          // day
    ].join('.');
票数 15
EN

Stack Overflow用户

发布于 2020-05-05 17:19:58

是否可以将所有云监视日志组转发到ES中的单个索引中?就像有一个索引“RDS -log-*”来从我所有可用的RDS实例中流日志一样。例如:所有RDS实例的错误日志、慢速查询日志、一般日志等等,都需要在相同的索引(rds-log-*)下推送?

我尝试了上面提到的代码更改,但是它只推动了我配置的最后一个日志组。

默认情况下,只有一个日志组可以将日志数据流到ElasticSearch服务中。尝试同时流两个日志组将导致一个日志组的日志数据覆盖另一个日志组的日志数据。

想看看我们是否有同样的工作要做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49045483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档