主要配置logstash-sample.conf配置文件
#文件 logstash-sample.conf
#input 监听filebeat端口5044
input {
beats {
port => 5044
}
}
filter {
#grok正则转换【注:(%{GREEDYDATA:kylinRequest}) 匹配剩余所有数据,使用\转译符号】
grok {
#匹配满足要求的massage,可以配置对各match,即可以匹配多个日志,注意配置不能相互干扰
match => {"message" => ""} #根据日志,配置grok正则转换,到""中
}
#对数据中存在json的字段进行单独处理,例举:【若json中存在\转译符,会出现单个数据不全的情况】
#去除\n和空值
mutate {
strip = ["json"]
}
#转为json并赋值给target
json {
source => "json"
target => "kylinRequest"
}
#删除不需要的数据,以逗号分割
mutate {
remove_field => ["message","json"]
}
# @timestamp与我们时区差8小时,配置
ruby {
code => "event.set('timestamp',event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {
remove_field => ["timestamp"]
}
}
output {
#输出至控制台[生产环境要注释]
stdout {
codec => rubydebug
}
#输出至elasticsearch
elasticsearch {
hosts => ["192.168.88.111:9200","192.168.88.112:9200","192.168.88.113:9200"]
}
#配置index,每天跟随时间新建index
indexn => "wyw_%{+YYYYMMdd}"
#配置document
document_type => "kylin"
#若配置登录认证,需要配置es的登录账号和密码,例举
user => "elastic"
password => "123456"
}
如果是多地址,多index输出
#在Logstash配置中使用判断
filter {
if [filetype] == "log_kylin"{
grok {
match => {"message" => ""}
}
} else if [filetype] == "log_AAA"{
}
}
output {
if [filetype] == "log_kylin"{
grok {
match => {"message" => ""}
}
} else if [filetype] == "log_AAA"{
}
}
启动logstash
#正常启动
bin/logstash -f logstash-sample.conf --config.reload.automatic
#配置地址启动
bin/logstash -f logstash-sample.conf --path.data=/home/es1/logstash-6.5.4/test --config.reload.automatic
#后台启动,不生成日志
nohup bin/logstash -f logstash-sample.conf --path.data=/home/es1/logstash-6.5.4/test --config.reload.automatic >dev/null 2>&1 &
样例配置
input {
beats {
port => 5044
}
}
filter {
# grok正则转换 【注:(%{GREEDYDATA:json1}|-) 匹配所有数据】
grok {
match => {"message" => "%{TIMESTAMP_ISO8601:time} %{LOGLEVEL:loglevel} %{NUMBER:number} --- \[%{USERNAME:XNIO} %{USERNAME:task}\] %{USERNAME:KylinService}\s*\: %{USERNAME:-}\: %{NUMBER:logId}\, %{DATA:-}\: %{USERNAME:serviceId|-}\, %{DATA:-}\: \{%{GREEDYDATA:kylinRequest|-}\}"
}
# 删除不需要的字段
#remove_field => ["message","unwanted","fields","tags","input","host","beat"]
}
# 去除\n 和空值[字符串可能存在空值、\n等特殊字符]
# mutate {
# strip => ["json1"]
# }
# 转为json 并赋值给target
# json {
# source => "json1"
# target => "kylinRequest"
# }
# 添加json字段
# 删除处理前的数据
# mutate {
# remove_field => ["json1"]
# }
# @timestamp与我们时区差8个小时,下面添加配置处理
ruby{
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby{
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {
remove_field => ["timestamp"]
}
}
output {
stdout {codec => rubydebug}
elasticsearch {
hosts=> ["192.168.88.111:9200","192.168.88.112:9200","192.168.88.113:9200"]
#index => "english"
user => "elastic" # 注意:这里演示使用超级账号,安全起见最好是使用自定义的账号,并授予该用户创建索引的权限,具体看下方地址
password => "1234567" # 密码是上面步骤设置的
}
}
logstash 设置字段类型
logstash可以设置字段类型为 integer,string,float,boolean
filter{
mutate{
convert => ["handleTime","integer"]
}
}
注
自己不创建模板,es会自动给我们创建模板,这里es自动创建的模板为keyword,我们可以使用上面的在logstash中修改字段类型
- 查看模板命令
10.181.116.83:7920/restful_20210517/_mapping?pretty