yum安裝ELK-安裝部署

ELK+filebeat+redis架構

es+kibana:192.168.0.56     es創建索引/存儲,kibana展示

logstash:192.168.0.57        日誌正則過濾

redis:192.168.0.34              消息隊列(緩衝)

filebeat:192.168.0.32/33     收集nginx日誌

nginx:192.168.0.32             nginx反向代理

一、安裝

ELK依賴jdk,jdk安裝參考:https://blog.csdn.net/weixin_41988331/article/details/90261370

準備環境:centos6/7,全部採用yum/rpm安裝,其中es需要大磁盤存放數據,默認數據存放路徑爲/var/lib/elasticsearch,可自行更改

ELK+filebeat:所有版本均爲此刻最新的6.6.1,官網直接下載rpm包,然後直接yum/rpm安裝,其中es/kibana/filebeat,service/systemctl命令添加到開機自啓,logstash通過rc.local實現開機自啓

官網下載地址:https://www.elastic.co/cn/downloads/

elasticsearch安裝:

準備:修改系統配置,es對系統參數有要求

# vim /etc/sysctl.conf
vm.max_map_count = 655360    #定義了一個進程能擁有的最多的內存區域
# sysctl -p


# vim /etc/security/limits.conf      #文件描述符
* soft nofile 65535
* hard nofile 65535


# vim /etc/security/limits.d/20-nproc.conf
*          soft    nproc     4096
root       soft    nproc     unlimited

爲什麼要限制打開的文件描述符?
原因1 – 資源問題:每個打開的文件都需要消耗內存來管理,而內存是有限的。
原因2 – 安全問題:如果不限制的話,有不懷好心的人啓動一個進程來無限的創建和打開新的文件,會讓服務器崩潰。
所以限制文件描述符的數量對於linux系統的穩定性是非常重要的。

直接yum install elasticsearch.xxx.rpm或者rpm -ivh elasticsearch.xxx.rpm

修改配置:

# vim /etc/elasticsearch/elasticsearch.yml

單點配置

cluster.name: tx-elk
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.0.56
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.0.56"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"

 

集羣配置:修改以下三項

node.name: node-1

discovery.zen.ping.unicast.hosts: ["192.168.0.56"]

discovery.zen.minimum_master_nodes: 1

 

# systemctl start elasticsearch

# systemctl enable elasticsearch

 

kibana安裝與配置:

直接yum install kibana.xxx.rpm或者rpm -ivh kibana.xxx.rpm

修改配置:

# vim /etc/kibana/kibana.yml

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.hosts: ["http://192.168.0.56:9200"] #ES集羣中任一es即可

# systemctl start kibana

# systemctl enable kibana

 

logstash安裝

logstash配置修改後,特別是索引匹配修改後,需重啓es

直接rpm安裝即可,可執行文件路徑如下,添加到ENV:

/usr/share/logstash/bin/logstash -f filebeat-redis-logstash.conf

 

remove_field =>["message"]

https://blog.csdn.net/zhaoyangjian724/article/details/54343178

geoip

https://blog.csdn.net/wanglei_storage/article/details/82663184

grok參考

https://www.jianshu.com/p/134d0f9a367a

https://www.cnblogs.com/lize3379/p/6118788.html

https://blog.csdn.net/mergerly/article/details/53310806

http://grokdebug.herokuapp.com/

http://grok.ctnrs.com/

 

最終filebeat-redis-logstash.conf配置如下:目前在做了收集nginx日誌,後續會做收集tomcat日誌的grok匹配規則

其中nignx的日誌格式:

    log_format    main  '$remote_addr $remote_user [$time_local] $request '
                        '$status $body_bytes_sent $http_referer "$upstream_response_time" $request_time '
                        '"$http_user_agent" $http_x_forwarded_for $http_host "$upstream_addr" "$http_auth_token"';

# 因upstream地址池中server個數有多個,在後端故障時,$upstream_response_time、$upstream_addr會有server個數個結果,並以逗號隔開,如0.000, 0.000以及1.1.1.1, 1.1.1.2,所以這兩處同$http_user_agent一樣用引號並在一起
#用於nginx日誌+tomcat日誌
input {
    redis {
        host => "192.168.0.57"
        port => 6379
        password => "Tx.123456"
        db => "0"
        data_type => "list"
        key => "logstash"
    }
}

filter {
  grok {
    match => {
      "message" => "%{IP:ip} %{USER:auth} \[%{HTTPDATE:timestamp}\] %{WORD:request_method} %{URIPATHPARAM:uri} HTTP/%{NUMBER:http_version} %{NUMBER:status} %{NUMBER:filesize} (?:%{URI:referrer}|-) \"%{GREEDYDATA:upstream_time}\" %{NUMBER:request_time} \"%{GREEDYDATA:ua}\" (?:%{IP:x_forward}|-) %{HOSTNAME:domain} \"%{GREEDYDATA:upstream_host}\" \"%{GREEDYDATA:auth_token}\""
    }
    remove_field =>["message", "port", "auth_token"]
  }
  #mutate {
  #  remove_field =>["message", "port"]
  #remove_field =>["port", "auth_token"]
  #}
  #geoip {
  #  source => "client"
  #  database => "/etc/logstash/GeoLite2-City_20190326/GeoLite2-City.mmdb"
  #  fields => ["country_name","region_name", "city_name"]
  #}
}

output {
    if "nginx-prod" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "nginx-prod-%{+YYYY.MM.dd}"
       }
    }
    if "nginx-beta" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "nginx-beta-%{+YYYY.MM.dd}"
       }
    }
    if "nginx-test" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "nginx-test-%{+YYYY.MM.dd}"
       }
    }
    if "tomcat-uc" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "tomcat-uc-%{+YYYY.MM.dd}"
       }
    }
}

redis安裝與配置

【若日誌量大,redis可提高配置縱向擴展,也可做集羣或者單純增加redis數量進行橫向擴展(不同日誌發到不同redis、logstash),若日誌量超大,也可換成zookeeper+kafka集羣】

版本3.2,直接yum安裝,service/systemctl命令添加到開機自啓,修改以下兩處,讓除自己以外的機器訪問,以及設置連接密碼

#vim /etc/redis.conf

bind 0.0.0.0

requirepass 123456

使用及驗證:

# redis-cli -h 192.168.0.34 -a Tx.123456

192.168.0.34>keys *

(logstash) 在filebeat中創建的索引名logstash,出現則爲說明filebeat收集到的信息成功導入到了redis中

 

filebeat安裝與配置:

直接通過rpm包安裝即可,若filebeat->logstash進行測試,直接將Logstash output部分取消註釋,將其他redis output 部分註釋,若filebeat->redis->logstash,則不更改此配置文件

filebeat.inputs:

#======== nginx訪問日誌 =============
- type: log
  enabled: true
  paths:
    - /apps/log/nginx/*.access.log
  tags: ["nginx-prod"]


#======== Java類日誌,以年月日開頭 =============
- type: log
  enabled: true
  paths:
    - /apps/logs/xxx/error.log
  multiline.pattern: '^\d{4}'
  multiline.negate: true
  multiline.match: after
  tags: ["dev-bange-module-auth"]


#============================= Filebeat modules ===============================
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.kibana:
#================================ Outputs =====================================
#-------------------------- redis output ------------------------------------
output.redis:
    hosts: ["192.168.0.57"]
    port: 6379
    password: "Tx.123456"
    key: "logstash"
    db: 0
    timeout: 5
    data_type: "list"


#----------------------------- Logstash output --------------------------------
#output.logstash:
  # The Logstash hosts
  #hosts: ["192.168.0.57:5044"]
  #index: log

# systemctl start filebeat

# systemctl enable filebeat

filebeat配置拓展

# 在輸入中排除符合正則表達式列表的那些行,paths後添加
exclude_lines: ["^DBG"]

如線上將DEBUG級別的tomcat日誌全部去掉了
exclude_lines: ["DEBUG"]

多日誌文件合併爲一個的
 paths:
    - /var/log/java/test-java.log
    - /var/log/java/*.log
    - /var/log/*/*.log

多日誌文件單獨的,直接複製整個type

#======== Java類日誌,以年月日開頭 =============
- type: log
  enabled: true
  paths:
    - /apps/logs/xxx/error.log    
  multiline.pattern: '^\d{4}'    #正則匹配,如此處以年開頭的4位整數,也有以'\[',即以[開頭的
  multiline.negate: true
  multiline.match: after
  tags: ["dev-bange-module-auth"]

negate有false和true兩種取值,match也有after和before兩種取值。下面詳述:

negate參數爲false,表示“否定參數=false”。multiline多行參數負負得正,表示符合pattern、match條件的行會融入多行之中、成爲一條完整日誌的中間部分。如果match=after,則以xx開頭的和前面一行將合併成一條完整日誌;如果match=before,則以b開頭的和後面一行將合併成一條完整日誌。

negate參數爲true,表示“否定參數=true”。multiline多行參數爲負,表示符合match條件的行是多行的開頭,是一條完整日誌的開始或結尾。如果match=after,則以xx開頭的行是一條完整日誌的開始,它和後面多個不以xx開頭的行組成一條完整日誌;如果match=before,則以xx開頭的行是一條完整日誌的結束,和前面多個不以xx開頭的合併成一條完整日誌。

本例中使用multiline.negate: true和multiline.match: after,合起來的意思就是符合multiline.pattern: '^\d{4}'作爲一條完整日誌的開始,後面的不以4位整數開頭的,直到下一個4位整數開頭的日誌之前的內容都合併到這條日誌的後面,算作一條日誌
如典型的java日誌:
2019-11-14 10:37:30.460 [xxxx_80-506217ce-807d-433b-9051-918b05682b50] [] ERROR com.xxx.client.config.impl.ClientWorker - [fixed-xxx_80-506217ce-807d-433b-9051-918b05682b50] [check-update] get changed dataId exception
java.net.SocketException: Unexpected end of file from server
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:851)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:848)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)


關於negate和match的原文鏈接:https://blog.csdn.net/xh6312643/article/details/80216153

 

nginx反向代理kibana

server {
        listen       80;
        server_name  log.xxx.com;
        access_log   /etc/nginx/logs/log.xxx.com.access.log main;
        proxy_pass http://192.168.0.56:5601;
        }
}

其他elk問題:

https://mp.weixin.qq.com/s/1AkefESGeeEyoCV9gkbLLA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章