解析整数并在 Kibana 的时间轴中显示
Parse integer and show in timeline in Kibana
这是 Kibana UI,我想解析消息中的一些整数。消息末尾的数字是一种方法的处理时间,我想在 Kibana 中按小时显示平均处理时间。这可能吗?
我在 logstash 中尝试了一些配置:
filter{
json{
source => "message"
}
grok {
match => {
"message" => "^Finish validate %{NUMBER:cto_validate_time}$"
}
}
grok {
match => {
"message" => "^Finish customize %{NUMBER:cto_customize_time}$"
}
}
}
有效。但是当我创建时间表时,我无法获取新字段。
由于您不关心性能问题,您可以使用以下无痛代码在您的索引模式中创建一个名为 process_time
的 scripted field。它所做的只是从您的 message
字段中获取最后一个数值。
def m = /.*\s(\d+)$/.matcher(doc['message.keyword'].value);
if ( m.matches() ) {
return m.group(1)
} else {
return 0
}
然后您可以构建一个图表来按小时显示平均处理时间。转到“可视化”选项卡并创建一个新的垂直条形图。在 Y 轴上,您将在 process_time
字段上创建 Average 聚合,在 X 轴上,您将使用 Date histogram 聚合你的时间戳字段。示例如下所示:
注意:您还需要在 elasticsearch.yml
文件中添加以下行并重新启动 ES:
script.painless.regex.enabled: true
更新
如果您想通过 Logstash 进行操作,您可以添加以下 grok
过滤器
filter{
grok {
match => {
"message" => "^Finish customize in controller %{NUMBER:cto_customize_time}$"
}
}
mutate {
convert => { "cto_customize_time" => "integer" }
}
}
这是 Kibana UI,我想解析消息中的一些整数。消息末尾的数字是一种方法的处理时间,我想在 Kibana 中按小时显示平均处理时间。这可能吗?
我在 logstash 中尝试了一些配置:
filter{
json{
source => "message"
}
grok {
match => {
"message" => "^Finish validate %{NUMBER:cto_validate_time}$"
}
}
grok {
match => {
"message" => "^Finish customize %{NUMBER:cto_customize_time}$"
}
}
}
有效。但是当我创建时间表时,我无法获取新字段。
由于您不关心性能问题,您可以使用以下无痛代码在您的索引模式中创建一个名为 process_time
的 scripted field。它所做的只是从您的 message
字段中获取最后一个数值。
def m = /.*\s(\d+)$/.matcher(doc['message.keyword'].value);
if ( m.matches() ) {
return m.group(1)
} else {
return 0
}
然后您可以构建一个图表来按小时显示平均处理时间。转到“可视化”选项卡并创建一个新的垂直条形图。在 Y 轴上,您将在 process_time
字段上创建 Average 聚合,在 X 轴上,您将使用 Date histogram 聚合你的时间戳字段。示例如下所示:
注意:您还需要在 elasticsearch.yml
文件中添加以下行并重新启动 ES:
script.painless.regex.enabled: true
更新
如果您想通过 Logstash 进行操作,您可以添加以下 grok
过滤器
filter{
grok {
match => {
"message" => "^Finish customize in controller %{NUMBER:cto_customize_time}$"
}
}
mutate {
convert => { "cto_customize_time" => "integer" }
}
}