前言
博主使用的elk 版本为7.8.1,后续安装和使用的也是logstash 7.8.1
文章目录
一、下载上传
下载地址:
https://elasticsearch.cn/download/
博主上传在/export/soft
安装在 /export/install
程序目录 /export/servers
二、解压
#进入解压包目录
cd /export/soft
#解压到intall 目录
tar -zxvf logstash-7.8.1.tar.gz -C ../install
#进入应用目录
cd /export/servers
#创建软链接
ln -s ../install/logstash-7.8.1 ./logstash
三、创建conf 脚本
#创建一个目录用来存放conf文件
mkdir shell
#创建配置文件test.conf
vim shell/test.conf
# 添加如下内容
input{
stdin{}
}
output{
stdout{codec=>"rubydebug"}
}
四、启动logstash
启动需要一定的时间
logstash/bin/logstash -f ./shell/test.conf
看到如上图所示,可以在里面输入一些内容然后回车,或者直接回车也行
然后可以看到此效果就说明启动成功了
五、logstsh 插件
1. input
- stdin : 可管道输入,也可从终端交互输入
- 通用配置:
- codec
- type
- tags
- add_field
# 测试作业
#创建一个新的conf文件
vim shell/test02.conf
#添加如下内容:
input{
stdin {
codec => "plain"
tags => ["test"]
type => "std"
add_field => {"key"=>"value"}
}
}
output{
stdout{
codec=>"rubydebug"
}
}
#重新启动执行测试效果
echo "hello world" | logstash/bin/logstash -f ./shell/test02.conf
2. File
从文件读取数据,如常见的日志文件
配置:
path: ["/var/log/**/.log",“var/log/message”] 文件位置
exclue => ".gz" 不读取哪些文件
sincedb_path => “var/log/message” 记录sincedb文件路径
start_postion => “beginning” 或者 “end” 是否从头读取文件
stat_interval => 1000 单位秒,定时检查文件是否有更新,默认1 秒
#创建一个新的conf文件
vim shell/test03.conf
#添加如下内容:
input{
file {
path => ["/opt/elk/*.txt"]
start_position => "beginning"
type => "file"
}
}
output{
stdout{
codec=>"rubydebug"
}
}
# 准备
mkdir -p /opt/elk
# 生成文件
echo "hello world" >> /opt/elk/file.txt
# 重新启动执行测试效果
logstash/bin/logstash -f ./shell/test03.conf
#重新打开一个窗口,继续往文件中输入内容,读取文件成功
echo "hadoop" >> /opt/elk/file.txt
echo "mapreduce" >> /opt/elk/file.txt
3. 从ElasticSerach中读取数据
#创建一个新的conf文件
vim shell/test04.conf
#添加如下内容:
input{
elasticsearch {
hosts => "192.168.100.111"
index => "movie_index"
query => '{
"query":{
"match_all":{}
}
}'
}
}
output{
stdout{
codec=>"rubydebug"
}
}
# 重新启动执行测试效果
logstash/bin/logstash -f ./shell/test04.conf
es 中的数据如下
PUT /movie_index/movie/1
{ "id":1,
"name":"operation red sea",
"doubanScore":8.5,
"actorList":[
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}
PUT /movie_index/movie/2
{
"id":2,
"name":"operation meigong river",
"doubanScore":8.0,
"actorList":[
{"id":3,"name":"zhang han yu"}
]
}
PUT /movie_index/movie/3
{
"id":3,
"name":"incident red sea",
"doubanScore":5.0,
"actorList":[
{"id":4,"name":"zhang chen"}
]
}
效果如下:
4. Filter 过滤
date: 日期解析
grok: 正则解析
dissect: 分割字符串
mutate: 对字段作出来,比如重命名/删除/替换等
json: 安装json解析字段内容到指定字段中
geoip: 增加地理位置数据
ruby: 利用ruby代码来动态修改 logstash Event
#创建一个新的conf文件
vim shell/test05.conf
#添加如下内容:
input{
stdin{codec=>"json"}
}
filter{
date{
match =>["logdate","MM dd yyyy HH:mm:ss"]
}
}
output{
stdout{
codec=>"rubydebug"
}
}
# 重新启动执行测试效果
logstash/bin/logstash -f ./shell/test05.conf
# 输入以下内容
{"logdate":"Jan 01 2020 18:14:30"}