在实际生产环境中,logstash常常需要用到复杂的运行规则,使用命令行显然不可取。所以可以自定义规则文件,然后让Logstash根据规则进行工作。

1. 配置文件

配置文件结构如下:

1
2
3
4
5
6
7
8
9
10
11
input{
}
filter{
}
output{
}

配置文件主要有input,output和filter三个大的部分构成。input是数据的输入源,可以是来自文件,网站,redis,s3等。output是数据的输出,可以输出到文件,elasticsearch,邮件,kafka等。filter是过滤规则,根据需要进行内容的过滤。

将配置文件放在logstash下的config目录中。进入logstash的bin目录,运行配置文件:

1
2
# cd logstash-6.3.2/bin/
# ./logstash -f /root/logstash-6.5.0/config/test.conf

2. 常用插件

例,如下的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
cat UGA-MTN.conf
input {
s3{
access_key_id => "ACCESS_KEY_ID"
secret_access_key => "SECRET_ACCESS_KEY"
bucket => "your_bucket"
region => "your_s3_region"
interval => 600
prefix => "……"
exclude_pattern => "……"
}
}
filter {
urldecode{
all_fields => true
}
grok{
match => {"message" => "%{TIMESTAMP_ISO8601:log_date}\s%{NOTSPACE:log_name}\s(?:%{NOTSPACE:request_body})"}
remove_field => ["log_name"]
}
json {
source => "request_body"
remove_field => ["request_body"]
}
mutate{
add_field => {
"rack" => "……"
}
convert => {
"request_time" => "integer"
"status" => "integer"
"bytes_sent" => "integer"
}
}
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => ["192.168.32.20:9200"] #ElasticSearch host, can be array.
index => "cache_log_%{+YYYY.MM.dd}" #The index to write data to.
document_type => "logs"
}
}

2.1 输入插件s3

s3插件可以从s3上获取数据。常用参数有:

  • access_key_id: String类型,没有默认值。用于获取s3的验证。
  • aws_credentials_file:String类型,没有默认值。用于获取s3的验证。当access_key_id和secret_access_key没有设置的时候,才会加载这个文件。
  • secret_access_key:String类型,默认值是“logstash”,根据实际情况进行修改。

注:常用的获取s3验证的方法有:

  1. access_key_id和ecret_access_key进行配置;
  2. 配置aws_credentials_file从外部文件进行获取;
  3. 将AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY配置到环境变量中。
  4. 将AMAZON_ACCESS_KEY_ID和AMAZON_SECRET_ACCESS_KEY配置到环境变量中。
  5. IAM实例的证书。
  • bucket,String类型必选参数且没有默认值。需要获取数据的s3的桶的名称。
  • region,String类型,默认值是“us-east-1”,表示AWS所在的位置区域。
  • interval,number类型,默认值是60,单位是秒。两次获取数据的间隔时间。
  • prefix,String类型,默认值是nil。表示表示在桶里面需要匹配的文件前缀,不是一个正则表达式。
  • exclude_pattern,String类型,默认值是nil。正则匹配需要从桶里面排除的文件。
  • temporary_directory,String类型,默认值是“/tmp/logstash”,用于临时保存从s3下载的文件,可以根据需求进行修改路径。

其他参数详见官方文档:s3插件说明

2.2 输出插件elasticsearch

elasticsearch只支持HTTP协议,logstash和elasticsearch的交互也优先使用HTTP协议。HTTP协议尽管稍微慢一点,但是很好控制和使用。

  • action,,String类型,默认值是index。表示elasticsearch要进行的操作。有效操作有: index:为文件编索引;delete:根据id删除文件;create:为文件指定创建的索引,如果索引已经存在,则创建失败;update:根据id更新文件信息。
  • hosts,类型是Uri,默认值是[//127.0.0.1]。设置远程实例的主机,可以在数组里放多个ip设置多台主机。
  • index,String类型,默认值是logstash-%{+YYYY.MM.dd}。用于设置数据写入的index名称。

其他参数详见官方文档:elasticsearch插件说明

2.3 filter插件

  • urldecode:Nginx作为反向代理服务器,部分日志在传输的过程中是通过“urlencoded”编码的,通过logstash收集上来的日志需要用urldecode将字符串还原为原来的格式。

Urldecode常用的配置选项:

  1. all_fields:对所有的值进行url的解码,默认值为false

  2. Charset:设置解码使用的字符集,默认为“utf-8”。

  • grok是通过系统预定义的正则表达式或者通过自己定义正则表达式来匹配日志中的各个值,在使用时自己可以根据自己的日志格式或者对匹配正则进行调整或者直接调用。如果,自己想在其他目录定义正则规则匹配日志,在使用时需要指定正则的路径。
  • mutate主要用来修改、替换、删除及重命名字段中的某些插件。