안녕하세요. XML 파싱하는 주제에 관해 몇 가지 자문을 구하고자 질문을 올립니다.
현재 테스트는 Postman으로 XML 소스를 로그스태쉬로 보내고, 로그스태쉬에서 http로 받습니다.
여러 filter들을 통하여 파싱을 하고 output으로 Elasticsearch에 저장하고 또한 콘솔로 찍어서 테스트를 진행하고 있습니다.
질문을 드리고자 하는 부분은
-
XML 소스 구조가 이상할 경우, 예를들면 극단적으로, 정상적인 코드 안에 <?xml> 태그에 이상한 문자 'asdfasdfadsf' 이런식으로 들어갈 경우 로그스태쉬 연결이 끊기는 현상이 발생합니다. 이럴 경우, xml 소스가 올바르지 않을 시, xml 소스를 걸러내며 filter, output으로 넘어가지 않게 하고 로그스태쉬 연결을 유지하고 싶습니다.
-
XML 소스 안에
<con> , <sr>
태그가 없을 시 Elasticsearch에 저장이 되지 않게합니다.
저의 Logstash config 파일은 이렇게 되있습니다.
input {
http{
}
}
filter {
xml{
source => "message"
store_xml => true
target => "parsedData"
xpath => ["/m2m:cin/sr", "parsedSr"]
xpath => ["/m2m:cin/con", "parsedCon"]
}
mutate{
gsub => ["parsedCon", "<[^<]*>", ""]
gsub => ["parsedSr", "<[^<]*>", ""]
remove_field => "message"
remove_field => "headers"
remove_field => "@timestamp"
remove_field => "@version"
}
ruby{
path => "C:\workspace_server/parser.rb"
}
mutate {
remove_field => "parsedSr"
remove_field => "parsedCon"
}
}
output {
if([parsedData][con] and [parsedData][sr]){
elasticsearch {
index => "parse"
hosts => "localhost:9200"
}
}
stdout {
codec => rubydebug
}
}
XML 소스는 이렇습니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<m2m:cin xmlns:m2m="http://www.onem2m.org/xml/protocols" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ty>4</ty>
<ri>CI00000000001244656716</ri>
<rn>CI00000000001244656716</rn>
<pi>CT00000000000000046769</pi>
<ct>2018-02-05T15:06:30+09:00</ct>
<lt>2018-02-05T15:06:30+09:00</lt>
<ppt>
<gwl>36.83115, 127.11185, 76</gwl>
<geui>0017b2fffe0ad93e</geui>
</ppt>
<sr>/0240771000000168/v1_0/remoteCSE-00000168000c05c016104807/container-LoRa//subscription-SS00000000000000261472</sr>
<et>2018-02-06T15:06:30+09:00</et>
<st>11785</st>
<cr>RC00000000000000050648</cr>
<cnf>LoRa/Sensor</cnf>
<cs>76</cs>
<con>010400003039499602d2499602d203e703e70000000003e703e70000000000000000fff51234</con>
</m2m:cin>
Logstash config 파일을 보시면 2번에 해당하는 부분은 해결하였습니다. target을 주어 (이름은 parsedData)
타겟안에 , 태그가 있을 경우에만 output에서 Elasticsearch로 보내게 하였으며 테스트를 통해 정상작동 되는것을 알았습니다.
하지만 1번에 대한 부분이 아직 미해결 상태입니다. 혹시 xml 구조가 이상할 경우 거를수 있는 방법과 Logstash 연결이 끊기는 에러를 해결할 수 있을만한 방법이 있다면 조언좀 부탁드립니다. 감사합니다!