ELK技术栈-Logstash的详细使用

本文由叩丁狼高级讲师罗海鹏撰写,详细探讨了Logstash的启动参数、配置文件结构、数据类型、字段引用、条件判断以及常用输入、过滤和输出插件,包括file、jdbc、grok、date、geoip、elasticsearch和redis等插件的配置和使用。
摘要由CSDN通过智能技术生成

本文作者:罗海鹏,叩丁狼高级讲师。原创文章,转载请注明出处。 

前言

在第九章节中,我们已经安装好Logstash组件了,并且启动实例测试它的数据输入和输出,但是用的是最简单的控制台标准输入和标准输出,那这节我们就来深入的学习Logstash的详细使用。

常用启动参数

我们在上一节中演示了启动Logstash的实例,其中我们启动的时候给Logstash脚本传入了-e的参数,但实际上,Logstash的启动参数有很多,我们来看一下各个启动参数的作用:

  • -e #立即启动实例,例如:./logstash -e "input {stdin {}} output {stdout {}}"
  • -f #指定启动实例的配置文件,例如:./logstash -f config/test.conf
  • -t #测试配置文件的正确性,例如:./logstash -f config/test.conf -t
  • -l #指定日志文件名称,例如:./logstash -f config/test.conf -l logs/test.log
  • -w #指定filter线程数量,不指定默认是5,例如:./logstash-f config/test.conf -w 8

配置文件语法

文件结构

我们刚刚知道,启动参数可以指定一个配置文件,那么接下来就有必要来了解一下配置文件的结构:
Logstash通过{}来定义区域,区域内可以定义插件,一个区域内可以定义多个插件,如下:

input {
    #标准输入源插件
    stdin {
    }
    #普通文件源插件
    file {
        path => ["/var/log/*.log", "/var/log/message"]
       ....
    }
   ......
}
filter {
      #grok过滤插件
      grok {
            match => ["message", "%{HTTPDATE:logdate}"]
            .....
      }
     #date过滤插件
     date {
            match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]
           .....
    }
   .....
}
output {
     stdout {
     }
     elasticsearch {
        hosts => ["127.0.0.1:9200"]
        ....
    }
    .....
}

我们先大概了解一下配置文件的结构,接下来我们再详细看这些插件的配置。

数据类型

Logstash配置文件支持的数据类型有:
1、Boolean,例如:ssl_enable => true
2、Number,例如:port => 33
3、String,例如:name => “Hello world”
4、hash,例如:options => {key1 => “value1”, key2 => “value2”}
5、array,例如:match => [“datetime”, “UNIX”, “ISO8601”]

字段引用

Logstash数据流中的数据被称之为Event对象,Event以JSON结构构成,Event的属性被称之为字段,如果你想在配置文件中引用这些字段,只需要把字段的名字写在中括号[]里就行了,如[type],对于嵌套字段每层字段名称都写在[]里就可以了,比如:[tags][type];除此之外,对于Logstash的arrag类型支持下标与倒序下表,如:[tags][type][0][tags][type][-1]
以下的内容就是一个Event对象:

{
      "message" => "hello logstash",
      "@version" => "1",
      "@timestamp" => 2018-08-13T17:32:01.122Z,
      "host" => "localhost.localdomain"
}

条件判断

Logstash支持下面的操作符:
1、==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)
2、=~(匹配正则), !~(不匹配正则)
3、in(包含), not in(不包含)
4、and(与), or(或), nand(非与), xor(非或)
5、()(复合表达式), !()(对复合表达式结果取反)
例如以下的条件判断:

if "_grokparsefailure" not in [tags] {
} 
else if [status] !~ /^2\d\d/ or ( [url] == "/noc.gif" nand [geoip][city] != "beijing" ) {
} 
else {
}

环境变量引用

Logstash支持引用系统环境变量,环境变量不存在时可以设置默认值,例如:

export TCP_PORT=12345
input {
  tcp {
    port => "${TCP_PORT:54321}"
  }
}

常用输入插件

在第九章中,我们已经使用是标准输入,以键盘的输入数据作为Logstash数据源,但实际上我们也知道,Logstash的数据源有很多,每种数据源都有相应的配置,在Logstash中,这些数据源的相应配置称为插件,我们常用的输入插件有:file、jdbc、redis、tcp、syslog,这些输入插件会监听数据源的数据,如果新增数据,将数据封装成Event进程处理或者传递,更多的输入插件大家可以看Logstash官网,接下来我们以file和jdbc两个输入插件作为例子,来学习输入插件的使用,其他输入插件使用起来大同小异,大家自行扩展。

file输入插件

读取文件插件主要用来抓取文件的数据变化信息,以此作为Logstash的数据源。

  • 配置示例:
    input{
    file {
      path => ["/var/log/*.log", "/var/log/message"]
      type => "system"
      start_position => "beginning"
    }
    }
    output{
    stdout{}
    }
    
  • 常用参数
参数名称 数据类型 默认值 描述
path array 用于匹配被监控的文件,如”/var/logs\/*.log”或者 “/var/log/message”,必须使用绝对路径
type string Event的type字段,如果采用elasticsearch做store,在默认情况下将作为elasticsearch的type
sincedb_path string “$HOME/.sincedb*” 文件读取记录,必须指定一个文件而不是目录,文件中保存没个被监控的文件等当前inode和byteoffset
sincedb_write_interval number 15 间隔多少秒写一次sincedb文件
start_position string “end” 值为“beginning”和“end”,从文件等开头还是结尾读
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值