0x00 前言

为了监控 ElasticSearch Cluster 被非预期删除、创建等情况,需要搞一个监控,当监控到这种行为时,会触发 SNS 告警。
有如下几个思路:

  1. 写个脚本定期监控 CloudTrail 有非预期API CALL的时候触发SNS
  2. 将 CloudTrail 中的日志写到 CloudWatch log group 中,然后再自定义 metric 配合 alarm 实现告警
  3. 利用 CloudWatch Event 监听 elasticsearch 事件实现告警

0x01 思路解读

第一种方法就是将 CloudTrail logs 打到 S3 然后在分析 S3 中存储的 api call 情况,这种需要人工介入的地方还挺多的,不咋优雅,还有优先采用 AWS 自身提供的服务做到这件事,故跳过了。
第二种方法可以参考文档[1],直接梭哈。
第三种就有意思了,官方文档中没有给出现成的demo[2],需要我们自定义,这里就来聊一聊自定义的思路。

0x02 利用 CloudWatch Event 监听 elasticsearch 事件实现告警

在 CloudWatch Event 的 console 中 service name 并没有ES相关的服务。

1

在文档[1]中有提及“Creating a CloudWatch Events Rule That Triggers on an AWS API Call Using AWS CloudTrail”,也就是说理论上cloudtrail中记录的log在这里都能实现监控和告警。研究了一下,Event Pattern 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"source": [
"aws.es"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"es.amazonaws.com"
],
"eventName": [
"DeleteElasticsearchDomain",
"CreateElasticsearchDomain"
]
}
}

思路就是找一个其他服务的 Event Pattern 然后尝试替换为 ES 的 source、eventSource、eventName。
效果如下:

2

不过现在要自己写,没准过段时间,这个功能就加上了呢。

0x03 参考链接