【发布时间】:2016-07-03 21:41:52
【问题描述】:
我有一个 kinesis 代理,可以将大量日志文件信息流式传输到 kinesis 流,并且我有一个解析信息的 Lambda 函数。 在 Lambda 上,除了字符串之外,我还需要知道源文件名和机器名吗?
【问题讨论】:
标签: aws-lambda amazon-kinesis amazon-kinesis-firehose
我有一个 kinesis 代理,可以将大量日志文件信息流式传输到 kinesis 流,并且我有一个解析信息的 Lambda 函数。 在 Lambda 上,除了字符串之外,我还需要知道源文件名和机器名吗?
【问题讨论】:
标签: aws-lambda amazon-kinesis amazon-kinesis-firehose
您可以将其添加到您发送到Kinesis 的数据中。
Lambda 获取Kinesis 记录为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;
【讨论】:
假设您使用 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"
}
}
}
【讨论】: