logstash mongodb output 관련 질문입니다


(이상신) #1

데이터 송신 ( 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를 시도하여
에러가 발생했다고 추정하고있습니다.

문의드리고 싶은 사항은 아래와 같습니다

  1. 수신 event 발생시 해당 event 정보 그대로 insert를 해야하는지?
  2. 수신 event의 필드중 원하는 필드만 뽑아 따로 처리 가능여부
  3. 2번이 가능하다면 event 내역도 저장, 2번의 결과도 따로 저장 가능 여부

위의 내용에 대해서.. 조언을 구해봅니다.


(system) #2

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.