Logstash 介绍

Logstash能够将采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储。

Input:输入,输入数据可以是Stdin、File、TCP、Redis、Syslog等。

Filter:过滤,将日志格式化。有丰富的过滤插件:Grok正则捕获、Date时间处理、Json编解码、Mutate数据修改等。

Output:输出,输出目标可以是Stdout、File、TCP、Redis、ES等

Logstash 部署

二进制方式部署:

yum install java-1.8.0-openjdk -y
tar zxvf logstash-7.9.3.tar.gz
mv logstash-7.9.3 /opt/elk/logstash

修改配置文件:

vi /opt/elk/logstash/config/logstash.yml

pipeline: # 管道配置
batch:
size: 125
delay: 5
path.config: /opt/elk/logstash/conf.d # conf.d目录自己创建
# 定期检查配置是否修改,并重新加载管道。也可以使用SIGHUP信号手动触发
# # config.reload.automatic: false
# # config.reload.interval: 3s
# # http.enabled: true
http.host: 0.0.0.0
http.port: 9600-9700
log.level: info
path.logs: /opt/elk/logstash/logs

Logstash 基本使用

示例:从标准输入获取日志并打印到标准输出

#注意先注视掉配置文件中path.config这个参数,这个是指定目录下的文件(file)输出的。
path.config: /opt/elk/logstash/conf.d

#控制台输出
/opt/elk/logstash/bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
hello world
{
"@version" => "1",
"message" => "hello world ",
"@timestamp" => 2020-11-05T09:23:44.025Z,
"host" => "localhost"
}

默认给日志加的三个字段:

• “@timestamp” 标记事件发生的时间点

• “host” 标记事件发生的主机

• “type” 标记事件的唯一类型

命令行参数:

• -e 字符串形式写配置

• -f 指定配置文件

• -t 测试配置文件语法

输入插件(Input)

输入阶段:从哪里获取日志 常用插件:

• Stdin(一般用于调试)

• File

• Redis

• Beats(例如filebeat)

示例:读取日志文件并输出到文件

创建目录及文件(用于测试)

#输入文件
mkdir /var/log/test
touch /var/log/test/1.log
touch /var/log/test/2.log
#输出文件
touch /tmp/test.log

输入插件:File

File插件:用于读取指定日志文件 常用字段:

• path 日志文件路径,可以使用通配符

• exclude 排除采集的日志文件

• start_position 指定日志文件什么位置开始读,默认从结尾 开始,指定beginning表示从头开始读

vim /opt/elk/logstash/conf.d/test.conf

input {
file {
path => "/var/log/test/*.log"
exclude => "1.log"
start_position => "beginning"
}
}
filter {

}

output {
file {
path => "/tmp/test.log"
}
}

在启动之前可以先测试以下配置文件是否正确

#测试配置文件
/opt/elk/logstash/bin/logstash -t -f /opt/elk/logstash/conf.d/test.conf
#启动logstash
/opt/elk/logstash/bin/logstash -f /opt/elk/logstash/conf.d/test.conf

这里我们采用配置为系统服务启动:

vim /usr/lib/systemd/system/logstash.service

[Unit]
Description=logstash
[Service]
ExecStart=/opt/elk/logstash/bin/logstash -f /opt/elk/logstash/conf.d/*.conf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

加载配置

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

测试验证:

echo 1111111111111 >> /var/log/test/1.log  #发现并没有输出到/tmp/test.log文件中
echo 2222222222222 >> /var/log/test/2.log #发现输出到/tmp/test.log文件中

示例:配置日志来源

输入插件:通用配置字段

输入插件都支持的字段:

• add_field 添加一个字段到一个事件,放到事件顶部,一般用于标记日志来源。例如属于哪个项目,哪个应用

• tags 添加任意数量的标签,用于标记日志的其他属性,例如表明访问日志还是错误日志

• type 为所有输入添加一个字段,例如表明日志类型

vim /opt/elk/logstash/conf.d/test.conf

input {
file {
path => "/var/log/test/*.log"
exclude => "1.log"
start_position => "beginning"
tags => "web"
tags => "nginx"
type => "access"
add_field => {
"project" => "microservice"
"app" => "product"
}
}
}
filter {

}

output {
file {
path => "/tmp/test.log"
}
}

热加载配置

kill -HUP <logstash pid>

测试验证:

echo 9999999999999999 >> /var/log/test/2.log