一、logstash简介
Logstash是一个开源的服务器端数据处理管道。
logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是 Elasticsearch。)
Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。
在这里插入图片描述
输入:采集各种样式、大小和来源的数据
Logstash 支持各种输入选择 ,同时从众多常用来源捕捉事件。
能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
在这里插入图片描述
过滤器:实时解析和转换数据
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

利用 Grok 从非结构化数据中派生出结构
从 IP 地址破译出地理坐标
将 PII 数据匿名化,完全排除敏感字段
简化整体处理,不受数据源、格式或架构的影响
输出:选择您的存储库,导出您的数据
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。
Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
在这里插入图片描述
二、Logstash安装与配置
实验环境:
新建一台虚拟机

server7  172.25.254.7 logstash安装

软件下载
https://elasticsearch.cn/download/
logstash安装

rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh logstash-7.6.1.rpm
[root@server7 ~]# cd /usr/share/logstash/
[root@server7 logstash]# ls
bin  CONTRIBUTORS  data  Gemfile  Gemfile.lock  lib  LICENSE.txt  logstash-core  logstash-core-plugin-api  modules  NOTICE.TXT  tools  vendor  x-pack
[root@server7 logstash]# cd bin/
[root@server7 bin]# ls
benchmark.sh  dependencies-report  logstash      logstash-keystore      logstash.lib.sh  logstash-plugin.bat  pqrepair  setup.bat
cpdump        ingest-convert.sh    logstash.bat  logstash-keystore.bat  logstash-plugin  pqcheck              ruby      system-install
[root@server7 bin]# /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'  命令行的方式

在这里插入图片描述
file输出插件
标准输入到文件

vim /etc/logstash/conf.d/file.conf
cd  /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f file.conf

在这里插入图片描述
2.1标准输入到文件

vim /etc/logstash/conf.d/file.conf
input {
        stdin { }
}
output {
        file {   指定file模块
                path => "/tmp/logstash.txt"        	#在终端输入内容后输出的存储文件路径
                codec => line { format => "custom format: %{message}"}#定制数据格式
        }                                %{message}:一个变量在终端输入的所有内容                   
}
指定配置文件运行
[root@server7 conf.d]# /usr/share/logstash/bin/logstash -f file.conf

在标准输入中键入内容
在这里插入图片描述
在指定文件中查看

[root@server7 conf.d]# cat /tmp/logstash.txt 
custom format: hello
custom format: westos
custom format: linux

2.2.1标准输入到es主机

vim /etc/logstash/conf.d/es.conf
input {
        stdin { }
}
output {
        stdout {}
        elasticsearch {
                hosts => ["172.25.254.4:9200"]    #输出到的ES主机与端口
  创建的索引    index => "logstash-%{+YYYY.MM.dd}"   #定制索引名称:年 月 日
        }
}

指定配置文件运行

[root@server7 conf.d]# /usr/share/logstash/bin/logstash -f es.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2.2标准输入到es主机

[root@server7 conf.d]# yum install -y httpd
[root@server7 conf.d]# systemctl start httpd
[root@server7 conf.d]# echo www.westos.org > /var/www/html/index.html
[root@server7 ~]# ll -d /var/log/httpd/access_log   查看日志文件权限
-rw-r--r-- 1 root root 0 Jun 12 21:33 /var/log/httpd/access_log
[root@server7 ~]# ll -d /var/log/httpd
drwx------ 2 root root 41 Jun 12 21:33 /var/log/httpd
[root@server7 ~]# chmod 755 /var/log/httpd  增加权限
[root@server7 ~]# ll -d /var/log/httpd
drwxr-xr-x 2 root root 41 Jun 12 21:33 /var/log/httpd

客户端压力测试访问产生大量日志
在这里插入图片描述

[root@server7 ~]# vim /etc/logstash/conf.d/es.conf
input {
        file {
                path => "/var/log/httpd/access_log"  Apache的日志文件
                start_position => "beginning"  开始读的位置
        }

}


output {
        stdout {}

        elasticsearch {
                hosts => ["172.25.254.6:9200"]
                index => "logstash-%{+YYYY.MM.dd}"
        }
}
[root@server7 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf

运行后会自动读取Apache的日志文件
在这里插入图片描述
查看ES主机
在这里插入图片描述
3.logstash如何区分设备、文件名、文件的不同版本
logstash会把进度保存到sincedb文件中

[root@server7 ~]# find / -name .sincedb*
/usr/share/logstash/data/plugins/inputs/file/.sincedb_15940cad53dd1d99808eeaecd6f6ad3f
[root@server7 ~]# cd /usr/share/logstash/data/plugins/inputs/file/
[root@server7 file]# ls -a
.  ..  .sincedb_15940cad53dd1d99808eeaecd6f6ad3f

[root@server7 file]# ls -i /var/log/httpd/access_log 
13688784 /var/log/httpd/access_log
删除此文件,并且删除ES主机上的信息,则数据彻底消失,需要重新读取
[root@server7 file]# cat .sincedb_15940cad53dd1d99808eeaecd6f6ad3f
13688784 0 64768 10300 1591969755.1893978 /var/log/httpd/access_log
sincedb文件一共6个字段
inode编号
文件系统的主要设备号
文件系统的次要设备号
文件中的当前字节偏移量
最后一个活动时间戳(浮点数)
与此记录匹配的最后一个已知路径

三、Syslog输入插件
3.1logstash可以伪装成日志服务器,直接接收远程日志。(远程日志采集)

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf

netstat -antulp |grep :514 查看端口
tcp6       0      0 :::514                  :::*                    LISTEN      3171/java           
udp        0      0 0.0.0.0:514             0.0.0.0:*                           3171/java     

在server4上

vim /etc/rsyslog.conf
92 *.* @@172.25.254.7:514
systemctl restart rsyslog.service

在这里插入图片描述
再次测试一下

[root@server4 ~]# logger westos

在这里插入图片描述
添加其他主机的日志信息也是同样的操作

vim /etc/rsyslog.conf
92 *.* @@172.25.254.7:514
systemctl restart rsyslog.service

3.2多行过滤插件
多行过滤可以把多行日志记录合并为一行事件

input {
	stdin {
	codec => multiline {  调用模块
		pattern => "^EOF"   开始位置,定义开始字符
		negate => true   是否匹配到
		what => previous    匹配到向上合并
		}
	}
}

output {
	stdout {}
}

获取日志文件

[root@server4 elasticsearch]# pwd
/var/log/elasticsearch
[root@server4 elasticsearch]# scp my-se-2020-06-12-1.log.gz server7:
[root@server7 ~]# gunzip my-se-2020-06-12-1.log.gz 
[root@server7 ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm  logstash-7.6.1.rpm  my-se-2020-06-12-1.log
[root@server7 ~]# mv my-se-2020-06-12-1.log /var/log/my-es.log
[root@server7 ~]# ll /var/log/my-es.log
-rw-r--r-- 1 root root 102481 Jun 13 01:02 /var/log/my-es.log

指定配置文件运行

需要删除刚才执行的痕迹否则再次执行终端没有输出
[root@server7 ~]# cd /usr/share/logstash/data/plugins/inputs/file/
[root@server7 file]# ls -a
.  ..  .sincedb_13f094911fdac7ab3fa6f4c93fee6639  .sincedb_15940cad53dd1d99808eeaecd6f6ad3f
root@server7 file]# cat .sincedb_13f094911fdac7ab3fa6f4c93fee6639
9674752 0 64768 102481 1591983289.626967 /var/log/my-es.log
[root@server7 file]# rm -rf .sincedb_13f094911fdac7ab3fa6f4c93fee6639  
[root@server7 conf.d]# /usr/share/logstash/bin/logstash -f test.cof 

查看输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四grok过滤插件

vim /etc/logstash/conf.d/grok.conf
[root@server7 conf.d]# vim grok.conf
[root@server7 conf.d]# cat grok.conf
input {
	stdin {}
}
filter {
	grok {
	match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
	}
}
output {
	stdout {}
}

指定配置文件运行
 /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf
查看输出
55.3.244.1 GET /index.html 15824 0.043

在这里插入图片描述
apache服务日志过滤实战

[root@server7 ~]# cd /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/
[root@server7 patterns]# cat  httpd 
HTTPDUSER %{EMAILADDRESS}|%{USER}
HTTPDERROR_DATE %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}

# Log formats
HTTPD_COMMONLOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{HTTPDUSER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
HTTPD_COMBINEDLOG(引用) %{HTTPD_COMMONLOG} %{QS:referrer} %{QS:agent}

# Error logs
HTTPD20_ERRORLOG \[%{HTTPDERROR_DATE:timestamp}\] \[%{LOGLEVEL:loglevel}\] (?:\[client %{IPORHOST:clientip}\] ){0,1}%{GREEDYDATA:message}
HTTPD24_ERRORLOG \[%{HTTPDERROR_DATE:timestamp}\] \[%{WORD:module}:%{LOGLEVEL:loglevel}\] \[pid %{POSINT:pid}(:tid %{NUMBER:tid})?\]( \(%{POSINT:proxy_errorcode}\)%{DATA:proxy_message}:)?( \[client %{IPORHOST:clientip}:%{POSINT:clientport}\])?( %{DATA:errorcode}:)? %{GREEDYDATA:message}
HTTPD_ERRORLOG %{HTTPD20_ERRORLOG}|%{HTTPD24_ERRORLOG}

# Deprecated
COMMONAPACHELOG %{HTTPD_COMMONLOG}
COMBINEDAPACHELOG %{HTTPD_COMBINEDLOG}

[root@server7 patterns]# ls
aws     bind  exim       grok-patterns  httpd  junos         maven        mcollective-patterns  nagios      rails  ruby
bacula  bro   firewalls  haproxy        java   linux-syslog  mcollective  mongodb               postgresql  redis  squid

vim /etc/logstash/conf.d/apache.conf
input {
        file {
		path => "/var/log/httpd/access_log"
		start_position => "beginning"
	}
}
filter{
	grok {
		match => { "message" => "%{HTTPD_COMBINEDLOG}" }  (上放代码获取值‘引用’已经标注)
	}
}
output {
		stdout {}
        elasticsearch {
                hosts => ["172.25.254.6:9200"]
                index => "apachelog-%{+YYYY.MM.dd}"
        }
}
删除刚才运行过的痕迹
[root@server7 ~]# cd /usr/share/logstash/data/plugins/inputs/file/
[root@server7 file]# ls -a
.  ..  .sincedb_13f094911fdac7ab3fa6f4c93fee6639  .sincedb_15940cad53dd1d99808eeaecd6f6ad3f
[root@server7 file]# cat .sincedb_15940cad53dd1d99808eeaecd6f6ad3f 
13688784 0 64768 10300 1591970666.120453 /var/log/httpd/access_log
[root@server7 file]# rm -rf .sincedb_15940cad53dd1d99808eeaecd6f6ad3f
指定配置文件运行
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf

查看输出

在这里插入图片描述
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐