前提・実現したいこと
AWSのEC2インスタンス(zabbix)にCloudwatch logsのデータを転送したいため、
Cloudwatch logsのデータをkinesisに流し、kinesisにデータが格納されたことをトリガーとして、lambda関数(node.js)を実行しています。
データを送信する際のheaderの値が違うため、インスタンス(zabbix)側ではじかれています。
以下のようにheaderを指定する方法を知りたいです。
<PROTOCOL> - "ZBXD" (4 bytes).
<FLAGS> -the protocol flags, (1 byte). 0x01 - Zabbix communications protocol, 0x02 - compression).
<DATALEN> - data length (4 bytes). 1 will be formatted as 01/00/00/00 (four bytes, 32 bit number in
little-endian format).
<RESERVED> - reserved for protocol extensions (4 bytes).
例:ZBXD + ¥1(圧縮無し) + データの長さ(little-endianの32bitの4バイド計算) + ¥0¥0¥0¥0(予備)
発生している問題・エラーメッセージ
インスタンス側のメッセージ
Message size 808595764 from IPアドレス exceeds the maximum size 134217728 bytes. Message ignored.
該当のソースコード
zabbixMessage=
{ request: 'sender data',
data:
[ { host: 'CloudWatch logs',
key: 'postgresql',
value: 'Hello CloudWatch',
clock: 1576045037.38 } ],
clock: 1576045040 }
nodejs
1var lend = JSON.stringify(zabbixMessage); 2var lendata = lend.length; 3let buffer = new ArrayBuffer(4); 4let dv = new DataView(buffer); 5dv.setUint32(0, lendata, true); 6var test1 = ( '00' + dv.getUint8(0).toString(16) ).slice( -2 ); 7var test2 = ( '00' + dv.getUint8(1).toString(16) ).slice( -2 ); 8var test3 = ( '00' + dv.getUint8(2).toString(16) ).slice( -2 ); 9var test4 = ( '00' + dv.getUint8(3).toString(16) ).slice( -2 ); 10var datalength = test1+"/"+test2+"/"+test3+"/"+test4; 11var zabbixbefore = "ZBXD"+"\1"+"(datalength)"+"\0"+"\0"+"\0"+"\0"; 12var zabbixMessagedata = zabbixbefore+JSON.stringify(zabbixMessage); 13client.write(zabbixMessagedata);
試したこと
var zabbixbefore = "ZBXD"+"\1"+"(datalength)"+"\0"+"\0"+"\0"+"\0";
の「"\1"」を「"¥1"」で実施すると以下エラートなっています。
「"\1"」を「"¥1"」では何が異なるのでしょうか。
Message from IPアドレス is using unsupported protocol version "-62". Message ignored.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。