大家好,我是蓝胖子,之前在构建服务监控实践那个系列里,有提到用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更多的配置还是要去官网掌握一些插件的用法,不过在看懂语法的基础上,学习插件的用法就是水到渠成的事情了。

logstash 配置文件语法介绍的更多相关文章

  1. logstash 配置文件语法

    需要一个配置文件 管理输入.过滤器和输出相关的配置.配置文件内容格式如下: # 输入 input { ... } # 过滤器 filter { ... } # 输出 output { ... } 先来 ...

  2. Logstash配置文件介绍

    Logstash配置文件介绍 Logstash配置文件有两种,分别是pipeline配置文件和setting配置文件. Pipeline配置文件主要定义logstash使用的插件以及每个插件的设置,定 ...

  3. logstash配置文件

    1. 安装  logstash 安装过程很简单,直接参照官方文档: https://www.elastic.co/guide/en/logstash/current/installing-logsta ...

  4. Logstash配置文件详情

    logstash 配置文件编写详解 说明 它一个有jruby语言编写的运行在java虚拟机上的具有收集分析转发数据流功能的工具能集中处理各种类型的数据能标准化不通模式和格式的数据能快速的扩展自定义日志 ...

  5. Swift翻译之-Swift语法入门 Swift语法介绍

    目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...

  6. flex弹性布局语法介绍及使用

    一.语法介绍 Flex布局(弹性布局) ,一种新的布局解决方案 可简单.快速的实现网页布局 目前市面浏览器已全部支持1.指定容器为flex布局 display: flex; Webkit内核的浏览器, ...

  7. freemarker语法介绍及其入门教程实例

    # freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>####  1.文本,直接输 ...

  8. QSS类的用法及基本语法介绍

    QSS类的用法及基本语法介绍 目录 1. 何为Qt样式表2. 样式表语法基础3. 方箱模型4. 前景与背景5. 创建可缩放样式6. 控制大小7. 处理伪状态8. 使用子部件定义微观样式8.1. 相对定 ...

  9. MD基本语法介绍

    Markdown基本语法介绍 前言 文本编辑器一般用的有富文本编辑器(也就是Word)和md了,但是wold太过于花里胡哨很多功能都用不上,所以就选择md了,简单实用,一对于我来说一般就用标题和列表就 ...

  10. ELK 学习笔记之 Logstash基本语法

    Logstash基本语法: 处理输入的input 处理过滤的filter 处理输出的output 区域 数据类型 条件判断 字段引用 区域: Logstash中,是用{}来定义区域 区域内,可以定义插 ...

随机推荐

  1. Unity Shader编辑器工具类ShaderUtil 常用函数和用法

    Unity Shader编辑器工具类ShaderUtil 常用函数和用法 Unity的Shader编辑器工具类ShaderUtil提供了一系列函数,用于编译.导入和管理着色器.本文将介绍ShaderU ...

  2. 十 Appium环境搭建(Windows版)

    注:appium安装到C盘,node.js安装到C盘 一.安装node.js 1.到官网下载node.js:https://nodejs.org/en/download/ 2.获取到安装文件后,直接双 ...

  3. WPF 入门笔记 - 08 - 动画

    感谢大家对上篇博文的支持 回到正题,今天和大家分享下学习动画过程中的内容.动画对我来讲还是蛮新鲜的,大家知道在接触WPF之前我只用过Winform,而Winform中并没有动画的概念,当想要实现某些& ...

  4. DORA指标:公司业务成果的“占卜师”

    2009 年,受 John Allspaw 和 Paul Hammonds 在 Velocity 上演讲的启发,Patrick Debois 组织了一次名为"DevOps Days" ...

  5. 如何通过拼多多订单API接口获取订单详情

    要获取拼多多订单详情,可以使用以下接口: 1. API名称:pdd.order.detail.get 接口说明:此接口用于查询某个订单的详情信息. API文档地址:前往注册 调用该接口需要提供以下参数 ...

  6. OpenLDAP 自助修改密码系统

    一.创建docker-compose文件 root@xx:~# mkdir self-service-password root@xx:~# cd self-service-password root ...

  7. Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!

    关注TechLeadCloud,分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师, ...

  8. 推荐vue脚手架工具 vue-cli

    安装vue-cli之前,需要先装好vue 和 webpack npm install -g vue //全局安装vue npm install -g webpack //全局安装webpack npm ...

  9. 深入解析HTTP请求:了解请求特征与报文格式的关键秘密

    引言 在上一章节中,我们详细探讨了超文本传输协议(HTTP)的基本概念,并且延伸讨论了HTTP请求响应的基本流程.在这个过程中,浏览器首先通过DNS解析来确定要访问的服务器的IP地址,然后与服务器建立 ...

  10. flask出现This is a development server. Do not use it in a production deployment. Falsk WSGI两种解决办法

    WARNING: This is a development server. Do not use it in a production deployment. Falsk WSGI "这个 ...