- 前言
logstash是ELK日志系统中的一部分,主要承担将收集完成日志进行过滤,并且输出到es的职责。
logstash本身也可以作为客户端部署到应用系统的服务器上进行日志收集,但是由于资源开销占用过大,所以客户端的收集工作交给了beats进行,logstash专心在独立的服务器上完成日志解析处理的工作。
官方文档说明:https://www.elastic.co/guide/en/logstash/
这里比较建议直接看英文的说明文档,找到你对应的版本,别的文档感觉都不如它靠谱(血与泪的教训??)。
ELK的组件版本建议保持一致,这里我采用的是5.6.10的版本,也就是beats、logstash、kibana和es都是这个版本。
- 系统结构
Logstash的事件(logstash将数据流中等每一条数据称之为一个event)处理流水线有三个主要角色完成:inputs –> filters –> outputs:
inpust:必须,负责产生事件(Inputs generate events),常用:File、syslog、redis、beats(如:Filebeats)
filters:可选,负责数据处理与转换(filters modify them),常用:grok、mutate、drop、clone、geoip
outpus:必须,负责数据输出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、statsd
其中inputs和outputs支持codecs(coder&decoder)在1.3.0 版之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,所以完整的数据流程应该是:input | decode | filter | encode | output;codec 的引入,使得 logstash 可以更好更方便的与其他有自定义数据格式的运维产品共存,比如:graphite、fluent、netflow、collectd,以及使用 msgpack、json、edn 等通用数据格式的其他产品等。
- 下载安装
这边介绍下我的安装方式,我是在linux centos6.5的操作系统上进行安装的。
第一步,安装JDK1.8,这里不做过多介绍了。
第二步,去官网下载logstash安装包,地址:https://www.elastic.co/cn/downloads/past-releases/logstash-5-6-10,替换后面的版本号找到对应的版本就行。
我下载的tar压缩包logstash-5.6.10.tar.gz,解压完后进入目录。
tar -zxvf logstash-5.6.10.tar.gz -C /usr/cd /usr/logstash-5.6.10#在目录下随便建个文件夹用存放conf文件[[email protected] logstash-5.6.10]# mkdir logstash.conf
第三步,编写一个简单的conf文件测试功能。
[[email protected] logstash-5.6.10]# vi logstash.conf/stdin.conf #下面是conf文件示例,只构造了标准输入和输出 input { stdin { add_field => {"key" => "value"} codec => "plain" tags => ["add"] type => "std" } } output { # 标准输出 stdout { codec => rubydebug } }
构建完成后保存,启动命令
[[email protected] logstash-5.6.10]# bin/logstash -f logstash.conf/stdin.conf
输入"hello"
至此logstash的安装已经完成,还算简单吧。
- 安装filebeat
一开始介绍的时候说了,logstash一般扮演日志过滤的角色,日志收集交给beats来完成,filebeat是beats的一个组件,并且高版本的logstash很多插件如input-log4j2-plugin无法使用,相信很多小伙伴用logstash来处理log4j的日志的,官方建议采用beats插件来完成input的功能。
由于beats包括filebeats在后面介绍beats的时候会详细讲解,这边就先简单介绍下安装过程。
官方下载地址:https://www.elastic.co/cn/downloads/past-releases/filebeat-5-6-10,同样的下载tar包后解压就能食用。
tar -zxvf filebeat-5.6.10.tar.gz -C /usr/cd /usr/filebeat-5.6.10#修改配置文件filebeat.yml[[email protected] filebeat-5.6.10]# vi filebeat.yml filebeat.prospectors:- input_type: logpath:#这是filebeat输入的log存放路径,改成你应用的日志存放路径 - /home/filebeat_log/*.log
#没有安装es集群的先注释掉es的配置,否则运行中日志会warn,打开输出配置,端口号为5044,待会在logstash中需要这个端口号
下面给一个启动filebeat的启动脚本,也可以直接命令行启动:service filebeat start
#!/bin/bash#注意修改你的home路径 FILEBEAT_HOME="/usr/filebeat-5.6.10" agent="$FILEBEAT_HOME/filebeat" args="-c $FILEBEAT_HOME/filebeat.yml -path.home $FILEBEAT_HOME -path.config $FILEBEAT_HOME -path.data $FILEBEAT_HOME/data -path.logs $FILEBEAT_HOME/logs" test_args="-e -configtest" test() { echo "test config" $agent $args $test_args } start() { pid=`ps -ef |grep $FILEBEAT_HOME/data |grep -v grep |awk ‘{print $2}‘` if [ ! "$pid" ];then echo "Starting filebeat: " test if [ $? -ne 0 ]; then echo exit 1 fi $agent $args & if [ $? == ‘0‘ ];then echo "start filebeat ok" else echo "start filebeat failed" fi else echo "filebeat is still running!" exit fi } stop() { echo -n $"Stopping filebeat: " pid=`ps -ef |grep $FILEBEAT_HOME/data |grep -v grep |awk ‘{print $2}‘` if [ ! "$pid" ];then echo "filebeat is not running" else kill $pid echo "stop filebeat ok" fi } restart() { stop start } status(){ pid=`ps -ef |grep $FILEBEAT_HOME/data |grep -v grep |awk ‘{print $2}‘` if [ ! "$pid" ];then echo "filebeat is not running" else echo "filebeat is running" fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; test) test ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac
保存成filebeat.sh后启动。
sh filebeat.sh start
- logstash集成filebeat
回到logstash的安装目录,新建conf配置文件log4j2.conf
input { beats { port => 5044 } } output { # 标准输出 stdout { codec => rubydebug } }
对只需要在input里加入beats插件,端口号是你刚刚在filebeat.yml中的端口号,启动logstash
[[email protected] logstash-5.6.10]# logstash -f logstash.conf/log4j2.conf
当你在/home/filebeat_log/*.log中产生日志文件时,logstash就会进行解析。
原文地址:https://www.cnblogs.com/Epir/p/10695513.html