Я использую производитель kinesis, чтобы вставить некоторые аналитические данные в AWS Cloudwatch. Это полный поток данных: 1. Производитель Kinesis (с использованием java SDK) -> Kinesis Stream -> AWS лямбда-функция -> AWS Cloudwatch
Версия производителя, используемая в Kinesis:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>amazon-kinesis-producer</artifactId>
<version>0.13.1</version>
</dependency>
После отправки моих данных аналитики производителю с помощью следующего кода:
kinesisProducer.addUserRecord(stream, "101", ByteBuffer.wrap(requestString.getBytes()));
Данные отправляются производителю:
{
"version": null,
"namespace": "namespace",
"metricdata": [
{
"name": "system",
"unit": "Megabytes",
"value": 879,
"timestamp": 1590233414481,
"dimensions": [
{
"name": "systemName",
"value": "ramTotal"
}
],
"type": "gauge"
}]
}
Я пришел к знайте, что данные конвертируются в формат base64 производителем kinesis. Следовательно, данные, полученные в лямбда-функции после такого декодирования -
const payload = Buffer.from(record.kinesis.data, 'base64').toString('ascii');
полезная нагрузка поступает вот так
s B
101fGaG
{
"version": null,
"namespace": "`$\u0017`$>`$0o?=o?=`$!`$\u0010`$*",
"metricdata": [
{
"name": "system",
"unit": "Megabytes",
"value": 879,
"timestamp": 1590233414481,
"dimensions": [
{
"name": "systemName",
"value": "ramTotal"
}
],
"type": "gauge"
}]
}
Может ли кто-нибудь помочь мне с этой проблемой.