filebeat + logstash 发送日志至kafka 入门
filebeat
配置文件 filebeat.yml
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- type: log
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/testlog/*.log
# 自定义添加字段 下面的local_ip 变量是从环境变量中export 出来的
fields:
ip: ${local_ip}
# 如果fields_under_root 值为ture,那么fields存储在输出文档的顶级位置
fields_under_root: true
# 由于是入门,其他配置暂且忽略 ,将读取到的日志信息,输出给logstash
output.logstash:
# The Logstash hosts
hosts: ["192.168.153.129:5044"]
启动filebeat
./filebeat -e -c filebeat.yml -d 'publish'
如果遇到下面的情况导致没法读取传输数据

INFO最近30秒钟内没有非零指标
我们可以删除注册表文件registry,注册表文件存储了Filebeat用来跟踪其最后读取位置的状态和位置信息


删除(备份)后,重启filebeat即可。
下边是正常工作

logstash
官网
第三方配置详解
常用的logstash正则表达式规则
logstash 可以对filebeat 发来的数据进行格式化或过滤,还可以发送给其他服务。
首先我们需要创建一个配置(在logstash 根目录)
vim kafka-config.conf
由于我们这个案例输出给的是kafka,所以我们需要基本配置一下
input {
# 这是filebeat 发送数据接收的端口
beats {
port => "5044"
}
}
output {
# kafka的配置
kafka {
codec => json
topic_id => "test-logstash"
# kafka 所在的主机及端口
bootstrap_servers => "192.168.201.209:9092"
batch_size => 1
}
}
启动logstash
bin/logstash -f kafka-config.conf

kafka
创建测试 topic (最好在filebeat 和 logstash 启动前创建好,并启动kafka)
# 测试的kafka我是放在windows上的
kafka-topics.bat --create --bootstrap-server localhost:9092 --topic test-logstash
启动 kafka Tools ,查看数据

通过logstash 判断数据分发给哪个output
先附上官方filter的github文档
filter文档
伪造数据
[2021.07.28-06:40:21][353470090698976][MZ202104091847341917315573311500][gRPCServer][2000] MD5 code check success. savedFile:559178e95ebd1dcdbcb0dd71c19ccfa9 answer:559178e95ebd1dcdbcb0dd71c19ccfa9
[2021.07.28-06:40:33][353470090698977][MZ202104091847341917315573311501][abc][2111] MD5 code check success. savedFile:559178e95ebd1dcdbcb0dd71c19ccfa9 answer:559178e95ebd1dcdbcb0dd71c19ccfa9
这两行数据中node 一个是
gRPCServer另外一个是abc,我们分别将它们发给topic为test-logstash
和test-logstash2
编辑logstash 配置 kafka-config.conf
input {
beats {
port => "5044"
client_inactivity_timeout => 36000
ssl => true
ssl_certificate_authorities => "/etc/pki/tls/certs/filebeat.crt"
ssl_certificate => "/etc/pki/tls/certs/logstash.crt"
ssl_key => "/etc/pki/tls/private/logstash.key"
ssl_verify_mode => "peer"
}
}
filter{
grok{
match => {
"message" => "\[%{DATA:logtime}\]\[%{DATA:ipcNo}\]\[%{DATA:orderID}\]\[%{DATA:node}\]\[%{DATA:code}\] %{GREEDYDATA:msg}"
}
overwrite => [ "message" ]
}
}
output {
if [node] == "gRPCServer" {
kafka {
codec => json
topic_id => "test-logstash"
bootstrap_servers => "192.168.201.209:9092"
batch_size => 1
}
}
if [node] == "abc" {
kafka {
codec => json
topic_id => "test-logstash2"
bootstrap_servers => "192.168.201.209:9092"
batch_size => 1
}
}
# stdout {
# codec => rubydebug
#
# }
}
启动logstash 和 filebeat
# 启动 logstash 在192.168.153.129 如需使用多个配置文件:`bin/logstash -f 目录` ,配置文件都放在该目录下即可
bin/logstash -f kafka-config.conf
# 启动 filebeat 在192.168.153.128
./filebeat -e -c filebeat.yml -d 'publish'



浙公网安备 33010602011771号