5

我正在尝试从 CloudTrail 获取日志到 ElasticSearch 中,以便我们可以更好地了解我们的 AWS 账户中发生了什么。

我已经在我的机器(Ubuntu 14.04)上设置了 Logstash 和 ElasticSearch,并且可以将文本推stdin送到 ElasticSearch。但是,当我尝试使用 S3 输入时,没有任何内容添加到 ElasticSearch。

这是我使用的 conf 文件,我删除了我的亚马逊密钥

input {
  s3 {
    bucket => 'ko-cloudtrail-log-bucket'
    secret_access_key => ''
    access_key_id => ''
    delete => false
    interval => '60'
    region => 'eu-west-1'
    type => 'CloudTrail'
    codec => cloudtrail {}
    }
}

output {
    stdout {}
    elasticsearch {
            host => '127.0.0.1'
     }
}

我已经安装了logstash-codec-cloudtrail编解码器,但文档非常稀疏。

即使使用 -v 运行 Logstash 并且没有任何内容打印到stdout. 有什么我想念的吗?

4

1 回答 1

4

这是我的 cloudtrail 输入。它适用于一个小问题 - 它重复记录。如图prefix所示,我将 cloudtrail 日志放在 s3://bucketname/cloudtrail,而不是根目录。

突变是可选的。eventSource 突变是为了使日志更具可读性,而 ruby​​ ingest_time 为我提供了记录在 ELK 中出现的日期——否则,它只有事件的时间。最后,我删除了一个非常常见的记录,它只会给我的系统增加噪音。

input {
  s3 {
    bucket => "bucketname"
    delete => false
    interval => 60 # seconds
    prefix => "cloudtrail/"
    type => "cloudtrail"
    codec => "cloudtrail"
    credentials => "/etc/logstash/s3_credentials.ini"
    sincedb_path => "/opt/logstash_cloudtrail/sincedb"
  }
}

filter {
  if [type] == "cloudtrail" {
    mutate {
      gsub => [ "eventSource", "\.amazonaws\.com$", "" ]
      add_field => {
        "document_id" => "%{eventID}"
      }
    }
    if ! [ingest_time] {
      ruby {
        code => "event['ingest_time'] = Time.now.utc.strftime '%FT%TZ'"
      }
    }


    if [eventSource] == "elasticloadbalancing" and [eventName] == "describeInstanceHealth" and [userIdentity.userName] == "secret_username" {
      drop {}
    }
  }
}

credentials.ini 格式在s3 输入页面上进行了说明;就是这样:

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
于 2015-04-23T15:24:47.337 回答