zoukankan      html  css  js  c++  java
  • 第七章 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
    
  • 相关阅读:
    tricky c++ new(this)
    MCI使用
    LoadIcon的使用
    深入浅出Node.js (2)
    洛谷 P1464 Function
    洛谷 P1722 矩阵 II
    洛谷 P1036 选数
    洛谷 P1303 A*B Problem
    洛谷 P2694 接金币
    洛谷 P1679 神奇的四次方数
  • 原文地址:https://www.cnblogs.com/jhno1/p/14237649.html
Copyright © 2011-2022 走看看