ELK Stack在多项目情况下filebeat与logstash的多文件配置

ELK Stack环境的相关搭建可以参考我的上一篇文章

这里配置中涉及到的域名在对应机器上要配置host,kafka的host
假设这里有两个项目:insurance项目,app项目

insurance项目生产环境filebeat配置filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/ad/logs/*.log
  # 向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。
  # 默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level
  # 这个得意思就是会在es中多添加一个字段,格式为 "filelds":{"level":"debug"}
  fields:
    host: 192.168.0.94
    # 每个filebeat对应的机器的ip,区分日志机器来源
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
  # 上面配置的意思是:不以[开头的行都合并到上一行的末尾
  #pattern:正则表达式
  #negate:true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
  #match:after 或 before,合并到上一行的末尾或开头
#-------------------------- Kafka output ------------------------------
output.kafka:
  hosts: ["kafka1:9092","kafka2:9092","kafka3:9092"]
  topic: filebeat
  required_acks: 1
# 其他output都注释掉

app生产环境filebeat配置filebeat-app.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/ad/logs/logs-*.log
  # 向输出的每一条日志添加额外的信息,比如“level:debug”,方便后续对日志进行分组统计。
  # 默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level
  # 这个得意思就是会在es中多添加一个字段,格式为 "filelds":{"level":"debug"}
  fields:
    host: 10.10.99.108
    # 对应一个服务来命名
    app: app
    # 每个filebeat对应的机器的ip,区分日志机器来源
  multiline.pattern: ^20
  multiline.negate: true
  multiline.match: after
  # 上面配置的意思是:不以[开头的行都合并到上一行的末尾
  #pattern:正则表达式
  #negate:true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
  #match:after 或 before,合并到上一行的末尾或开头
#-------------------------- Kafka output ------------------------------
output.kafka:
  hosts: ["kafka1:9092","kafka2:9092","kafka3:9092"]
  topic: filebeat-app
  required_acks: 1
# 其他output都注释掉

logstash配置

两个项目分别写到自己kafka topic,logstash启用两个配置文件分别读取数据分别写es,logstash的启动命令把配置文件路径改为一个文件夹路径即可,这个文件夹放着这两个配置文件。

first-pipeline.conf

input {
  kafka {
    bootstrap_servers => ["kafka1:9092,kafka2:9092,kafka3:9092"]
    topics => "filebeat"
    group_id => "es"
    codec => json
    client_id => "app001"
    type => "app"
  }
}

filter {
  if [type] == "app"{
    grok {
      match => { "message" => "\[%{DATA:app}\] \[%{DATA:timestamp}\] \[%{DATA:thread}\] \[%{LOGLEVEL:level}\] \[%{DATA:class}\] (?<msg>(.|\r|\n)*)" }
    }
    
    date {
      match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
      target => "@timestamp"
    }

    mutate {
      remove_field => ["beat.name"]
    }
  }
}

output {
  if [type] == "app"{
    elasticsearch {
      hosts => ["http://localhost:9200"]
      document_type => "APP-LOG"
      #host => "%{[@host][beat]}"
      #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "changeme"
    }
  }
}

second-pipeline.conf

input {
  kafka {
    bootstrap_servers => ["kafka1:9092,kafka2:9092,kafka3:9092"]
    topics => "filebeat-second"
    group_id => "es"
    codec => json
    client_id => "second001"
    type => "second"
  }
}

filter {
  if [type] == "second"{
    grok {
      match => { "message" => "%{DATA:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:level} %{DATA:class} - (?<msg>(.|\r|\n)*)" }
    }
    
    date {
      match => ["timestamp", "yyyy-MM-dd HH:mm:ss,SSS"]
      target => "@timestamp"
    }

    mutate {
      remove_field => ["beat.name"]
    }
  }
}

output {
  if [type] == "second"{
    elasticsearch {
      hosts => ["http://localhost:9200"]
      document_type => "IDAI-LOG"
      index => "app-%{+YYYY.MM.dd}"
      #host => "%{[@host][beat]}"
      #index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "changeme"
    }
  }
  
}

如果单纯的把多个配置文件读取的话,两个topic的数据会同时写到es中,所以在配置中添加如上配置进行区分。

有问题欢迎留言,对相关课程感兴趣的可以留言

展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读