(十四):Logstash配置
在Logstash安装中演示了Logstash标准输入输出。标准输入输出模块,可以使Logstash读取键盘输入内容,并将结果直接打印在屏幕上。
1、Logstash配置结构与内容
1.1、配置结构
# this is a comment
input {
value...
}
filter {
value...
}
output {
value...
}
input 输入插件;filter 过滤器插件;output 输出插件。
1.2、value详情
插件可以要求设置的值是某种类型,例如布尔值、列表值或散列值。支持以下值类型:
2.1、Array
users => [ {id => 1, name => bob}, {id => 2, name => jane} ]
2.2、Lists
Lists是类型集合,可以对多个值进行类型检查,在声明参数时指定:list => true来启用列表检查。
path => [ "/var/log/messages", "/var/log/*.log" ]
uris => [ "http://elastic.co", "http://example.net" ]
2.3、Boolean
布尔值必须为 ture 或 false,注意:true和false关键字没有括在引号中。
ssl_enable => true
2.4、Bytes
字节字段是表示有效字节单位的字符串字段,是一种在插件选项中声明特定大小的简便方法。
my_bytes => "1113" # 1113 bytes
my_bytes => "10MiB" # 10485760 bytes
my_bytes => "100kib" # 102400 bytes
my_bytes => "180 mb" # 180000000 bytes
2.5、codec
编解码器是用于表示数据的Logstash编解码器的名称。编解码器可用于输入和输出。输入编解码器提供了一种方便的方法,在数据进入输入之前对其进行解码。输出编解码器提供了一种方便的方法,在数据离开输出之前对其进行编码。
使用输入或输出编解码器消除了在Logstash管道中使用单独过滤器的需要。
codec => "json"
2.6、Hash
Hash是按"field1" => "value1"格式指定的键值对的集合。注意,多个键值条目由空格分隔,而不是逗号。
match => {
"field1" => "value1"
"field2" => "value2"
...
}
# or as a single line. No commas between entries:
match => { "field1" => "value1" "field2" => "value2" }
2.7、Number
数字必须是有效的数值(浮点数或整数)。
port => 33
2.8、Password
密码是一个字符串,只有一个值,不被记录或打印。
my_password => "password"
2.9、URI
URI可以是任何东西,从完整的URL(如http://elastic.co/)到简单的标识符(如foobar)。若URI包含密码,例如http://user:pass@example.net,则不会记录或打印URI的密码部分。
my_uri => "http://foo:bar@example.net"
2.10、Path
路径是表示有效操作系统路径的字符串。
my_path => "/tmp/logstash"
2.11、String
字符串必须是单个字符序列。注意字符串值用双引号或单引号括起来。
2.12、转义字符 Escape Sequences
默认情况下,不启用转义序列。若希望在带引号的字符串中使用转义序列,则需要单独进行设置。在logstash.yml中配置项Support_escapes: true。
name => "Hello world"
name => 'It\'s a beautiful day'
2.13、注释 Comments
注释以#字符开头,不需要在行首。
# this is a comment
2、Outputs 配置
2.1、输出到指定文件
修改解压目录bin下的 logstash.conf,数据源从控制台输入,结果输出到磁盘做持久化存储,配置详情如下:
input {
stdin{
}
}
output {
file{
path=>'D:\\development\\Logstash\\output\\logstash_file'
}
}
执行启动命令:
logstash -f logstash.conf
启动成功后,在控制台中输出如下内容。
查看磁盘中的 logstash_file 文件:
文件详情如下:
2.2、输出到ElastisSearch
修改解压目录bin下的 logstash.conf,数据源从控制台输入,结果输出到ElasticSearch的 logstash-example 索引中,配置详情如下:
input {
stdin{
}
}
output {
elasticsearch{
action=>"index"
index=>"logstash-example"
hosts=>["http://127.0.0.1:9200"]
}
}
action 表示对 elasticsearch 进行的操作,index 表示给文档建立一个索引;index 表示写入事件时所用的索引;host 是一个数组,指明 ES 集群,因本机是单节点,所以只有一个ip:port。
执行启动命令:
logstash -f logstash.conf
启动成功后,在控制台中输出如下内容。
查看ElasticSearch的 logstash-example 索引下的文档,可以看到日志信息已经输出到ES中。详情如下:
3、Inputs 配置
在 D:\development\Logstash\logs 文件下新建日志文件 access.log,详情如下:
71.141.244.242 - kurt [18/May/2011:01:48:10 -0700] "GET /admin HTTP/1.1" 301 566 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
134.39.72.245 - - [18/May/2011:12:40:18 -0700] "GET /favicon.ico HTTP/1.1" 200 1189 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)"
98.83.179.51 - - [18/May/2011:19:35:08 -0700] "GET /css/main.css HTTP/1.1" 200 1837 "http://www.safesand.com/information.htm" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
logstash.yml 配置文件详情如下:
input {
file {
path => "D:/development/Logstash/logs/access.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
stdout { codec => rubydebug }
}
依照 logstash.yml 配置文件启动Logstash,格式化输出日志文件,输出结果如下:
4、Filters配置
Filters是一种内联处理机制,可以根据需要对数据进行分割。详情如下:
logstash.yml 配置内容如下:
input { stdin { } }
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
stdout { codec => rubydebug }
}
依照 logstash.yml 配置文件启动Logstash,输入如下内容:
127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"
输出结果如下:
Logstash 通过 grok过滤器 可以解析Apache“组合日志”格式的日志行,并将该日志行分解成许多不同的离散信息,便于查询和分析日志数据。比如提取 HTTP响应代码、IP地址等信息。
通过 date 过滤器解析出时间戳,并将其用作事件的时间戳。