filebeat ->redis -> logstash -> es实践
基于如下日志架构实践从环境搭建到日志采集输出到ES的全过程:
其中关于ES集群,redis,kibana的环境搭建,在这篇文章中不做任何体现,我在其他文章中有详细的笔记,可以搜索找到。
那么现在需要的是下载filebeat和logstash两个环境包,这里推荐下载.tar.gz后缀的压缩文件包。
另外需要注意的是 filebeat logstash es kibana 版本要求一直,避免出现不兼容的情况。
本篇文章中主要作为一个技术验证,不会有太复杂的动作。
下载filebeat 和 logstash的地址如下:
https://www.elastic.co/cn/beats/filebeat
https://www.elastic.co/cn/logstash/
1.filebeat需要部署在需要采集日志的目标服务器中,比如上传到/opt目录下,在目录/opt/filebeat-7.13.2-linux-x86_64/下创建filebeat_redis.yml文件,用于将采集的目标日志写入到redis消息队列中:
#比如我现在采集的NPM的后端服务运行的日志
filebeat.inputs:
- type: log
enabled: true
backoff: "1s"
tail_files: false
paths:
- /app/api/logs/*.log #日志文件
fields:
filetype: log_npmjson #这里是自定义名称
fields_under_root: true
output.redis:
enabled: true
hosts: ["103.104.202.36:6379"] #redis
key: npm #redis 键名称
db: 1 #写入的db
datatype: list #输出类型 list
启动filebeat:
./filebeat -e -c filebeat_redis.yml
后台启动:
nohup /opt/filebeat-7.13.2-linux-x86_64/filebeat -e -c /opt/filebeat-7.13.2-linux-x86_64/filebeat_redis.yml >/dev/null 2>&1 &
查看运行状态机器相关操作:
systemctl status filebeat
systemctl start filebeat
systemctl stop filebeat
systemctl restart filebeat
2.logstash部署到一台单独的服务器,将.tar.gz文件上传到/opt目录下并解压,在config目录下创建文件logstash_npm_redis.yml,写入内容:
input {
redis {
host => "103.104.202.36" #redis
port => 6379 #redis 端口
key => "npm" #redis 键名称
data_type => "list" #数据类型
db =>1 #从db1中读
}
}
filter {
json {
source => "message" #只读取message内容
remove_field => [""] #需要从message中过滤的字段,这里是字符串数组,比如:["field1","field2","....."]
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #时间戳格式化
target => "@timestamp" #从@timestamp中取时间戳,通过 match 进行格式化
}
}
output { #将消息队列中的数据输出到ES
elasticsearch {
hosts => ["192.168.30.22:9200"]
index => "redis-npm-%{+YYYY.MM.dd}" #索引的命名规则
}
}
启动logstach:
cd /opt/logstash-7.13.2/
bin/logstash -f config/logstash_npm_redis.conf
稍微等30s,启动过程稍慢
查看进程:
ps -ef |grep logstash
结束进程:
kill -9 进程号
3.查看kibana:
日志已经在正常写入:
查看ES:
后续可以进行java开发 对接ES的日志数据 ,输出到指定的管理平台。