第七章 logstash深入学习

一、logstash收集日志写入redis

1.配置logstash收集单个日志到redis

[root@web01 ~]# vim /etc/logstash/conf.d/file_redis.conf
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "end"
    codec => "json"
  }
}

output {
  redis {
    host => "172.16.1.81"
    port => "6379"
    key => "nginx_log"
    data_type => "list"
  }
}

2.配置logstash收集多个日志到redis

1)配置

[root@web01 ~]# cat /etc/logstash/conf.d/file_redis.conf
input {
  file {
    type => "nginx_log"
    path => "/var/log/nginx/access.log"
    start_position => "end"
    codec => "json"
  }
  file {
    type => "tomcat_log"
    path => "/usr/local/tomcat/logs/tomcat_access_json.*.log"
    start_position => "end"
    codec => "json"
  }
}

output {
  if [type] == "nginx_log" {
    redis {
      host => "172.16.1.81"
      port => "6379"
      key => "nginx_log"
      data_type => "list"
      db => "0"
    }
  }
  if [type] == "tomcat_log" {
    redis {
      host => "172.16.1.81"
      port => "6379"
      key => "tomcat_log"
      data_type => "list"
      db => "1"
    }
  }
}

2)启动

[root@web01 ~]# logstash -f /etc/logstash/conf.d/file_redis.conf

3)访问测试查看redis数据

[root@redis01 ~]# redis-cli 
127.0.0.1:6379> KEYS *
1) "nginx_log"
127.0.0.1:6379> LLEN nginx_log
(integer) 12

127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
1) "tomcat_log"
127.0.0.1:6379[1]> LLEN tomcat_log
(integer) 18

3.配置logstash取出redis数据写入ES

1)配置

[root@redis02 ~]# vim /etc/logstash/conf.d/redis_es.conf
input {
  redis {
    host => "172.16.1.81"
    port => "6379"
    data_type => "list"
    key => "nginx_log"
    db => "0"
  }
  redis {
    host => "172.16.1.81"
    port => "6379"
    data_type => "list"
    key => "tomcat_log"
    db => "1"
  }
}

output {
  if [type] == "nginx_log" {
    elasticsearch {
      hosts => ["10.0.0.71:9200"]
      index => "nginx_redis_es_%{+YYYY-MM-dd}"
    }
  }
  if [type] == "tomcat_log" {
    elasticsearch {
      hosts => ["10.0.0.71:9200"]
      index => "tomcat_redis_es_%{+YYYY-MM-dd}"
    }
  }
}

2)启动

[root@redis02 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis_es.conf

3)查看redis数据

127.0.0.1:6379[1]> LLEN tomcat_log
(integer) 55
127.0.0.1:6379[1]> LLEN tomcat_log
(integer) 0

127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> LLEN nginx_log
(integer) 0

二、使用logstash配置rsyslog收集haproxy日志

1.rsyslog介绍

在centos 6及之前的版本叫做syslog,centos 7开始叫做rsyslog,根据官方的介绍,rsyslog(2013年版本)可以达到每秒转发百万条日志的级别,rsyslog是日志收集处理工具

它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但已发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。

当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程目的地和更精细的处理下,性能通常也被认为是“惊人的”。

2.安装配置rsyslog

#安装rsyslog
[root@lb01 ~]# yum install -y rsyslog
#编辑rsyslog配置文件
[root@lb01 ~]# vim /etc/rsyslog.conf
#开启支持udp协议
$ModLoad imudp
$UDPServerRun 514
#开启支持tcp协议
$ModLoad imtcp
$InputTCPServerRun 514
#最后面一行添加,local6对应haproxy配置文件定义的local级别,端口为Logstash的端口
local6.*     @@10.0.0.53:2222

3.安装并配置haproxy

#安装haproxy
[root@lb01 ~]# yum install -y haproxy
#编辑haproxy配置文件
[root@lb01 ~]# vim /etc/haproxy/haproxy.cfg
#全局配置
global
#最大连接数
maxconn 100000
#库文件权限目录
chroot /var/lib/haproxy
#用户和组
uid 99
gid 99
#后台启动
daemon
#指定启动进程数量
nbproc 1
#pid文件
pidfile /var/run/haproxy.pid
#定义日志,与rsyslog中的配置对应
log 127.0.0.1 local6 info

#默认配置
defaults
#开启长连接
option  http-keep-alive
#获取用户真实IP
option  forwardfor
#最大连接数
maxconn 100000
#运行模式
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

#监听状态
listen status
#运行模式
 mode http
 #监听地址:监听端口
 bind 0.0.0.0:9999
 #状态 启动
 status enable
 #全局日志
 log global
 #状态检查页面的地址
 status uri     /haproxy-status
 #状态检查页面登录的用户名和密码
 status auth    haadmin:123456

#frontend web_port
frontend web_port
        bind 0.0.0.0:80
        mode http
        option httplog
        log global
        option  forwardfor
###################ACL Setting##########################
        acl tomcat     hdr_dom(host) -i linux.tomcat.com
        acl nginx      hdr_dom(host) -i linux.nginx.com
###################USE ACL##############################
        use_backend     tomcat_host    if  tomcat
        use_backend     nginx_host     if  nginx
########################################################

backend tomcat_host
        mode    http
        option  httplog
        balance source
        server web1  10.0.0.7:8080 check inter 2000 rise 3 fall 2 weight 1

backend nginx_host
        mode    http
        option  httplog
        balance source
        server web1  10.0.0.7:80 check inter 2000 rise 3 fall 2 weight 1
        
#注释:
	check:检查健康状态
	inter:检查状态的间隔时间
	rise:检查次数
	fall:检查过程中错误次数
	weight:权重

4.启动服务

[root@redis01 ~]# systemctl start haproxy.service 
[root@redis01 ~]# systemctl start rsyslog

5.配置hosts测试

10.0.0.81 linux.tomcat.com linux.nginx.com

#分别访问
	linux.tomcat.com
	linux.nginx.com

6.配置logstash收集haproxy日志

1)配置收集到标准输出

[root@redis01 ~]# vim /etc/logstash/conf.d/haproxy_stdout.conf
input {
  syslog {
    port => "2222"
  }
}

output {
  stdout {}
}

2)配置收集到ES

[root@redis01 ~]# vim /etc/logstash/conf.d/haproxy_es.conf
input {
  syslog {
    port => "2222"
  }
}

output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "haproxy_es_%{+YYYY-MM-dd}"
  }
}

三、收集TCP/UDP日志

通过logstash的tcp/udp插件收集日志,通常用于在向elasticsearch日志补录丢失的部分日志,可以将丢失的日志通过一个TCP端口直接写入到elasticsearch服务器。

1.配置Logstash

#进入Logstash配置文件目录
[root@redis01 ~]# cd /etc/logstash/conf.d/
#编辑Logstash配置文件
[root@redis01 conf.d]# vim tcp.conf
input {
  tcp {
    port => 1234
    type => "tcplog"
    mode => "server"
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

2.启动

#启动Logstash
[root@redis01 conf.d]# /usr/share/logstash/bin/logstash -f  /etc/logstash/conf.d/tcp.conf
#检测端口是否启动成功
[root@redis01 ~]# netstat -lntup
tcp        0      0 :::1234                     :::*                        LISTEN      8656/java

3.使用telnet测试

[root@redis02 ~]# telnet 172.16.1.81 1234
Trying 172.16.1.81...
Connected to 172.16.1.81.
Escape character is '^]'.
13
12335346457thgdfhbd


#查看
{
          "port" => 58991,
      "@version" => "1",
    "@timestamp" => 2020-12-08T16:58:01.351Z,
          "host" => "172.16.1.82",
       "message" => "13
",
          "type" => "tcplog"
}
{
          "port" => 58991,
      "@version" => "1",
    "@timestamp" => 2020-12-08T16:58:27.160Z,
          "host" => "172.16.1.82",
       "message" => "12335346457thgdfhbd
",
          "type" => "tcplog"
}

4.使用nc工具

1)安装nc工具

#使用yum安装nc
[root@web01 ~]# yum install -y nc

2)使用测试

1.使用nc传输数据
[root@web01 ~]# echo "test nc" | nc 10.0.0.81 1234

2.收集文件日志
[root@web01 ~]# cat /etc/passwd | nc 10.0.0.81 1234

3.实时收集远端服务器的日志
[root@web01 ~]# tail -f /var/log/nginx/access.log | nc 10.0.0.81 1234

5.收集多个tcp日志到ES

1)配置

[root@redis01 ~]# cat /etc/logstash/conf.d/tcp_es.conf 
input {
  tcp {
    port => 1234
    type => "nginxlog"
    mode => "server"
  }
  tcp {
    port => "2345"
    type => "tomcatlog"
    mode => "server"
  }
}
output {
  if [type] == "nginxlog" {
    elasticsearch {
      hosts => ["10.0.0.71:9200"]
      index => "tcp_nginxlog_%{+YYYY-MM-dd}"
    }
  }
  if [type] == "tomcatlog" {
    elasticsearch {
      hosts => ["10.0.0.71:9200"]
      index => "tcp_tomcatlog_%{+YYYY-MM-dd}"
    }
  }
}

2)启动

[root@redis01 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp_es.conf

3)测试

[root@web01 ~]# tail -f /var/log/nginx/access.log | nc 10.0.0.81 1234

[root@web01 ~]# tail -f /usr/local/tomcat/logs/tomcat_access_json.$(date +%F).log | nc 10.0.0.81 2345

#页面查看索引

3.配置filebeat收集日志到ES

1)配置

[root@web01 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log

output.elasticsearch:
  hosts: ["10.0.0.71:9200"]
  index:

2)启动

[root@web01 ~]# filebeat -e -c /etc/filebeat/filebeat.yml

[root@web01 ~]# systemctl start filebeat

4.Filebeat收集单类型多个日志到Logstash

1)配置

#编辑Filebeat配置文件
[root@web01 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log
    - /usr/local/tomcat/logs/tomcat_access_json.2020-12-08.log
  document_type: ngx_zls

output.logstash:
#logstash 服务器地址,可以是多个
  hosts: ["10.0.0.81:6666"]
#是否开启输出至logstash,默认即为true
  enabled: true
#工作线程数
  worker: 1
#压缩级别
  compression_level: 3

2)重启

#重启Filebeat
[root@web01 ~]# systemctl restart filebeat

3)logstash收集filebeat传来的数据到ES

[root@redis01 ~]# vim /etc/logstash/conf.d/filebeat_logstash_es.conf 
input {
  beats {
    port => "6666"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "filebeat_logstash_%{+YYYY-MM-dd}"
  }
}

4)启动logstash

[root@redis01 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/filebeat_logstash_es.conf

5)测试

三、filebeat介绍

1.描述

Filebeat附带预构建的模块,这些模块包含收集、解析、充实和可视化各种日志文件格式数据所需的配置,每个Filebeat模块由一个或多个文件集组成,这些文件集包含摄取节点管道、Elasticsearch模板、Filebeat勘探者配置和Kibana仪表盘。

Filebeat模块很好的入门,它是轻量级单用途的日志收集工具,用于在没有安装java的服务器上专门收集日志,可以将日志转发到logstash、elasticsearch或redis等场景中进行下一步处理

2.Filebeat和Logstash使用内存对比

1)Logstash内存占用

[root@elkstack03 ~]# ps -ef |  grep -v grep |    grep logstash  | awk '{print $2}'
12628
[root@elkstack03 ~]# cat /proc/12628/status | grep -i vm
VmPeak:  6252788 kB
VmSize:  6189252 kB
VmLck:         0 kB
VmHWM:    661168 kB
VmRSS:    661168 kB
VmData:  6027136 kB
VmStk:        88 kB
VmExe:         4 kB
VmLib:     16648 kB
VmPTE:      1888 kB
VmSwap:        0 kB

2)filebeat内存占用

[root@test ~]# cat  /proc/12750/status  /proc/12751/status |  grep -i vm 
VmPeak:    11388 kB
VmSize:    11388 kB
VmLck:         0 kB
VmHWM:       232 kB
VmRSS:       232 kB
VmData:    10424 kB
VmStk:        88 kB
VmExe:       864 kB
VmLib:         0 kB
VmPTE:        16 kB
VmSwap:        0 kB


VmPeak:    25124 kB
VmSize:    25124 kB
VmLck:         0 kB
VmHWM:     15144 kB
VmRSS:     15144 kB
VmData:    15496 kB
VmStk:        88 kB
VmExe:      4796 kB
VmLib:         0 kB
VmPTE:        68 kB
VmSwap:        0 kB

四、filebeat部署

1.安装

#上传
[root@web01 ~]# rz
[root@web01 ~]# ll
-rw-r--r--  1 root root  11790119 May 24  2020 filebeat-6.6.0-x86_64.rpm

#安装
[root@web01 ~]# yum localinstall -y filebeat-6.6.0-x86_64.rpm
原文地址:https://www.cnblogs.com/jhno1/p/14237649.html