0

我有一个 kinesis 代理,可以将大量日志文件信息流式传输到 kinesis 流,并且我有一个解析信息的 Lambda 函数。在 Lambda 上,除了字符串之外,我还需要知道源文件名和机器名是否可能?

4

2 回答 2

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;
于 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 回答