使用logstash遇到的一些问题

1、logstash kafka input配置

想要使用多个 logstash 端协同消费同一个 topic 的话,那么需要把两个或是多个 logstash 消费端配置成相同的 group_id 和 topic_id, 但是前提是要把相应的 topic 分多个 partitions (区),多个消费者消费是无法保证消息的消费顺序性的。
保证消息的顺序,那就用一个 partition。 kafka 的每个 partition 只能同时被同一个 group 中的一个 consumer 消费。

2、type类型区分不同日志数据源

假如输入数据源包含多个,针对不同的输入源想要使用不同的过滤算法,可以使用type来区分。

input配置

input{
   kafka{
      type => "nginx"
      topics => ["nginxTopic"]
      bootstrap_servers => ["10.0.4.2:9092"]
    }

   kafka{
      type => "system"
      topics => ["systemTopic"]
      bootstrap_servers => ["10.0.4.2:9092"]
    }

   kafka{
      type => "business"
      topics => ["businessTopic"]
      bootstrap_servers => ["10.0.4.2:9092"]
    }
}

filter配置

filter {
   if[type] == "nginx" {
      grok {
         patterns_dir => "/usr/local/logstash/logstash-7.0.0/patterns"
         match => { "message" => "%{NGINX_ACCESS}" }
      }
      mutate {
         remove_field => ["@version"]
         remove_field => ["tags"]
      }
   }
   ........
}

3、使用自定义的模版

日志采集到kafka,logstash消费kafka日志存储到ES,如果没有配置索引等相关信息,查询是没有效果的。
使用logstash来管理自定义的模版,使用方式如下:

output{
   if[type] == "system" {
      elasticsearch {
           hosts => ["http://10.0.4.x:9200"]
           user => "xxx"
           password => "xxx"
           index => "system-%{+YYYYMMdd}"
           document_type => "system"
           template => "../config/systemlog.json"
           template_name => "system-log"
           manage_template => true
           template_overwrite => true
      }
   }
}

template: 模板的路径
template_name: 模版的名称
manage_template: 布尔类型 默认为true 设置为false将关闭logstash自动管理模板功能
template_overwrite: 设置为true表示如果你有一个自定义的模板叫logstash,那么将会用你自定义模板覆盖默认模板logstash


注意:如果使用自定的模版需要删除已存在的模版,一般情况下启动logstash它就会在ES里面自动创建一个名为logstash的模版,如果不删除,ES里就变成有两个模板,logstash和myname,都匹配logstash-*索引名,
ES会按照一定的规则来尝试自动merge多个都匹配上了的模板规则,最终运用到索引上。

4、logstash日志问题

logstash有自己的日志打印方式,在logstash.conf配置文件中,如下所示:

stdout {
  # 以ruby格式打印日志,也可以配置为jsonline,以json方式打印logstash日志
  codec => rubydebug
}


这一配置强烈建议不要再生产环境使用,直接去掉即可。在测试环境测试logstash是否正常处理日志即可。
因为logstash每处理一条日志就会打印这条日志详细信息,一般生产环境都会将logstash作为系统服务来启动,如果每天日志量很大,就会导致logstash日志直接撑爆磁盘,当系统磁盘空间不可用时,ES会自动更新配置为不可写入,导致日志系统不可用。

Last modification:April 15, 2022
如果觉得我的文章对你有用,请随意赞赏