데이터 송신 ( nodejs, node-mqtt module 사용 )
var client = mqtt.connect('mqtt://localhost:1883');
var send_message = {"A":"KSC01v01","B":"180706123900","C":"37.2","D":"50.5","E":"2","F":"65535","G":"65535","H":"65535","I":"16","J":"-65535","K":"-65535","L":"-65535","M":"20","N":"-65535","O":"-65535","P":"-65535","Q":"16","R":"-65535","S":"-65535","T":"-65535","U":"999","V":"36.447685","U":"127.440754","X":"1000","Y":"255","Z":"4"};
function pub(){
client.publish('mqtt', JSON.stringify(send_message));
console.log(JSON.stringify(send_message));
}
logstash config 파일
input {
mqtt {
host => "localhost"
port => 1883
topic => "mqtt"
qos => 2
}
}
filter {
}
output {
stdout {}
mongodb {
id => "my_mongodb_plugin_id"
collection => "mqtt_event"
database => "testdb"
uri => "mongodb://localhost:30000/testdb"
codec => "json"
}
}
현재 데이터 송/수신 관련 부분은 위와 같으며 데이터 수신하였을때
{
"host" => "ubuntu",
"topic" => "mqtt",
"@version" => "1",
"message" => "{"A":"KSC01v01","B":"180706123900","C":"37.2","D":"50.5","E":"2","F":"65535","G":"65535","H":"65535","I":"16","J":"-65535","K":"-65535","L":"-65535","M":"20","N":"-65535","O":"-65535","P":"-65535","Q":"16","R":"-65535","S":"-65535","T":"-65535","U":"127.440754","V":"36.447685","X":"1000","Y":"255","Z":"4"}",
"@timestamp" => 2018-07-23T00:29:10.142Z
}
이런식으로 출력을 하고 위와같은 json 형식대로 mongodb 로 정상적으로 insert 됩니다.
위의 상황에서 message 만 따로 추출하여 mongodb에 저장을 하고싶어서..위의 설정파일의
filter부분에서 message를 제외한 나머지 필드를 지워버리니 mongodb insert시에 에러가 발생합니다(prune 플러그인 사용)
prune{
whitelist_names => [ "message" ]
}
에러코드는 너무 길어서 초반 한줄만 추가해 봅니다
[WARN ][logstash.outputs.mongodb ] Failed to send event to MongoDB {:event=>#LogStash::Event:0x15e233d7, :exception=>java.lang.NullPointerException, :backtrace=>["org.jruby.ir.targets.InvokeSite.pollAndGetClass(InvokeSite.java:444)", "org.jruby.ir.targets.InvokeSite.invoke(InvokeSite.java:125)"
에러코드로 추정해보았을때는.. 무언가 insert 시에 필요한값이 없는상태로 insert를 시도하여
에러가 발생했다고 추정하고있습니다.
문의드리고 싶은 사항은 아래와 같습니다
- 수신 event 발생시 해당 event 정보 그대로 insert를 해야하는지?
- 수신 event의 필드중 원하는 필드만 뽑아 따로 처리 가능여부
- 2번이 가능하다면 event 내역도 저장, 2번의 결과도 따로 저장 가능 여부
위의 내용에 대해서.. 조언을 구해봅니다.