Вот пример моих 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"
] }
}