zoukankan      html  css  js  c++  java
  • logstash 收集日志到redis

    一、Logstash与Redis那点事

    在企业中,日志规模的量级远远超出我们的想象,这就是为什么会有一家公司 日志易 专门做日志收集,给大型金融公司收集日志,比如银行,因为你有可能看到,1秒钟好几千万的日志量,往服务器写入,那么企业中的集群,架构都不是单台的,而是多台的,一台如果是1千万,那么5台的量级,10台的量级,我们要对他们进行收集,进行分析,难免会在网络传输过程中,丢数据。

    日志是什么?
    日志对于企业来说,有什么作用?
    用户使用我们的产品,体验如何?
    用户的客诉,我们能拿出什么样的数据来说话?
    ...

    一系列的问题,都和日志相关,如果至关重要的那个数据丢失了,那么公司的损失可不仅仅是一条日志那么简单。如果我们不知道,用户对我们产品最感兴趣的地方在哪,那么产品的寿命也就越来越短。如果被攻击了,恶意攻击的IP源我们都找不到,那么或许就不是产品的寿命越来越短,而是这个企业存在的寿命,越来越短。

    好吧,一顿排比句,说的那么浮夸,说白了,我就是想要告诉你们,一个大规模日志量级的企业想要做到数据的安全性,数据的一致性,我们需要消息队列:Redis , Kafka,在ELK5版本中,建议使用Redis来做消息队列,Kafka能不能用?也能,只不过会有一些不必要的坑,需要我们去爬。在ELK6版本中,开始使用Kafka来做消息队列。

    话不多说,我们接下来就开始将Logstash收集到的日志,输出到Redis中。

    二,配置logstash收集单个日志到redis

    0.环境准备
    主机 IP 服务
    web01 10.0.0.7 nginx,tomcat,logstash
    redis01 10.0.0.81 redis
    redis02 10.0.0.82 logstash
    es01 10.0.0.91 ES,kibana
    1.收集日志到redis
    1)安装redis
    [root@redis01 ~]# yum install -y redis
    
    2)配置redis
    [root@redis01 ~]# vim /etc/redis.conf
    bind 172.16.1.81 127.0.0.1
    
    3)启动redis
    [root@redis01 ~]# systemctl start redis
    
    4)配置logstash收集日志写入redis
    [root@web01 ~]# vim /etc/logstash/conf.d/file_redis.conf
    input {
      file {
        path => "/var/log/nginx/access.log"
        start_positon => "end"
        codec => "json"
      }
    }
    
    output {
      redis {
        host => "172.16.1.81"
        port => "6379"
        key => "nginx_log"
        data_type => "list"
      }
    }
    

    2.将redis数据取出写入ES

    1)安装Java环境
    [root@redis02 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm
    
    2)安装logstash
    [root@redis02 ~]# yum localinstall -y logstash-6.6.0.rpm
    
    3)配置logstash取出redis数据写入ES
    [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"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["10.0.0.71:9200"]
        index => "nginx_redis_es_%{+YYYY-MM-dd}"
      }
    }
    
    4)启动
    [root@redis02 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis_es.conf
    

    三,配置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
    
  • 相关阅读:
    (一)基础配置
    (一)Zookeeper全分布式搭建
    Go性能测试
    Go单元测试
    Go C连接(keep-alive/websocket) D连接 C轮询 D轮询
    Go UDP
    Go TCP 粘包
    Go Once用法 goroutine协程 chanel通道
    Go strconv包
    Go 反射reflect包
  • 原文地址:https://www.cnblogs.com/xiaolang666/p/14107754.html
Copyright © 2011-2022 走看看