1. 程式人生 > >Filebeat +Redis+ELK處理Nginx日誌系統

Filebeat +Redis+ELK處理Nginx日誌系統

can int 資源 輕量 earch 修改 如果 都是 img

(一)簡述:

 filebeat:具有日誌收集功能,是下一代的Logstash收集器,但是filebeat更輕量,占用資源更少,適合客戶端使用。

  redis:Redis 服務器通常都是用作 NoSQL 數據庫,不過 logstash 只是用來做消息隊列。

  logstash:主要是用來日誌的搜集、分析、過濾日誌的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一並發往elasticsearch上去。

  elasticsearch:Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

  kibana:Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數據日誌。

下圖展示的基本的架構圖。

技術分享圖片

(二)具體步驟

1、filebeat的簡介和具體配置
Filebeat是一個日誌文件托運工具,在你的服務器上安裝客戶端後,filebeat會監控日誌目錄或者指定的日誌文件,追蹤讀取這些文件(追蹤文件的變化,不停的讀),並且轉發這些信息到elasticsearch或者logstarsh、redis中存放

1.1、工作原理
filebeat由2個主要組件構成:prospector和harvesters。這兩類組件一起協同完成Filebeat的工作,從指定文件中把數據讀取出來,然後發送事件數據到配置的output中。

harvesters:主要負責進行單個文件的內容收集;在運行過程中,每一個Harvester會對一個文件逐行進行內容讀取,並且把讀寫到的內容發送到配置的output中。

Prospector負責管理Harvsters,並且找到所有需要進行讀取的數據源。如果input type配置的是log類型,Prospector將會去配置度路徑下查找所有能匹配上的文件,然後為每一個文件創建一個Harvster。每個Prospector都運行在自己的Go routine裏

1.2工作流程
當你開啟filebeat程序的時候,它會啟動一個或多個探測器(prospectors)去檢測你指定的日誌目錄或文件,對於探測器找出的每一個日誌文件,filebeat啟動收割進程(harvester),每一個收割進程讀取一個日誌文件的新內容,並發送這些新的日誌數據到處理程序(spooler),處理程序會集合這些事件,最後filebeat會發送集合的數據到你指定的地點

技術分享圖片

1.3、具體的相關配置

[root@localhost ~]# vim /etc/filebeat/filebeat.yml
#=========================== Filebeat inputs =============================

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /opt/access.log
#================================ Outputs =====================================
# Configure what output to use when sending the data collected by the beat.
output.redis:
  hosts: ["172.20.67.50:6379"]
  #port: 6379
  #password: "123456"  
  db: 2
  timeout: 10
  key: "nginx-log"

    #####備註:目前使用filebeat向redis寫日誌的時候不能向redis集群裏寫,會提示報錯,所有redis只能寫到單臺裏,
root@localhost ~]# systemctl start filebeat
[root@localhost ~]# systemctl status filebeat
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch.
   Loaded: loaded (/usr/lib/systemd/system/filebeat.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-09-20 19:48:36 CST; 3s ago
     Docs: https://www.elastic.co/products/beats/filebeat
 Main PID: 11947 (filebeat)
   CGroup: /system.slice/filebeat.service
           └─11947 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat

Sep 20 19:48:36 localhost.localdomain systemd[1]: Started Filebeat sends log files to Logstash or directly to Elasticsearch..
Sep 20 19:48:36 localhost.localdomain systemd[1]: Starting Filebeat sends log files to Logstash or directly to Elasticsearch....
[root@localhost ~]# 

2、Redis具體的操作
在redis上查看具體導入的數據
技術分享圖片

3、logstash 具體的配置

[root@localhost ~]# vim /usr/local/logstash/data/redis.conf 
input {
        redis {
                host => "172.20.67.50"
                port => "6379"
                data_type => "list"
                db => 2
                batch_count => 1     ###這個值是指從隊列中讀取數據時,一次性取出多少條。不寫會報錯,解決辦法就是,不使用這個功能,將batch_size設置為1
                #type => "log"
                key => "nginx-log"
        }
}

filter {
          grok {
      match => { "message" => "%{IPORHOST:remote_addr} - - \[%{HTTPDATE:time_local}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent}"
                                }
                     }
 }

output {  
        elasticsearch {  
                hosts => "172.20.67.50:9200"
                index => "nginx-access-%{+YYYY.MM.dd}"
                }   
} 

4、查看ES集群是否有數據
可t通過head進行查看是否有數據。

5、在kibana中創建索引,即可在主頁查看相關的數據了。

Filebeat +Redis+ELK處理Nginx日誌系統