ELK的搭建以及使用


一、架構如圖:

 

二、工作機制:

     在需要收集日志的應用上安裝filebeat(需要修改配置文件,配置文件稍后介紹),啟動filebeat后,會收集該應用的日志推送給redis,然后logstash從redis中收集日志推送到Elasticsearch。

     因Elasticsearch是一個集群,所以只需要在某台Elasticsearc安裝一個Kibana提供給用戶一個可視化界面即可。

     而在學習Elasticsearch的過程中,必不可少需要通過一些工具查看es的運行狀態以及數據。如果都是通過rest請求,未免太過麻煩,而且也不夠人性化,所以需要安裝一個head插件。同上,只需要在某台Elasticsearc安裝一個head插件,提供給運維查看數據狀態即可。

    

三、 安裝准備

1、 安裝包

通過https://www.elastic.co/downloads,可以下載es所有需要的安裝包,可自行根據需要下載對應版本。

並且將包都解壓到/opt/platform

以下是目前es使用到的安裝包:

Elasticsearch5.2.X

安裝方法:

修改配置文件:vim /opt/platform/elasticsearch/config/elasticsearch.yml

配置詳見文件下文。

啟動ela: ./bin/elasticsearch

 

Filebeat5.2.X

安裝方法:

創建目錄:mkdir conf

復制配置文件:cp filebeat.yml /conf

修改配置文件:vim /opt/platform/filebeat/conf/filebeat.yml

配置詳見文件下文。

啟動filebeat: ./filebeat -c conf/filebeat.yml &

 

Logstash5.2.X

安裝方法:

創建目錄:mkdir conf

配置文件:vim /opt/platform/filebeat/conf/ filebeat-java-to-es.conf

配置詳見文件下文。

啟動logstash:/opt/platform/logstash/bin/logstash -f /opt/platform/logstash/conf/filebeat-java-to-es.conf &

 

Es-head5.2.x

安裝方法:

Github下載源碼:git clone git://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head

安裝node依賴模塊:npm install

ln -s /opt/platform/es-head/node_modules/grunt/bin/grunt grunt

啟動es head插件的獨立服務:nohup grunt server &

或者nohup npm run start &

配置文件:

vim Gruntfile.js

port按需更改,默認9100

 

Kibana5.2.X

安裝方法:

修改配置文件:vim /opt/platform/kibana/config/kibana.yml

配置文件修改內容如下:

server.port: 5601

server.host: "x.x.x.x"

elasticsearch.url: http://x.x.x.x:9200

 

Redis3.2.8(常規安裝,不做介紹了)

Jdk1.8.0_121(常規安裝,不做介紹了)

 

2、 端口開放:

redis+logstash

6379\9600

redis+logstash

6379\9600

redis+logstash

6379\9600

es+kibana

9200\9300\5601

es+head

9100\9200\9300\

Es

9200\9300\

 

3、依賴包

elsticserch依賴於java1.8以上版本,需要安裝JDK1.8+,同樣logstash也需要依賴jdk,所以也需要安裝。

 

四、配置文件:

1、Elasticserch

        1、elasticserch 啟動時需要設置vm.max_map_count和允許打開的最大文件描述符數量

        (1)、修改vm.max_map_count

                    vi /etc/sysctl.conf
                     增加以下內容
                       vm.max_map_count=262144

        (2)、修改允許打開的最大文件描述符數量

vim /etc/security/limits.d/10-nproc.conf 
*       soft    nproc   20480
*       hard    nproc   20480
root    soft    nproc   unlimited
root    hard    nproc   unlimited
*       soft    nofile  1048576
*       hard    nofile  1048576
ops	soft	memlock	unlimited
ops	hard	memlock	unlimited

  

         (3)、修改elstic的配置文件,以下是比較重要的參數;

      PS: 需要在elasticsearch的配置文件中加入以下內容,這樣head才能連接到elasticsearch查看集群狀態:

       thread_pool.search.queue_size: 10000

       http.cors.enabled: true

       http.cors.allow-origin: "*"

 

2、Filebeat配置文件

#prospectors config

filebeat.prospectors:

- input_type: log

  paths:

    - /opt/platform/quarkloan-api-app/logs/convertor/convertorinfo.log

    - /opt/platform/quarkloan-api-app/logs/convertor/convertorerror.log

 

  encoding: plain

  document_type: loanapi

  multiline.pattern: ^[0-9]

  multiline.negate: true

  multiline.match: after

 

#global config

filebeat.registry_file: ${path.data}/registry-loanapi

 

#output.redis config

output.redis:

  hosts: ["10.19.64.69:6379", "10.19.64.70:6379", "10.19.64.71:6379"]

  key: filebeat-java

  datatype: list

  loadbalance: true

 

 

3、Logstash配置文件

input {

    redis {

        data_type => "list"  #value type is STRING

        key => "filebeat-java"  #value type is STRING

        host => "10.19.64.69"  #value type is STRING

        port => 6379  #value type is NUMBER,Default value is 6379

    }

    redis {

        data_type => "list"

        key => "filebeat-java"

        host => "10.19.64.70"

        port => 6379

    }

    redis {

        data_type => "list"

        key => "filebeat-java"

        host => "10.19.64.71"

        port => 6379

    }

}

 

filter {

    #JAVA日志解析,時間 線程 級別 類 ,日志實際內容不解析

    grok {

        match => {

            "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{DATA:thread}\s+%{DATA:level}\s+%{DATA:class}\s+"

        }

    }

    #用日志輸出時間替換掉ES的@timestamp

    date {

        match => ["timestamp", "ISO8601"]

        target => "@timestamp"

    }

    #節流過濾,打節流tag,output.email根據tag判斷是否發送ERROR日志郵件

    if [type] == "loanapi" and [level] == "ERROR" {

       throttle {

           period => 600

           max_age => 1200

           before_count => 4

           key => "%{type}%{level}"

           add_tag => "throttled"

       }

    }

}

 

 

output {

    elasticsearch {

    hosts => ["10.19.64.72:9200", "10.19.64.105:9200", "10.19.64.106:9200"]  #value type is ARRAY

    index => "%{type}-%{+YYYY.MM.dd}"  #YYYY.MM.dd get from @timestamp field

    flush_size => 2000  #value type is NUMBER,Default value is 500

    idle_flush_time => 5  #value type is NUMBER,Default value is 1

    }

    #按type,level,tags判斷是否發送ERROR日志郵件(此項為特殊要求,不建議用logstash進行日志發送,避免影響logstash的性能)

    if [type] == "loanapi" and [level]== "ERROR" and "throttled" in [tags] {

       email {

           port => 465

           address => "mail.xxx.com"

           from => "logerror@xxx.com"

           username => "xxxr"

           password => "xxx"

           authentication => "login"

           contenttype => "text/plain; charset=UTF-8"

           use_tls => true

           subject => "ELK異常郵件:[%{[beat][hostname]}服務器]-[%{type}日志異常]"

           to => "sss@qqq.com"

           via => "smtp"

           body => "%{message}"

       }

    }

}

 

五 、啟動kibana

當加入了新的日志到ELK中時,可以在management中新建index,如下圖

 

日志格式要求

目前線下java應用的日志輸出組件有兩個,logback和log4j,格式應滿足如下要求,以便於接入生產ELK,方便開發能快速查看生產日志。
日志輸出標准有如下建議請參考

1、請盡量使用log4j
2、日志文件編碼格式:UTF-8,請不要使用默認
3、日志文件rotate:按天,單文件容量不超過50MB
4、日志輸出的時間格式使用ISO8601(如yyyy-MM-dd HH:mm:ss.SSS),%d或%date默認輸出格式為ISO8601
5、日志輸出的字段分隔符使用tab,替換空格
6、日志輸出字段順序:date  thread  level  class  message
7、日志輸出Pattern建議如下:
8、Logback組件pattern:%date    [%thread]    %-5level    [%logger]    -    %msg%n
9、Log4j組件pattern:%d    [%t]    %-5p    [%c]    -    %m%n
10、日志路徑微服務日志路徑為/opt/jarapp/logs  tomcat日志路徑為/opt/tomcat/logs

 


免責聲明!

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



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