Logstash收集单个日志到文件中

file模块收集日志

不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件中读取日志的内容,那么接下来讲解的是,将日志内容输出到另一个文件中,如此一来,我们可以将日志文件同意目录,方便查找。

注意:Logstash与其他服务不同,收集日志的配置文件需要我们根据实际情况自己去写。
前提:需要Logstash对被收集的日志文件有读的,并且对要写入的文件,有写入的权限。

#进入Logstash配置文件目录下
[root@linux-node1 ~]# cd /etc/logstash/conf.d/
#编辑Logstash收集日志的配置文件
[root@linux-node1 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@linux-node1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf -t
Configuration OK

结果如图所示:

#如果语法没有错,那就可以启动Logstash了,去掉-t,加上&即可
[root@linux-node1 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf &

启动成功结果如下:


验证收集数据

[root@linux-node1 conf.d]# ll /tmp/
total 1
-rw-r--r-- 1 root root 1519911 Aug  1 17:01 message_2019.08.01.log
#查看日志内容(日志中就一条)
[root@linux-node1 conf.d]# tailf -1 /tmp/message_2019.08.01.log 
{"path":"/var/log/messages","@timestamp":"2019-08-01T09:01:01.339Z","@version":"1","host":"linux-node1.98yz.cn","message":"Aug  1 17:01:01 linux-node1 systemd: Starting Session 141 of user root.","type":"message-log"}
#往系统日志中写入数据
[root@linux-node1 ~]# echo zls_test_message >> /var/log/messages
#再次查看收集到的日志内容(变成了两条)
[root@linux-node1 ~]# cat /tmp/message_2019.08.01.log
{"path":"/var/log/messages","@timestamp":"2019-08-01T09:01:01.339Z","@version":"1","host":"linux-node1.98yz.cn","message":"Aug  1 17:01:01 linux-node1 systemd: Starting Session 141 of user root.","type":"message-log"}
{"path":"/var/log/messages","@timestamp":"2019-08-01T09:04:16.432Z","@version":"1","host":"linux-node1.98yz.cn","message":"zls_test_message","type":"message-log"}

开启两个窗口实时查看:

#右边窗口实时查看日志
[root@linux-node1 ~]# tailf -1 /tmp/message_2019.08.01.log 
#左边窗口往系统日志中插入数据
[root@linux-node1 ~]# echo 1 >> /var/log/messages
[root@linux-node1 ~]# echo 2 >> /var/log/messages
[root@linux-node1 ~]# echo 3 >> /var/log/messages

结果如下图所示:

Logstash收集多个日志到文件中

#进入Logstash配置文件目录
[root@linux-node1 ~]# cd /etc/logstash/conf.d/
#编辑配置文件
[root@linux-node1 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@linux-node1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system_log.conf &

验证收集数据

#查看tmp目录是否有新文件
[root@linux-node1 ~]# ll /tmp/*.log
-rw-r--r-- 1 root root 1529189 Aug  1 17:48 /tmp/message_2019.08.01.log
-rw-r--r-- 1 root root    5398 Aug  1 17:48 /tmp/message2_2019.08.01.log
-rw-r--r-- 1 root root   42048 Aug  1 17:49 /tmp/secure_2019.08.01.log
-rw-r--r-- 1 root root     107 Aug  1 15:15 /tmp/test_2019.08.01.log

#查看新收集的message日志
[root@linux-node1 ~]# cat /tmp/message2_2019.08.01.log
{"path":"/var/log/messages","@timestamp":"2019-08-01T09:50:02.282Z","@version":"1","host":"linux-node1.98yz.cn","message":"Aug  1 17:50:01 linux-node1 systemd: Starting Session 155 of user root.","type":"system_log"}
{"path":"/var/log/secure","@timestamp":"2019-08-01T09:18:17.446Z","@version":"1","host":"linux-node1.98yz.cn","message":"Aug  1 15:01:41 linux-node1 useradd[1157]: new user: name=logstash, UID=996, GID=994, home=/usr/share/logstash, shell=/sbin/nologin","type":"secure_log"}
[root@linux-node1 ~]# cat /tmp/secure_2019.08.01.log 

开启多个窗口实时查看数据:

#右上窗口实时追踪message日志
[root@linux-node1 ~]# tailf /tmp/message2_2019.08.01.log
#右下窗口实时追踪secure日志
[root@linux-node1 ~]# tailf /tmp/secure_2019.08.01.log 
#往message日志中插入数据
[root@linux-node1 conf.d]# echo 1 >> /var/log/messages
[root@linux-node1 conf.d]# echo 2 >> /var/log/messages
[root@linux-node1 conf.d]# echo 3 >> /var/log/messages
#往secure日志中插入数据
[root@linux-node1 conf.d]# echo 1 >> /var/log/secure
[root@linux-node1 conf.d]# echo 2 >> /var/log/secure
[root@linux-node1 conf.d]# echo 3 >> /var/log/secure

Logstash收集多个日志到Elasticsearch中

之前讲到Logstash收集多个日志到文件中,实际上,我们将输出源从文件改到Elasticsearch中即可。
#进入Logstash配置文件目录
[root@linux-node1 ~]# cd /etc/logstash/conf.d/
#编辑配置文件
[root@linux-node1 conf.d]# vim system_es.conf
#输入插件
input {
#文件模块
  file {
#日志路径
    path => "/var/log/messages"
#日志类型
    type => "message_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] == "message_log" {
#elasticsearch模块
    elasticsearch {
#es的ip及端口
      hosts => ["192.168.6.241:9200"]
#es的索引名称,也就是日志名称
      index => "message_log_%{+YYYY.MM.dd}"
    }}
#判断如果类型是secure_log则输出到指定路径
  if [type] == "secure_log" {
#es模块
    elasticsearch {
#es的ip及端口
      hosts => ["192.168.6.241:9200"]
#es的索引名称,也就是日志名称
      index => "secure_log_%{+YYYY.MM.dd}"
    }}
}
#启动Logstash
[root@linux-node1 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system_es.conf &

启动成功,结果如下:

打开浏览器,访问:http://192.168.6.241:9100/ 查看是否有新索引添加

如果没有查看到新数据,那么可以往日志文件中插入几条测试数据,再刷新页面即可。

[root@linux-node1 ~]# echo test_message_to_es >> /var/log/messages
[root@linux-node1 ~]# echo test_secure_to_es >> /var/log/secure

在数据浏览中,我们可以查看到message_log_2019.08.01日志的内容,在message中显示刚才插入的数据:test_message_to_es

在数据浏览中,我们可以查看到secure_log_2019.08.01日志的内容,在message中显示刚才插入的数据:test_secure_to_es

案例:

cat /etc/logstash/conf.d/nginx.conf 
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "end"
    type => "nginx-accesslog"
    codec => json
  }


  file {
    path => "/var/log/nginx/blog.98yz.cn.log_json"
    start_position => "end"
    type => "blog.98yz.cn.log"
    codec => json
  }


  file {
    path => "/var/log/nginx/www.98yz.cn.log_json"
    start_position => "end"
    type => "www.98yz.cn.log"
    codec => json
  }


  file {
    path => "/var/log/nginx/zh.98yz.cn.log_json"
    start_position => "end"
    type => "zh.98yz.cn.log"
    codec => json
  }
}


output {
    elasticsearch {
      hosts => ["192.168.6.241:9200"]
      index => "%{type}-6243-%{+YYYY.MM.dd}"
  }
}
文档更新时间: 2019-08-05 14:46   作者:李延召