我有一个kinesis代理,可以将很多日志文件信息传递给kinesis流,我有一个Lambda函数来解析信息。 在Lambda上除了字符串我还需要知道源文件名,机器名是否有可能?
答案 0 :(得分:1)
您可以将其添加到发送到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;
答案 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"
}
}
}