我有两个日志组,由两个不同的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服务中同时拥有两个日志组,并可视化所有日志?
谢谢。
发布于 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字段中设置的,因此查询可以使用该名称进行筛选。
就我而言,我做了以下工作:
cwl-2018.03.07),将旧文档的类型从<log group name>更改为cwl发布于 2018-11-05 02:02:53
您还可以像下面这样修改生成的Lambda代码,使其与多个CW日志组一起工作。如果Lambda函数可以为同一日志组下的不同日志流创建不同的ES索引,那么我们可以避免这个问题。因此,您需要找到Lambda函数LogsToElasticsearch_<AWS-ES-DOMAIN-NAME>,然后是函数function transform(payload),最后将索引名称形成部分更改如下。
// 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('.');发布于 2020-05-05 17:19:58
是否可以将所有云监视日志组转发到ES中的单个索引中?就像有一个索引“RDS -log-*”来从我所有可用的RDS实例中流日志一样。例如:所有RDS实例的错误日志、慢速查询日志、一般日志等等,都需要在相同的索引(rds-log-*)下推送?
我尝试了上面提到的代码更改,但是它只推动了我配置的最后一个日志组。
默认情况下,只有一个日志组可以将日志数据流到ElasticSearch服务中。尝试同时流两个日志组将导致一个日志组的日志数据覆盖另一个日志组的日志数据。
想看看我们是否有同样的工作要做。
https://stackoverflow.com/questions/49045483
复制相似问题