zoukankan      html  css  js  c++  java
  • logstash将配置写在多个文件

    搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统logstash将配置写在多个文件
    我们用Logsatsh写配置文件的时候,如果读取的文件太多,匹配的正则过多,会使配置文件动辄成百上千行代码,可能会造成阅读和修改困难。这时候,我们可以将配置文件的输入、过滤、输出分别放在不同的配置文件里,甚至把输入、过滤、输出再次分离,放在不同的文件里。
    这时候,后期再需要增删改查内容的时候,就容易维护了。

    filebeat解释

    1、logstash如何读取多个配置文件

    我们知道在启动logstash的时候,只要加上-f /you_path_to_config_file就可以加载配置文件了,如果我们需要加载多个配置文件,只需要-f /you_path_to_config_directory就可以了。简单说,就是在-f后面加上目录就可以。
    注意:目录后面不能加 * 号,否则只会读取一个文件,但是在读取日志文件时,*可以匹配所有,比如sys.log*可以匹配所有以sys.log开头的日志文件,如sys.log1,sys.log2等。

    示例如下:

    //比如 /home/husen/config/目录下有
    //in1.conf、in2.conf、filter1.conf、filter2.conf、out.conf这5个文件

    //我们使用 /logstash-5.5.1/bin/logstash -f /home/husen/config启动logtstash
    //logstash会自动加载这个5个配置文件,并合并成1个整体的配置文件

    2、logstash多个配置文件里的input、filter、output是否相互独立

    答案是:NO!

    比如:

    ## in1.conf内容如下:
    input{
    file{
    path=>[
    "/home/husen/log/sys.log"
    ]
    }
    }

    ## in2.conf内容如下:
    input{
    file{
    path=>[
    "/home/husen/log/error.log"
    ]
    }
    }

    ## out1.conf如下
    elasticsearch {
    action => "index"
    hosts => "localhost:9200"
    index => "from_sys_log"
    codec => "json"
    }

    ## out2.conf如下
    elasticsearch {
    action => "index"
    hosts => "localhost:9200"
    index => "from_error_log"
    codec => "json"
    }

    //这几个配置文件的目的是:
    //想把in1.conf读进来的sys.log的索引建立为from_sys_log
    //把in.conf读进来的error.log的索引建立为femo_error_log

    //logstash-5.5.1/bin/logstash -f /home/husen/config

    //启动之后,会发现in1.conf的日志被输出了两次,in2.conf读进来的日志也被输出了两次

    //结论:logstash读取多个配置文件只是简单的将所有配置文件整合到了一起!
    //如果要彼此独立,需要自己加字段,然后判断一下
    //比如读取来不同不同服务器的同样格式的日志,那么filter是可以共用的
    //但是输出的索引需要分别建立,以提高辨识度

    3、logstash读取多个配置文件建议的配置方法

    如果要在配置文件中,独立一些部分,又要共用一些部分,比如我上门提高同样的日志来自不同的服务器,需要用同样的filter,但是建立不同的索引的问题,该怎么办?
    建议使用tags或者type这两个特殊字段,即在读取文件的时候,添加标识符在tags中或者定义type变量。

    示例如下:

    ## in1.conf内容如下:
    input{
    file{
    path=>[
    "/home/husen/log/sys.log"
    ]
    type => "from_sys"
    #tags => ["from_sys"]
    }
    }

    ## in2.conf内容如下:
    input{
    file{
    path=>[
    "/home/husen/log/error.log"
    ]
    type => "from_error"
    #tags => ["from_sys"]
    }
    }

    ## out1.conf如下
    if [type] == "from_sys"{
    #if "from_sys" in [tags]
    elasticsearch {
    action => "index"
    hosts => "localhost:9200"
    index => "from_sys_log"
    codec => "json"
    }
    }

    ## out2.conf如下
    if [type] == "from_error"{
    #if "from_error" in [tags]
    elasticsearch {
    action => "index"
    hosts => "localhost:9200"
    index => "from_error_log"
    codec => "json"
    }
    }

    //特别地,如果要针对不同的类型日志用不同filter来grok解析,
    //也可以通过类似的方法判断

  • 相关阅读:
    sublimetext3安装配置
    .Net Core 商城微服务项目系列(八):购物车
    .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信
    eShopOnContainers学习系列(三):RabbitMQ消息总线实践
    Docker系列(五):.Net Core实现k8s健康探测机制
    Docker系列(四):容器之间的网络通信
    Docker系列(三):将.Net Core Api部署到Kubernetes (K8s)中
    Docker系列(二):通过Docker安装使用 Kubernetes (K8s)
    生产环境项目问题记录系列(一):一次循环数据库拖垮服务器问题
    .Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器
  • 原文地址:https://www.cnblogs.com/Su-per-man/p/12169679.html
Copyright © 2011-2022 走看看