我有一个 kinesis 代理,可以将大量日志文件信息流式传输到 kinesis 流,并且我有一个解析信息的 Lambda 函数。在 Lambda 上,除了字符串之外,我还需要知道源文件名和机器名是否可能?
问问题
571 次
2 回答
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;
于 2016-08-28T12:01:33.333 回答
0
假设您使用 Kinesis Agent 生成数据流。我看到开源社区已经在代理中添加了 ADDEC2METADATA 作为预处理选项。源代码
确保源内容文件为 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"
}
}
}
于 2019-07-31T19:02:38.590 回答