首页 > 其他分享 >logstash 配置文件语法介绍

logstash 配置文件语法介绍

时间:2023-11-27 15:12:54浏览次数:28  
标签:插件 变量 配置文件 语法 output logstash 表达式

大家好,我是蓝胖子,之前在构建服务监控实践那个系列里,有提到用logstash来做日志的收集,但是对于logstash的配置文件语法没有做很详细的介绍,今天就来详细聊聊logstash配置文件的语法。

很多时候一门新框架的配置都会有自己独有的配置文件格式,是先简单了解配置文件语法结构,能够让自己更加系统的掌控新框架的各项配置。

文件结构

先来看看logstash的配置文件结构,配置文件分为3部分,input输入,filter过滤,output输出。配置文件是以{} 来定义区段的。如下,

input { }
filter { }
output { }

顾名思义,它们分别表示logstash的输入来源,输入来源可以是文件,filebeat等等。filter则是定义对输入源内容进行二次处理,过滤提取等等。outpout则是将处理后的内容重新输出到其他组件,比如elasticsearch或者通过http接口输出到自定义服务中。

插件

在每一个区段内,可以引入logstash的插件,插件的配置同样也是用{}包裹起来的。如下,我在input区域内部定义了stdin和syslog插件。

input { stdin {} syslog {} }

不过通常在filebeat和logstash搭配使用时,通常是将logstash的输入来源定义为filebeat的插件,如下

input {
  beats {
    port => 5044
  }
}

而filebeat的配置文件中,则是将输出源设置为logstash,如下是filebeat的部分配置文件示例,

output.logstash:  
  hosts:  192.168.0.2:5054

不同的插件具体有哪些配置,有哪些插件可以使用,参考官方文档 https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html

语法规则

介绍了配置文件的结构后,我们来看看配置文件的语法规则。

声明赋值变量

在配置文件中,赋值一个变量使用的是=>符号,像前面提到把输入源定义为filebeat时,就将port变量赋值为5044了。

    port => 5044

除了数值类型,logstash还会有字符串,布尔,数组,hash类型,它们写法如下,

字符串类型

host =>"hostname"

布尔类型

debug => true

数组类型

match => ["datetime", "UNIX", "ISO8601"]

hash类型

options => { key1 =>"value1", key2 =>"value2" }

引用变量

声明赋值完变量后,如何引用呢,在logstash中是通过[]对变量进行引用,如下,我声明了一个变量debug, 然后引用它。

filter {
	debug => true
}
output {
	if [debug]==true {
		...
	}
}

如果是那种结构体类型,比如json,或者hash结构,那么可以使用多重[]得到其值,如下,

output {
	options => { key1 =>"value1", key2 =>"value2" }
	if [options][key1]=="2" {
		...
	}
}

内插变量

logstash还支持内插变量,如下,我在使用elasticsearch插件时,需要定义输出的索引名称,这个名称是根据日志来源中不同的内容建立不同的索引名称。[fields][log_type]引用的则是出入来源中的变量名。

output {
   elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "easymonitor-%{[fields][log_type]}-%{+yyyy.MM.dd}"
  }
}

条件判断

其实在介绍变量引用的时候,你应该已经看到if语句,除此以外if else语句也是支持的。如下所示,

if "_grokparsefailure" not in [tags] {
	...
} else if [status] !~ /^2\d\d/ and [url] == "/noc.gif" {
	...
} else { 
	...
}

logstash支持的判断表达式包括

比较大小: ==, !=, <, >, <=, >= ·
正则: =~, !~ 
包含关系: in, not in 
布尔表达式: and, or, nand, xor 
对表达式取反操作: !(表达式)

注意logstash是不支持&& 和 || 表示并且和或关系的,应该用and 和or代替。

条件表达式定义多个输出源

使用条件表达式,在条件表达式中定义不同的输出插件,达到根据不同内容输出到不同组件的目的,以下是配置案例,通过判断日志的等级,等级为error或者日志类型是es的日志时,则输出到报警服务中。

output {
   elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "easymonitor-%{[fields][log_type]}-%{+yyyy.MM.dd}"
  }

  if [loglevel] == "Error" or  [fields][log_sub_type]=="es"  {

    http {
           http_method => "post"
           url => "http://192.168.0.2:36060/alert_log"
        }
  }
}

总结

logstash的配置文件语法还算是很简单的,灵活的使用条件表达式可以定义多个输出源,想要掌握logstash更多的配置还是要去官网掌握一些插件的用法,不过在看懂语法的基础上,学习插件的用法就是水到渠成的事情了。

标签:插件,变量,配置文件,语法,output,logstash,表达式
From: https://www.cnblogs.com/hobbybear/p/17859400.html

相关文章

  • Windows 11 中的蓝牙版本和配置文件支持
    Windows11支持哪些蓝牙版本?Windows11版本22H2,所有版本都支持蓝牙核心规范版本5.3。WindowsServer 没有 内置蓝牙无线技术支持。独立硬件供应商可能(IHV)提供第三方蓝牙驱动程序。哪些蓝牙配置文件在Windows11中具有内置支持?核心规范Windows11支持蓝牙核心规......
  • springboot 在配置文件中对敏感信息加密
    pom文件引入2.1.0版本对应springboot2.1.4release<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version></dependency>配......
  • python语法基础(1)
    输出print(a,b)注释#查看类型typy()数字转换字符串str(100)数字转字符串int("100")float("100") 格式化a=100b=200c="我现在有%s,你欠我%s"%(a,b)%s字符串%d整数%.2f浮点数快速格式化name="小明"age=13score=60.5print(f"姓名{name......
  • HTML5语法总结大全
    参考书籍:HTML与CSS3基础教程参考视频:HTML5完整教学通俗易懂参考网站:w3school参考博客:学习HTML5这一篇就够了目录零.开发环境准备1.需要的工具2.Vscode所需要插件3.其他辅助软件一.HTML基本语法1.HTML基本骨架2.注释3.HTML语法规范4.标签规范二.HTML网页基本标签1.标题标......
  • Python基础语法
    输入输出print():基础控制台输出将()中的内容输入到控制台(console)中直接输出字符串要使用引号包裹 print("hello,world")使用“end”来控制输出结尾(默认以\n(换行)结尾) print("hello,world",end="")#不换行结束 print("hello,world",end="*")#以*作为结尾 prin......
  • Day05 语法
    1.注释单行注释//注释多行注释/*注释*/文档注释/**注释*/2.标识符命名规则(与js规则一样)标识符可以含有字母,数字,下划线_,(*注意此处相较于c语言多出一个符)不能以数字开头不能是java中的保留字和关键字java也采用了unicode编码方式,所以......
  • Centos7 系统 /etc/fstab配置文件中文件系统类型错误导致进入紧急模式如何解决
    在格式化分区是我选择的ext4文件格式对分区sdc2进行了格式化,但是在写入配置文件是选择的文件格式是xfs,这导致了我的虚拟机进入系统时直接进入了紧急模式输入root密码进行维护,可以发现出现了命令窗,由于知道错误原因,所以可以直接从根源入手打开配置文件vim/etc/fstab我对设备......
  • SQL 中的运算符与别名:使用示例和语法详解
    SQL中的IN运算符IN运算符允许您在WHERE子句中指定多个值,它是多个OR条件的简写。示例:获取您自己的SQLServer返回所有来自'Germany'、'France'或'UK'的客户:SELECT*FROMCustomersWHERECountryIN('Germany','France','UK');语法:SELECTcolumn_name(......
  • SQL 中的运算符与别名:使用示例和语法详解
    SQL中的IN运算符IN运算符允许您在WHERE子句中指定多个值,它是多个OR条件的简写。示例:获取您自己的SQLServer返回所有来自'Germany'、'France'或'UK'的客户:SELECT*FROMCustomersWHERECountryIN('Germany','France','UK');语法:SELECTcolumn_name(......
  • lua基本语法1
    一注释单行注释 两个减号是单行注释:--注释内容多行注释--[[多行注释多行注释--]] 二)基本类型Lua中有8个基本类型分别为:nil(空)----->javanull(空)boolean(布尔)、number(数字)双精度浮点数--->javaintdoublefloatstring(字符......