02--Logstach的使用
目录
一、Logstash收集单个日志到文件中
file模块收集日志
不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件中读取日志的内容,那么接下来讲解的是,将日志内容输出到另一个文件中,如此一来,我们可以将日志文件同意目录,方便查找。 注意:Logstash与其他服务不同,收集日志的配置文件需要我们根据实际情况自己去写。 前提:需要Logstash对被收集的日志文件有读的,并且对要写入的文件,有写入的权限
#进入Logstash配置文件目录下
[root@elkstack03 ~]# cd /etc/logstash/conf.d/
#编辑Logstash收集日志的配置文件
[root@elkstack03 conf.d]# vim message.conf
#输入插件
input {
#文件模块
file {
#日志类型
type => "message-log"
#日志路径
path => "/var/log/messages"
#第一次收集日志从头开始
start_position => "beginning"
}
}
#输出插件
output {
#文件模块
file {
#输出路径
path => "/tmp/message_%{+yyyy.MM.dd}.log"
}
}
#检测语法
[root@elkstack03 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf -t
Configuration OK
#如果语法没有错,那就可以启动Logstash了,去掉-t,加上&即可
[root@elkstack03 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf &
验证收集数据
#查看tmp目录下是否生成日志文件
[root@elkstack03 ~]# ll /tmp/
总用量 1
-rw-r--r-- 1 root root 291 3月 30 22:05 message_2019.03.30.log
#查看日志内容(日志中就一条)
[root@elkstack03 ~]# cat /tmp/message_2019.03.30.log
{"path":"/var/log/messages","@timestamp":"2019-03-30T14:05:35.103Z","@version":"1","host":"0.0.0.0","message":"Mar 26 21:23:02 elkstack03 rsyslogd: [origin software=\"rsyslogd\" swVersion=\"5.8.10\" x-pid=\"1073\" x-info=\"http://www.rsyslog.com\"] rsyslogd was HUPed","type":"message-log"}
#往系统日志中写入数据
[root@elkstack03 ~]# echo zls_test_message >> /var/log/messages
#再次查看收集到的日志内容(变成了两条)
[root@elkstack03 ~]# cat /tmp/message_2019.03.30.log
{"path":"/var/log/messages","@timestamp":"2019-03-30T14:05:35.103Z","@version":"1","host":"0.0.0.0","message":"Mar 26 21:23:02 elkstack03 rsyslogd: [origin software=\"rsyslogd\" swVersion=\"5.8.10\" x-pid=\"1073\" x-info=\"http://www.rsyslog.com\"] rsyslogd was HUPed","type":"message-log"}
{"path":"/var/log/messages","@timestamp":"2019-03-30T14:07:37.071Z","@version":"1","host":"0.0.0.0","message":"zls_test_message","type":"message-log"}
开启两个窗口实时查看日志
#右边窗口实时查看日志
[root@elkstack03 ~]# tail -f /tmp/message_2019.03.30.log
#左边窗口往系统日志中插入数据
[root@elkstack03 ~]# echo 1 >> /var/log/messages
[root@elkstack03 ~]# echo 2 >> /var/log/messages
[root@elkstack03 ~]# echo 3 >> /var/log/messages
二、Logstash收集多个日志到文件中
#进入Logstash配置文件目录
[root@elkstack03 ~]# cd /etc/logstash/conf.d/
#编辑配置文件
[root@elkstack03 conf.d]# vim system_log.conf
#输入插件
input {
#文件模块
file {
#日志路径
path => "/var/log/messages"
#日志类型
type => "system_log"
#第一次收集从头收集
start_position => "beginning"
#收集日志间隔时间3秒
stat_interval => "3"
}
#文件模块
file {
#日志路径
path => "/var/log/secure"
#日志类型
type => "secure_log"
#第一次收集从头收集
start_position => "beginning"
#收集日志间隔时间3秒
stat_interval => "3"
}
}
#输出插件
output {
#判断如果类型是system_log则输出到指定路径
if [type] == "system_log" {
#文件模块
file {
#日志输出路径
path => "/tmp/message2_%{+yyyy.MM.dd}.log"
}}
#判断如果类型是secure_log则输出到指定路径
if [type] == "secure_log" {
#文件模块
file {
#日志输出路径
path => "/tmp/secure_%{+yyyy.MM.dd}.log"
}}
}
#启动Logstash
[root@elkstack03 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system_log.conf &
验证收集数据
#查看tmp目录是否有新文件
[root@elkstack03 ~]# ll /tmp/
总用量 12
-rw-r--r-- 1 root root 291 3月 30 22:05 message_2019.03.30.log
-rw-r--r-- 1 root root 294 3月 30 23:00 message2_2019.03.30.log
-rw-r--r-- 1 root root 286 3月 30 23:00 secure_2019.03.30.log
#查看新收集的message日志
[root@elkstack03 ~]# cat /tmp/message2_2019.03.30.log
{"path":"/var/log/messages","@timestamp":"2019-03-30T15:00:05.454Z","@version":"1","host":"0.0.0.0","message":"test_message","type":"message_log"}
#查看新收集的secure日志
[root@elkstack03 ~]# cat /tmp/secure_2019.03.30.log
{"path":"/var/log/secure","@timestamp":"2019-03-30T15:00:24.216Z","@version":"1","host":"0.0.0.0","message":"test_secure","type":"secure_log"}
开启多个窗口实时查看数据
#中间窗口实时追踪message日志
[root@elkstack03 ~]# tail -f /tmp/message2_2019.03.30.log
#右边窗口实时追踪secure日志
[root@elkstack03 ~]# tail -f /tmp/secure_2019.03.30.log
#往message日志中插入数据
[root@elkstack03 ~]# echo 1 >> /var/log/messages
[root@elkstack03 ~]# echo 2 >> /var/log/messages
[root@elkstack03 ~]# echo 3 >> /var/log/messages
#往secure日志中插入数据
[root@elkstack03 ~]# echo 1 >> /var/log/secure
[root@elkstack03 ~]# echo 2 >> /var/log/secure
[root@elkstack03 ~]# echo 3 >> /var/log/secure
三、Logstash收集多个日志到Elasticsearch中
之前将Logstash收集多个日志到文件中,实际上,我们将输出源从文件改到Elasticsearch中即可。
#进入Logstash配置文件目录
[root@elkstack03 ~]# cd /etc/logstash/conf.d/
#编辑配置文件
[root@elkstack03 conf.d]# vim system_es.conf
#输入插件
input {
#文件模块
file {
#日志路径
path => "/var/log/messages"
#日志类型
type => "system_log"
#第一次收集从头收集
start_position => "beginning"
#收集日志间隔时间3秒
stat_interval => "3"
}
#文件模块
file {
#日志路径
path => "/var/log/secure"
#日志类型
type => "secure_log"
#第一次收集从头收集
start_position => "beginning"
#收集日志间隔时间3秒
stat_interval => "3"
}
}
#输出插件
output {
#判断如果类型是system_log则输出到指定路径
if [type] == "system_log" {
#elasticsearch模块
elasticsearch {
#es的ip及端口
hosts => ["192.168.15.51:9200"]
#es的索引名称,也就是日志名称
index => "system_log_%{+YYYY.MM.dd}"
}}
#判断如果类型是secure_log则输出到指定路径
if [type] == "secure_log" {
#es模块
elasticsearch {
#es的ip及端口
hosts => ["92.168.15.51:9200"]
#es的索引名称,也就是日志名称
index => "secure_log_%{+YYYY.MM.dd}"
}}
}
#启动Logstash
[root@elkstack03 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system_es.conf &
#如果不写判断,就写变量
input {
file {
path => "/var/log/messages"
type => "system_log"
start_position => "beginning"
stat_interval => "3"
}
file {
path => "/var/log/secure"
type => "secure_log"
start_position => "beginning"
stat_interval => "3"
}
}
output {
elasticsearch {
hosts => ["192.168.15.51:9200"]
index => "#{type}_%{+YYYY.MM.dd}"
}
}
打开浏览器,访问:http://192.168.15.51:9100 查看是否有新索引添加 如果没有查看到新数据,那么可以往日志文件中插入几条测试数据,再刷新页面即可。
[root@elkstack03 ~]# echo test_message_to_es >> /var/log/messages
[root@elkstack03 ~]# echo test_secure_to_es >> /var/log/secure
删除上一个月的system的日志的脚本
[root@es-03 conf.d]# cat delete_es.sh
#!bin/bash
DATE=`date +%Y-%m -d -1month`
echo $DATE
curl -XDELETE "http://192.168.15.51:9200/system_log_$DATE-%"
四、通过Logstash收集tomcat日志并输出到ES中
因为我们现在需要用Logstash收集tomcat日志,所以我们暂时将tomcat安装到Logstash所在机器,也就是192.168.15.53这台机器,收集tomcat访问日志以及tomcat错误日志进行实时统计,在企业中,tomcat机器肯定不是单台,而是一个集群的形式,那么我们每台tomcat上都需要安装一个Logstash,然后将收集到的日志输出给Elasticsearch进行分析。
1.安装tomcat
#安装java环境
[root@es-03 ~]# yum install -y java*
[root@es-03 ~]# java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)
#安装tomcat
[root@es-03 opt]# cd /opt/
[root@es-03 opt]# rz -E
[root@es-03 opt]# unzip apache-tomcat-9.0.52.zip
[root@es-03 opt]# mv apache-tomcat-9.0.52 /usr/local/tomcat-9.0.52
[root@es-03 opt]# ln -s /usr/local/tomcat-9.0.52 /usr/local/tomcat
[root@es-03 opt]# cd /usr/local/tomcat/webapps/
[root@es-03 webapps]# mkdir webdir
[root@es-03 webapps]# echo 'tomcat_cdan' > webdir/index.html
[root@es-03 logs]# cd ../conf/
[root@es-03 conf]# pwd
/usr/local/tomcat/conf
[root@es-03 conf]# ls
catalina.policy jaspic-providers.xml server.xml web.xml
catalina.properties jaspic-providers.xsd tomcat-users.xml
context.xml logging.properties tomcat-users.xsd
[root@es-03 conf]# vim server.xml
#最下边,注释这段
<!--Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /-->
将tomcat日志改成json格式,修改server配置文件
#编辑tomcat配置文件
[root@es-03 conf]# vim conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="tomcat_access" suffix=".log"
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"/>
#启动tomcat
[root@es-03 conf]# cd ../bin/
[root@es-03 bin]# pwd
/usr/local/tomcat/bin
[root@es-03 bin]# chmod +x catalina.sh
[root@es-03 bin]# ./catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@es-03 bin]# cd .. 看日志
[root@es-03 tomcat]# cd logs/
[root@es-03 logs]# ll
total 20
-rw-r----- 1 root root 6170 Sep 12 14:46 catalina.2021-09-12.log
-rw-r----- 1 root root 6170 Sep 12 14:46 catalina.out
-rw-r----- 1 root root 0 Sep 12 14:46 host-manager.2021-09-12.log
-rw-r----- 1 root root 408 Sep 12 14:46 localhost.2021-09-12.log
-rw-r----- 1 root root 0 Sep 12 14:46 manager.2021-09-12.log
-rw-r----- 1 root root 0 Sep 12 14:46 tomcat_access.2021-09-12.log
#给html加颜色
[root@es-03 logs]# cd /usr/local/tomcat/webapps/
[root@es-03 webapps]# vim webdir/index.html
<font color="red">tomcat_cdan_nice</font>
[root@es-03 tomcat]# cd bin/
[root@es-03 bin]# ./catalina.sh stop
[root@es-03 bin]# ./catalina.sh start
#日志改成json格式
[root@es-03 bin]# cd ../logs/
[root@es-03 logs]# ls
catalina.2021-09-12.log host-manager.2021-09-12.log manager.2021-09-12.log
catalina.out localhost.2021-09-12.log tomcat_access.2021-09-12.log
[root@es-03 logs]# cat tomcat_access.2021-09-12.log
{"clientip":"192.168.15.1","ClientUser":"-","authenticated":"-","AccessTime":"[12/Sep/2021:14:49:55 +0800]","method":"GET /webdir/ HTTP/1.1","status":"200","SendBytes":"12","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.44"}
验证json格式
复制一条日志,打开浏览器,访问:http://www.kjson.com/
2.配置Logstash收集tomcat日志输出到ES中
#进入Logstash配置文件目录
[root@es-03 logs]# cd /etc/logstash/conf.d/
#编辑Logstash配置文件
[root@es-03 conf.d]# vim tomcat_es.conf
input {
file {
path => "/usr/local/tomcat/logs/tomcat_access.*.log"
start_position => "end"
type => "tomct_access_log"
}
}
output {
elasticsearch {
hosts => ["192.168.15.51:9200"]
index => "tomcat_access-%{+YYYY.MM.dd}"
codec => "json"
}
}
#启动Logstash
[root@elkstack03 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat_es.conf &