2021/4/28最新elk7.12搭建配置grok正則及坑總結!


ELK日志分析系統搭建

  之前一段時間由於版本迭代任務緊,組內代碼質量不盡如人意。接二連三的被測試提醒后台錯誤之后, 我們決定搭建一個后台日志分析系統, 經過幾個方案比較后,選擇的相對更簡單的ELK方案。

  ELK 是Elasticsearch, Logstash,Kibana三個組件的首字母組合,這種方案最初的做法是:使用Logstash 去服務上采集日志文件, 然后做一些過濾處理后發送給 Elasticsearch, 在Elasticsearch中創建相應的索引,由Kibana提供統計分析的頁面訪問。但是Logstash 本身資源消耗較大,如果把它放到業務系統的服務器上會對系統造成不小的影響,一般的做法采用beats來替代(beats是一個更輕量級的收集器),參考如下圖-1,此外也會有在數據量比較大時引入消息隊列來環節組件壓力。

  詳細的關於各組件的介紹建議參考Elastic 提供的官方文檔

    

                              (圖-1)

 

                      (圖-2)

 

  本文將基於上圖-2的架構來介紹ELK日志系統的搭建。由於環境限制,這里各組件均部署在同一服務器上。

1)搭建elasticsearch

 elasticsearch的下載安裝配置在所有組件中相對是最復雜的,但是它依然可以很簡單的按照如下幾個步驟順利完成:

① 官網下載地址 :https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-linux-x86_64.tar.gz

② 解壓之后配置 elasticsearch-7.12.1/config/elasticsearch.yml 文件,如下

復制代碼
# ---------------------------------- Cluster -----------------------------------
# 指定集群名
cluster.name: customer-service

# ------------------------------------ Node ------------------------------------
# 在集群名為customer-service 的集群下的 node-1 節點
node.name: node-1
# ---------------------------------- Network -----------------------------------
# 開啟本質之外的網絡訪問
network.host: 0.0.0.0
# --------------------------------- Discovery ----------------------------------
# 定義初始主機點
cluster.initial_master_nodes: ["node-1"]
復制代碼

③ 啟動elasticsearch  (處於安全考慮 elasticsearch 只能非root用戶啟動,需要將elasticsearch解壓文件切換所屬用戶) 

# 解壓路徑下
建議加入nohup & ./bin/elasticsearch

④ 驗證elasticsearch是否啟動成功

curl http://localhost:9200

如果看到如下結果,代表啟動成功

復制代碼
{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "tYgc-2l3ThqcEfFKfeWgBQ",
  "version" : {
    "number" : "7.12.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "7a013de",
    "build_date" : "2021-05-23T14:04:00.380842Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
復制代碼
 
 
 
 
 
curl -X GET 'localhost:9200/_cat/indices?v'    查看所有索引

 

2)Kibana的安裝

① 官網下載:https://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-linux-x86_64.tar.gz

② 配置解壓路徑下的/kibana-7.12.1-linux-x86_64/config/kibana.yml文件:

# 將server.host 改為所有IP, 這樣以便不同主機可以訪問到kibana頁面
server.host: 0.0.0.0

③ 瀏覽器訪問 http://ip:5601 (默認5601端口,可以在kibana.yml中配置) 得到如下頁面表示啟動成功

  

 

 

 

                          (圖-3)

 

3)Filebeat 的安裝

① 官方下載:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.1-linux-x86_64.tar.gz

② 配置解壓路徑下的配置文件 filebeat.yml 如下:

復制代碼
 
 


filebeat.inputs:

- type: log

enabled: true

paths:
- /www/wwwlogs/wonima.log

#如下是對應logstash的索引名

fields:
service: wonima

filebeat.config.modules:
filebeat.config.modules:
filebeat.config.modules:
# Glob pattern for configuration loading
path: ${path.config}/modules.d/*.yml

# Set to true to enable config reloading
reload.enabled: false


setup.template.settings:
index.number_of_shards: 1
#index.codec: best_compression
#_source.enabled: false


setup.kibana:


output.logstash:
# The Logstash hosts
hosts: ["你logstash的ip:5044"]

# ================================= Processors =================================
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~

復制代碼

③ 啟動 filebeat

# 注意使用root用戶登錄, 准確的說是注意用戶對文件所擁有的權限
# -e 讓日志打印到控制台, -c 重新指定啟動的配置文件, -d 指定調試選擇者器
./filebeat -e -c filebeat.yml -d "publish"

 

4)Logstash 的安裝

① 官網下載:https://artifacts.elastic.co/downloads/logstash/logstash-7.12.1.tar.gz

② 配置logstash,增加customer-service-logstash.yml 的配置文件,文件配置內容如下:

復制代碼
# logstash 輸入配置,這里我們采用beat采集日志
input { beats { port => "5044" } }
# The filter part of this file is commented out to indicate that it is # optional. filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}"} }
  # 此外還可以添加其他過濾器插件 } output {
  # 輸出到控制台打印 stdout { codec => rubydebug }
  # 輸出到elasticsearch ,並指定索引名稱 elasticsearch { hosts => [ "127.0.0.1:9200" ] index => "logstash-customer-service-log" } }




如上是最簡單的配置沒有geoip如下是千測萬險嘔心瀝血寫的grok規則匹配

input {
beats {
port => 5044

filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}

mutate {
remove_field =>["message"]
}

geoip {

##########備注這個庫是自動加載的,但有時候如果報錯可以加入試下database =>"/usr/local/logstash/config/GeoLite2-City.mmdb"
source => "clientip"
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}

output {
stdout { codec => rubydebug }
elasticsearch {
hosts => "127.0.0.1:9200"
index => "logstash-nginx-access-427-1"
}

#####如需要添加多個filebeat接收日志如下

if [fields][service] == 'wonima' {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "logstash-nginx-access-wonima.com"
}
}


}

 

如圖所示是patterns 正則分割你日志的

 

 nginx里面寫的匹配內容就是如下:

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

 
 
 
 
復制代碼

③ 啟動logstash

# -f 從指定路徑獲取logstash啟動的yml配置文件
#  --config.reload.automatic 監聽配置文件 如果有改動自動加載
bin/logstash -f first-pipeline.conf --config.reload.automatic



 
elk 報錯執行入下

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

 

 

 所有上述組件配置啟動成功后,我們可以到kibana界面, 在側邊欄 management 下按下圖-4方式創建 索引模式后,然后在圖-5中可以獲取到實時的日志記錄。

 

                         (圖-4)

                       (圖-5)

 

我們在logstash中增加對error級別日志的過濾處理,將這些日志統一放到 logstash-customer-service-error 索引中,然后在 kibana 中創建該索引同名的pattern, 這樣在discover頁簽下可以直觀的通過 時間段的篩選來定位error日志,並在下面的 expanded document 下查看日志的具體內容,這樣一來就不需要挨個連接到服務器去手動查看日志了。

 

 

 

 

要想用geoip必須索引創建名為logstash開頭(這個是個大坑啊)

膽大!心細!


免責聲明!

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



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