У меня есть агент kinesis, который передает много информации из файлов журнала в потоки kinesis, и у меня есть функция Lambda, которая анализирует информацию. На Lambda в дополнение к строке мне нужно знать имя исходного файла и имя машины, возможно ли это?
Агент kinesis для лямбда, как получить исходный файл и сервер
Ответы (2)
Вы можете добавить его к данным, отправляемым на 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 в качестве параметра предварительной обработки в агенте. исходный код
Убедитесь, что исходный файл содержимого имеет формат 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, используйте декларативный параметр «ADDMETADATA», как показано ниже в файле agent.log:
{
"optionName": "ADDMETADATA",
"timestamp": "true/false",
"metadata": {
"key": "value",
"foo": {
"bar": "baz"
}
}
}