kinesis代理到lambda,如何获取原始文件和服务器

时间:2016-07-03 21:41:53

标签: aws-lambda amazon-kinesis amazon-kinesis-firehose

我有一个kinesis代理,可以将很多日志文件信息传递给kinesis流,我有一个Lambda函数来解析信息。 在Lambda上除了字符串我还需要知道源文件名,机器名是否有可能?

2 个答案:

答案 0 :(得分:1)

您可以将其添加到发送到Kinesis的数据中。

LambdaKinesis条记录为base64字符串,您可以将此格式的JSON编码为此字符串:

{
  "machine": [machine],
  "data": [original data]
}

然后,处理Lambda上的记录时:(nodejs):

let record_object = JSON.parse(new Buffer(event.Records[0].kinesis.data, 'base64').toString('utf8'));

let machine = record_object.machine;
let data = record_object.data;

答案 1 :(得分:0)

假设您正在使用Kinesis Agent生成数据流。我看到开源社区在代理程序中添加了ADDEC2METADATA作为预处理选项。 source code

确保源内容文件为JSON格式。如果原始格式为CSV,则首先使用CSVTOJSON转换器将其转换为JSON,然后将其通过管道传递到ADDEC2METADATA转换器,如下所示。

打开agent.json并添加以下内容:

    "flows": [
        {
            "filePattern": "/tmp/app.log*", 
            "kinesisStream": "my-stream",
            "dataProcessingOptions": [
{
                    "optionName": "CSVTOJSON",
                    "customFieldNames": ["your", "custom", "field", "names","here", "if","origin","file","is","csv"],
                    "delimiter": ","
                },
                {
                    "optionName": "ADDEC2METADATA",
                    "logFormat": "RFC3339SYSLOG"
                }
            ]
        }
    ] 
}

如果您的代码用完了容器/ ECS / EKS等,其原始信息不像收集有关裸机EC2的信息那么简单,则使用agent.log文件中的“ ADDMETADATA”声明式,如下所示:

{ 
    "optionName": "ADDMETADATA",
   "timestamp": "true/false",
   "metadata": {
   "key": "value",
      "foo": {
        "bar": "baz"
      }
    }
  }