工作中遇见一个问题就是,我要将打印到日志中的信息,录入es
这个需求目前很多开源的工具都可以实现,比如flume,logstash,至于为什么我用logstash,只是因为同事有人用过,我觉得又不会的可以咨询一下,所以,,,就选了logstash
1,下载logstash
wget https://vos-dl.vipkid-qa.com.cn/logstash-6.2.4.tar.gz
还是很方便的,开箱即用
tar -zxvf logstash-6.2.4.tar.gz
目录结构:提示,没有logstash.sh,这个是我自己写的启动脚本
2,编写配置文件
cd config
新建配置文件
vim logstash.conf
file{//数据源,文件
type => "es_index"//变量,下面回用,
# 要读取的日志文件
path=>["/opt/vipkid/logtransferApp/var/errorData.log*"]//读取的文件路径
# 从文件读取日志的间隔,单位:秒
stat_interval=>5
start_position => "beginning"//启动时,从头开始读
codec => json {
charset => "UTF-8"
}
}
}
filter {//过滤,类似于通道,进行数据解析,清晰
mutate{
split=>["message","[INFO]"]//这里就千奇百怪了,我的需求与时,需要将真正的日志摘出来,想到的办法:用[INFO]切分字符串,然后去数组第二个
add_field => {
"field1" => "%{[message][1]}"//取到的值赋给field1
}
}
if [type] == "vklm_webapm_big_data" {
json {
source => "field1"//field1作为数据源
#target => "doc"
remove_field => ["message"]//不保留原始字段
}
}
}output{//这个就简单了,输出到es
elasticsearch {
id => "es__index"
action => "index"
codec => "plain"
doc_as_upsert => "false"
hosts => ["xx.xxx.xx.xx:9200","xx.xx.xx.xx:9200"]//9200
index => "es_index-%{+YYYY-MM-dd}"
document_type => "es_itype"
pool_max => 20000
retry_on_conflict => 3
sniffing => true
}}