自定义并使用与CloudTrail集成的Elasticsearch Service

在中国,有一个相对广为人知的解决方案,可以将Amazon CloudTrail的日志投入Elasticsearch并在Kibana中进行易于查看。特别是最近,由于CloudWatch Logs具有”Streaming to Amazon Elasticsearch Service”功能,因此可以通过一键式操作在Kibana中进行可视化。具体来说,可以轻松完成Elasticsearch的新实例创建、从CloudWatch Logs发送日志到Elasticsearch的Lambda和所需IAM角色的设置。

引用:【应用】使用 CloudTrail 获取审计日志并在 ElasticSearch Service 中利用【简易设置】| Developers.IO

但是根据使用该功能创建的Elasticsearch配置,由于是自动创建,所以存在一些稍微困难的运维问题,以下是我总结的一些自定义点。

设置为”不分析”。

自动生成的Elasticsearch映射中没有设置任何not_analyzed。因此,即使区域名称是“ap”,“northeast”或“1”,它们都会被拆分成不同的部分进行图形化,这是很不幸的情况,需要进行改进。

由于CloudTrail记录中的字符串字段非常多,因此应用dynamic_templates来进行整理是最快的方法。索引会按日期进行切割,因此使用通配符”cwl-*”进行指定。

{
    "template": "cwl-*",
    "mappings": {
        "_default_": {
            "dynamic_templates": [
                { "es": {
                      "match": "*",
                      "match_mapping_type": "string",
                      "mapping": {
                          "type": "string",
                          "index": "not_analyzed"
                      }
                }}
            ]
        }
    }
}

用curl进行设置。

$ curl -XPUT xxx.es.amazonaws.com/_template/mapping -d @mapping.json

更改类型名称

在中国,以下为其本地化的方式之一:

对于 type,它通常会分配 CloudWatch Logs 的日志组名称,但是很少有情况下日志组名称中包含斜杠(应该是这样?)。因为 Elasticsearch 的 type 中含有斜杠实在是有些让人不舒服,所以将其更改为任意的值。

作为更改项,需要修改Lambda Function内的”Streaming to Elasticsearch Service”功能。由于”function transform”构建了发送到Elasticsearch的请求体(Request Body),所以需要修改以下部分。

        var action = { "index": {} };
        action.index._index = indexName;
        action.index._type = "logs";
        action.index._id = logEvent.id;

还有一个类似的地方,即可以在这里改变索引。默认情况下,日志会按照日期切割成不同的索引,并以cwl-YYYY.MM.DD的形式命名,但如果想要将它们合并到同一个索引中,可以通过指定固定值给indexName来实现。如果按照日期将索引分开,则在实现类似于对旧日志进行轮换的操作时,只需要删除相应的索引,非常方便。不过,这些问题可能是个人喜好的问题吧。

个人看法是,CloudTrail的日志是单独保存的,不需要在Elasticsearch中持久保存日志(只需在Kibana中可以查看最近1个月左右的日志即可)。因此,索引保持不变,我们通过定期外部cron发出删除请求来删除日志。虽然有设置文档过期时间的ttl功能,但据称已被弃用,因此我们没有采用该功能。

参考:TTL文档、盾牌和Found | 弹性搜索

集群健康状态的优化

默认创建的Elasticsearch Service实例,在仪表板上查看时,集群健康状态会变为”Yellow”。这是因为默认节点数为1,无法满足相同默认配置条件下的副本数=1。要解决这个问题,可以增加节点数量或将副本数设为0。但是如果只是CloudTrail日志的话,并不需要非常强大的容错能力,所以选择后者。

{
    "template" : "*",
    "settings" : {
        "number_of_replicas" : 0
    }
}

由于索引每天都会增加,因此将其设为默认设置。

$ curl -XPUT xxx.es.amazonaws.com/_template/replica -d @replica.json
广告
将在 10 秒后关闭
bannerAds