使用filebeat收集不同用應用的日志傳輸到redis,並加以區分


附加技巧

步驟流程:
使用filebeat收集一台主機上兩個不同應用的日志,傳遞給redis,然后logstash從redis中拉去數據傳遞給elasticsearch

1.filebeat.yml文件配置

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/host.access.log # 假設應用1的日志路徑
  fields:
    log_source: messages # logstash判斷日志來源

- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/error.log  # 假設應用2的日志路徑
  fields:
    log_source: secure
    
# 輸出到redis的第一個數據庫
# 默認是list形式
output.redis:
  hosts: ["192.168.80.107:6379"]
  key: messages_secure # redis中的鍵,值是一個列表,倆表中存儲的一行一行的上面兩個應用的日志,logstash中會用到這個參數
  password: foobar2000 # redis訪問密碼
  db: 0

2.logstash目錄下conf.d/*.conf文件配置

input {
  redis {
    host => "192.168.80.107"
    port => 6379
    password => foobar2000 # redis訪問密碼
    data_type => "list" # redis存儲的值類型
    key => "messages_secure" # redis中的鍵,跟filebeat.yml配置文件中輸出到redis.output一樣
    db => 0 # 指定的redis數據庫
  }
}

output {
  # 根據redis鍵 messages_secure 對應的列表值中,每一行數據的其中一個參數來判斷日志來源
  if [fields][log_source] == 'messages' {
    elasticsearch {
      hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"]
      index => "filebeat-message-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "elastic123"
    }
  }
  
  if [fields][log_source] == 'secure' {
    elasticsearch {
      hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"]
      index => "filebeat-secure-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "elastic123"
    }
  }
}

如下是redis列表值中的兩條不同的數據,刪除元數據后的數據
fields字段值是在filebeat.yml中設置的,根據這個值得不同,進而在elasticsearch中創建不同的索引

{
  "fields": {
    "log_source": "secure"
  },

  "log": {
    "offset": 12944,
    "file": {
      "path": "/usr/local/openresty/nginx/logs/error.log"
    }
  },
  "message": "2019/08/28 00:01:47 [error] 6764#6764: *4 open() \"/usr/local/openresty/nginx/html/lua\" failed (2: No such file or directory), client: 192.168.80.1, server: localhost, request: \"GET /lua HTTP/1.1\", host: \"192.168.80.108\"",

}


{
  "log": {
    "offset": 723861,
    "file": {
      "path": "/usr/local/openresty/nginx/logs/host.access.log"
    }
  },
  "message": "192.168.80.1 - - [28/Aug/2019:00:01:47 +0800] \"GET /lua HTTP/1.1\" 404 131 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0\" \"-\"",
  "fields": {
    "log_source": "messages"
  },
}

研究:若是倆應用的日志想分別輸出到redis不同的庫,設置不同的redis鍵,要如何操作?

  1. filebeat.inputs寫倆的話,默認最后一個secure的生效才會收集日志,messages的不會生效收集日志,比如下面的寫法:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/host.access.log # 假設應用1的日志路徑
  fields:
    log_source: messages # logstash判斷日志來源

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/error.log  # 假設應用2的日志路徑
  fields:
    log_source: secure

2.output.redis寫倆的話默認最后一個的bbb生效,比如下面的這種寫法:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/host.access.log # 假設應用1的日志路徑
  fields:
    log_source: messages # logstash判斷日志來源

- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/error.log  # 假設應用2的日志路徑
  fields:
    log_source: secure
    
# 輸出到redis的第一個數據庫
# 默認是list形式
output.redis:
  hosts: ["192.168.80.107:6379"]
  key: messages_secure # redis中的鍵,值是一個列表,倆表中存儲的一行一行的上面兩個應用的日志,logstash中會用到這個參數
  password: foobar2000 # redis訪問密碼
  db: 0

output.redis:
  hosts: ["192.168.80.107:6379"]
  key: bbb # redis中的鍵,值是一個列表,倆表中存儲的一行一行的上面兩個應用的日志,logstash中會用到這個參數
  password: foobar2000 # redis訪問密碼
  db: 1
  1. 若是如下這種寫法,均只有最后一個生效,也就是只會收集secure的日志,並傳輸到redis的bbb這個里
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/host.access.log
  fields:
    log_source: messages 
    
output.redis:
  hosts: ["192.168.80.107:6379"]
  key: aaa
  password: foobar2000
  db: 0

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/openresty/nginx/logs/error.log
  fields:
    log_source: secure

output.redis:
  hosts: ["192.168.80.107:6379"]
  key: bbb
  password: foobar2000
  db: 0

所以這個問題還有待研究,或者使用不同的inputs來源,或者使用不同的output輸出

查看集群主從分配

http://192.168.80.104:9200/_cat/nodes?v

查看集群狀態

http://192.168.80.104:9200/_cluster/health?pretty

小技巧,查看filebeat獲取的日志結果

可以把filebeat收集的日志傳輸到redis中,在redis中查看,若日志正確無誤,然后再開啟logstash從redis中拉取數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM