Сплит XML в Logstash - PullRequest
       10

Сплит XML в Logstash

0 голосов
/ 26 февраля 2020

Вот пример моих xml данных. При прямом нажатии на ES сохраняется в поле Message.

<metric-datas>
<metric-data>
                  <metricId>120778</metricId>
                  <metricName>  Average Response Time (ms)  </metricName>
                  <metricPath> /ordering/Login.aspx  </metricPath>
                  <frequency>ONE_MIN</frequency>
<metricValues>
<metric-value>
                 <startTimeInMillis>15821000</startTimeInMillis>
                 <occurrences>3</occurrences>
                 <current>0</current>
                 <min>0</min>
                 <max>47</max>
                 <useRange>true</useRange>
                 <count>803</count>
                 <sum>1770</sum>
                 <value>2</value>
                 <standardDeviation>0</standardDeviation>
</metric-value>
</metricValues>
</metric-data>
</metric-datas>

В приведенном выше есть несколько гнезд XML, которых я хочу избежать, и получить только значения метрик внутри.

Мой ожидаемый вывод:

{
metricId: 120778
metricName: Average Response Time (ms)
metricPath:  /ordering/Login.aspx
frequency: ONE_MIN
startTimeInMillis: 15821000
occurrences: 3
current: 0
min: 0
max: 47
useRange: true
count:803
sum:1770
value:2
standardDeviation: 0
}

как отдельные поля строк.

Вот мой текущий файл conf, который неверен, однако , Я надеюсь, что смогу исправить это с вашей помощью.

input {
http_poller {
urls => {
url => "https://appd.com/controller/virtual%20Response%20Time%20%28ms%29&time-range-type=BEFORE_NOW&duration-in-mins=5"
}
truststore => "path/to/cacerts.jks"
truststore_password => "*****"
request_timeout => 60
user => "*****"
password => "****"
metadata_target => "http_poller_metadata"
schedule => { cron => "* * * * * UTC"}
}
}
filter
{
xml {
                source => "[metric-datas]"
                store_xml => "false"
                       }
split {
                field => "[metric-datas]"
        }

}
output {
  elasticsearch {
    hosts => ["10.1.533.209:9200"]
    index => "appdmetric"
}
        stdout { codec => rubydebug }
}

Как мне получить это как ожидаемый результат?

Редактировать 1: Я попробовал нижеприведенное, но все еще не смог добиться того, что я нуждаюсь. Данные по-прежнему не поступают в отдельные поля.

input { http_poller { urls => { url => "https://appd.com/controller/virtual%20Response%20Time%20%28ms%29&time-range-type=BEFORE_NOW&duration-in-mins=5" } truststore => "path/to/cacerts.jks" truststore_password => "*****" request_timeout => 60 user => "*****" password => "****" metadata_target => "http_poller_metadata" schedule => { cron => "* * *
* * UTC"} codec => multiline {
            pattern => "<metric-datas>"
            negate => "true"
            what => "previous"
        } } } 
filter { xml {
                    source => "message"
                    target => "xmldata"
                    store_xml => "true" xpath => [
                "/metric-datas/metric-data/metricID/text()", "metricID",
                "/metric-datas/metric-data/metricName/text()", "metricName",
                "/metric-datas/metric-data/metricPath/text()", "metricPath",
                "/metric-datas/metric-data/frequency/text()", "Frequency",
                "/metric-datas/metric-data/metricValues/metric-value/startTimeInMillis/text()", "starttime",
                "/metric-datas/metric-data/metricValues/metric-value/occurences/text()", "occurences",
                "/metric-datas/metric-data/metricValues/metric-value/current/text()", "current",
                "/metric-datas/metric-data/metricValues/metric-value/min/text()", "min",
                "/metric-datas/metric-data/metricValues/metric-value/max/text()", "max",
                "/metric-datas/metric-data/metricValues/metric-value/useRange/text()", "UseRange",
                "/metric-datas/metric-data/metricValues/metric-value/count/text()", "count",
                "/metric-datas/metric-data/metricValues/metric-value/sum/text()", "sum",
                "/metric-datas/metric-data/metricValues/metric-value/value/text()", "value",
                "/metric-datas/metric-data/metricValues/metric-value/standardDeviation/text()", "SatndardDeviation"
            ] }

    }
...