热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:elklogstash6配置语法中的条件判断

本文由编程笔记#小编为大家整理,主要介绍了elk-logstash6配置语法中的条件判断相关的知识,希望对你有一定的参考价值。有时您只想在特定条件下过滤或输出事件。为此,您可以
本文由编程笔记#小编为大家整理,主要介绍了elk-logstash6配置语法中的条件判断相关的知识,希望对你有一定的参考价值。


有时您只想在特定条件下过滤或输出事件。为此,您可以使用条件(conditional)。比如在elk系统中想要添加一个type类型的关键字来根据不同的条件赋值,最后好做统计。

Logstash中的条件查看和行为与编程语言中的条件相同。

条件语支持if,else if和else语句并且可以嵌套。

条件语法如下:

if EXPRESSION {
 ...
} else if EXPRESSION {
 ...
} else {
 ...
}

比较操作



  • 相等: ==!=<><=>=


  • 正则: =~(匹配正则), !~(不匹配正则)


  • 包含: in(包含), not in(不包含)


布尔操作
and(与), or(或), nand(非与), xor(非或)

一元运算符
表达式可能很长且很复杂。表达式可以包含其他表达式,您可以使用!来取消表达式,并且可以使用括号(...)对它们进行分组。
!(取反)
()(复合表达式), !()(对复合表达式结果取反)

如若action是login则mutate filter删除secret字段:

filter {
 if [action] == "login" {
   mutate { remove_field => "secret" }
 }
}

若是正则匹配,成功后添加自定义字段:

filter {
   if [message] =~ /\w+\s+\/\w+(\/learner\/course\/)/ {
       mutate {
           add_field => { "learner_type" => "course" }
       }
   }
}

在一个条件里指定多个表达式:

output {
 # Send production errors to pagerduty
 if [loglevel] == "ERROR" and [deployment] == "production" {
   pagerduty {
   ...
   }
 }
}

在in条件,可以比较字段值:

filter {
 if [foo] in [foobar] {
   mutate { add_tag => "field in field" }
 }
 if [foo] in "foo" {
   mutate { add_tag => "field in string" }
 }
 if "hello" in [greeting] {
   mutate { add_tag => "string in field" }
 }
 if [foo] in ["hello", "world", "foo"] {
   mutate { add_tag => "field in list" }
 }
 if [missing] in [alsomissing] {
   mutate { add_tag => "shouldnotexist" }
 }
 if !("foo" in ["hello", "world"]) {
   mutate { add_tag => "shouldexist" }
 }
}

not in示例:

output {
 if "_grokparsefailure" not in [tags] {
   elasticsearch { ... }
 }
}

@metadata field

在logstash1.5版本开始,有一个特殊的字段,叫做@metadata。@metadata包含的内容不会作为事件的一部分输出。

input { stdin { } }
filter {
 mutate { add_field => { "show" => "This data will be in the output" } }
 mutate { add_field => { "[@metadata][test]" => "Hello" } }
 mutate { add_field => { "[@metadata][no_show]" => "This data will not be in the output" } }
}
output {
 if [@metadata][test] == "Hello" {
   stdout { codec => rubydebug }
 }
}

输出结果

$ bin/logstash -f ../test.conf
Pipeline main started
asdf
{
   "@timestamp" => 2016-06-30T02:42:51.496Z,
     "@version" => "1",
         "host" => "windcoder.com",
         "show" => "This data will be in the output",
      "message" => "asdf"
}

"asdf"变成message字段内容。条件与@metadata内嵌的test字段内容判断成功,但是输出并没有展示@metadata字段和其内容。

不过,如果指定了metadata => true,rubydebug codec允许显示@metadata字段的内容。

  stdout { codec => rubydebug { metadata => true } }

输出结果

$ bin/logstash -f ../test.conf
Pipeline main started
asdf
{
   "@timestamp" => 2016-06-30T02:46:48.565Z,
    "@metadata字段及其子字段内容。" => {
          "test" => "Hello",
       "no_show" => "This data will not be in the output"
   },
     "@version" => "1",
         "host" => "windcoder.com",
         "show" => "This data will be in the output",
      "message" => "asdf"
}

现在就可以见到@metadata字段及其子字段内容。

只有rubydebug codec允许显示@metadata字段的内容。

只要您需要临时字段但不希望它在最终输出中,就可以使用@metadata字段。

最常见的情景是filter的时间字段,需要一临时的时间戳。如:

input { stdin { } }
filter {
 grok { match => [ "message", "%{HTTPDATE:[@metadata][timestamp]}" ] }
 date { match => [ "[@metadata][timestamp]", "dd/MMM/yyyy:HH:mm:ss Z" ] }
}
output {
 stdout { codec => rubydebug }
}

输出结果

$ bin/logstash -f ../test.conf
Pipeline main started
02/Mar/2014:15:36:43 +0100
{
   "@timestamp" => 2014-03-02T14:36:43.000Z,
     "@version" => "1",
         "host" => "windcoder.com",
      "message" => "02/Mar/2014:15:36:43 +0100"
}

参考资料

官方文档-conditionals

ELK logstash 配置语法(24th)



推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 2.ElasticSearch练习索引 : sms-logs-index类型:sms-logs-type   数据导入部分PUTsms_logs_indexsms_logs_typ ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 导读:在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。和那些 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了rubyRbMigrationTinteger相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 【Mysql】九、Mysql高级篇 索引
    MYSQL索引一、什么是索引?二、索引数据结构1、mysql数据库的四种索引2、BTREE结构三、索引分类、创建索引、查看索引1、单值索引2、复合索引3、函数索引4、 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)...
    与.Net大师JeffreyRichter面对面交流——TUP对话大师系列活动回顾(多图配文字)上周末很有幸参加了CSDN举行的TUP活动, ... [详细]
  • 数学中的常见的距离公式
    数学中的常见的距离公式转载自:点击打开链接最近看到文章中对距离的衡量依据所针对的问题,针对所使用到的各种距离公式从网上搜罗如下1.欧氏距离,最常见的两点之间或多点之间的距离表示法, ... [详细]
author-avatar
尔的依恋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有