ELK日志检索系统--Logstash配置说明一

Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。

本文针对官方文档进行翻译以及实践,希望有更多的有用户了解、使用这款工具。

1. 下载、安装、使用

这款工具是开箱即用的软件,下载自己对应的系统版本即可。下载地址:https://www.elastic.co/downloads/logstash。下载对应的版本就可以。

这里写图片描述

下载后直接解压,就可以了。

通过命令行,进入到logstash/bin目录,执行下面的命令:

logstash -e ""

可以看到提示下面信息(这个命令稍后介绍),输入hello world!

这里写图片描述

可以看到logstash自动添加了几个字段,时间戳@timestamp,版本@version,输入的类型type,以及主机名host。

2. 工作原理

Logstash使用管道方式进行日志的搜集处理和输出。有点类似*NIX系统的管道命令 xxx | ccc | ddd,xxx执行完了会执行ccc,然后执行ddd。

在logstash中,包括了三个阶段:

输入input –> 处理filter(不是必须的) –> 输出output

这里写图片描述

每个阶段都由很多的插件配合工作,比如file、elasticsearch、redis等等。

每个阶段也可以指定多种方式,比如输出既可以输出到elasticsearch中,也可以指定到stdout在控制台打印。

命令行中常用的命令

-f:通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash

-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“” 则默认使用stdin作为输入,stdout作为输出)

-l:日志输出的地址(默认就是stdout直接在控制台中输出)

-t:测试配置文件是否正确,然后退出。

配置文件说明

前面介绍过logstash基本上由三部分组成,input、output以及用户需要才添加的filter,因此标准的配置文件格式如下:

input {...} 
filter {...} 
output {...}

这里写图片描述

在每个部分中,也可以指定多个访问方式,例如我想要指定两个日志来源文件,则可以这样写:

input { 
 file { path =>"/var/log/messages" type =>"syslog"} 
 file { path =>"/var/log/apache/access.log" type =>"apache"} 
}

类似的,如果在filter中添加了多种处理规则,则按照它的顺序一一处理,但是有一些插件并不是线程安全的。

比如在filter中指定了两个一样的的插件,这两个任务并不能保证准确的按顺序执行,因此官方也推荐避免在filter中重复使用插件。

说完这些,简单的创建一个配置文件的小例子看看:

input {
    file {
        path => "/home/zhaofaquan/download/logstash-2.4.0/data/test.log"
        start_position => beginning
    }
}    
filter {
}    
output {
    stdout {}
} 

日志大致如下:

hello,this is first line in test.log!
hello,my name is xingoo!
goodbye.this is last line in test.log!

注意最后有一个空行。

执行命令得到如下信息:
细心的会发现,这个日志输出与上面的logstash -e “” 并不相同,这是因为上面的命令默认指定了返回的格式是json形式。

这里写图片描述

二、配置Logstash

用户可以通过一个配置文件告诉Logstash使用哪些插件,以及针对每种插件的配置。在配置文件中可以引用事件(events,es中的概念,一行或者多行)的域(fields),并能够在条件分支中处理事件。
下面建立一个简单的配置文件logstash-simple.conf

input { stdin { } }
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

然后通过下面的命令启动Logstash:

bin/logstash -f logstash-simple.conf

1. Logstash配置文件的结构

Logstash配置文件把每个插件独立开来,每个插件通过pipeline的方式处理事件(event)。

# This is a comment. You should use comments to describe
# parts of your configuration.
input {
  ...
}
filter {
  ...
}
output {
  ...
}

如果在filter中指定多个插件,它们根据在配置文件中定义的顺序一次作用在event上。

每个插件由名字+该插件的配置(大括号内)组成。

input {
  file {
    path => "/var/log/messages"
    type => "syslog"
  }
  file {
    path => "/var/log/apache/access.log"
    type => "apache"
  }
}

插件的设置可以理解为键值对,其中值可以由不同的类型:

数组类型

数组类型基本已经弃用,但是有的一些地方还在用:

users => [ {id => 1, name => bob}, {id => 2, name => jane} ]

Lists类型

path => [ "/var/log/messages", "/var/log/*.log" ]
uris => [ "http://elastic.co", "http://example.net" ]

Boolean

ssl_enable => true

注意:truefalse关键字没有引号。

Bytes

一个bytes字段是一个string形式的,SI (k M G T P E Z Y) 和Binary (Ki Mi Gi Ti Pi Ei Zi Yi)这两种单位都被支持。这个字段是大小写敏感的,同时在数字和单位之间可以有空格出现。如果没有指定单位,默认为byte。

  my_bytes => "1113"   # 1113 bytes
  my_bytes => "10MiB"  # 10485760 bytes
  my_bytes => "100kib" # 102400 bytes
  my_bytes => "180 mb" # 180000000 bytes

Codec

Logstash使用Codec展示数据,这个字段可以用在input或者output中,在Input中使用Codec可以在数据送到input之前decode数据,在Output中使用Codec可以在数据离开output之前encode数据。通过Codec可以不用在filter中使用separate filter了。

codec => "json"

Hash

哈希键值对,注意多组键值对时,使用的是换行分割的,不是逗号:

match => {
  "field1" => "value1"
  "field2" => "value2"
  ...
}

Number

port => 33

Password

该字段是一个string类型,但是不能被日志记录、不能被打印:

my_password => "password"

URI

my_uri => "http://foo:bar@example.net"

如果一个URI中包含Password类型的字段,那么这个URI同样不能被log和print。

Path

my_path => "/tmp/logstash"

String

name => "Hello world"
name => 'It\'s a beautiful day'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值