ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

一、ELK Stack概述

官方話:ELK一款輕量級的實時日誌收集,處理,展示系統。

為什麼用ELK:

  1. 業務需求,市場的需求
  2. 開發與產品的需求,運維的一種責任
  3. 大數據也是當前的一個前景

1.1 ELK介紹及優缺點

ELK日誌分析系統的優勢

  1. 使用方便,直接解決了我們的需求,並且是開源的;
  2. 相對來說,學習還是配置都是相對簡單的;
  3. ES搜索快,基本上是秒級的;
  4. 架構相對簡單,橫向擴展方便。

ELK日誌分析系統的缺點

  1. Logstash耗資源較大,運行佔用CPU和內存高;
  2. 另外,沒有消息隊列緩存,存在數據丟失隱患。

二、ELK Stack架構

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

ELK是Elasticsearch、Logstash、Kibana三個開源軟件的組合而成,形成一款強大的實時日誌收集展示系統。除了相關的beat相關採集插件外,基本都是基於這個架構來完成。

  • 日誌採集層:logstash或 filebeat
  • 消息代理層:redis或kafka。
  • 管理層:logstash
  • 搜索引擎層:Elasticsearch
  • 展示層:kibana

Filebeat隸屬於Beats(社區)。目前Beats包含四種工具:

  1. Packerbeat (蒐集網絡流量數據)
  2. Topbeat (蒐集系統,進程和文件系統級別的CPU和內存使用情況等數據)
  3. Filebeat(蒐集文件數據)
  4. Winlogbeat(蒐集windows事件日誌數據)

Redis和kafka的作用

  1. 那如果logstash和ES無法通訊的話,日誌是不是會從而丟失?
  2. 那如果日誌量過大的話,日誌是不是會從而丟失?
  3. 防止logstash 直接與ES操作,產生大量的鏈接,導致ES瓶頸!

生產環境拓撲圖:

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

三、ELK Stack搭建

環境規劃

操作系統:CentOS-6.5-x86_64

ES版本:5.0

主機:192.168.63.246

主機:192.168.63.242

3.1 Elasticsearch安裝與集群配置

  1. 安裝JDK
# yum install open-jdk.1.8
# java –version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)
  1. 安裝Elasticsearch,下載解壓即可
[root@module-kzkt-02 opt]# cd /opt
[root@module-kzkt-02 opt]# tar zcvf elasticsearch-5.3.1.tar.gz
  1. 配置Elasticsearch
[root@module-kzkt-02 opt]# cd elasticsearch-5.3.1/config/ 
[root@module-kzkt-02 config]# vim elasticsearch.yml
cluster.name: es-log #集群名
node.name: node-1 #節點名稱
path.data: /path/to/data #存儲數據地址
path.logs: /path/to/logs #存儲日誌地址
bootstrap.memory_lock: true #當內存不足時,是否使用交換分區空間
network.host: 10.0.1.7 #IP地址
http.port: 9200 #通訊端口
discovery.zen.ping.unicast.hosts: ["host1", "host2"] #集群地址IP
discovery.zen.minimum_master_nodes: 3 #集群節點個數

系統配置:

當消耗完交換分區這麼大空間後才會產生oom:
# vim /etc/sysctl.conf
vm.max_map_count=262144
# sysctl –p
系統的打開文件數:
# vim /etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
修改用戶打開的線程數,因為es的段要經常打開文件控制索引:
# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 4096

切換到普通用戶啟動:

[root@module-kzkt-02 bin]# su - elk
[elk@module-kzkt-02 logs]$ cd /opt/elasticsearch-5.3.1/bin/
[elk@module-kzkt-02 bin]$ ./elasticsearch
  1. 要是提示,報一些沒有啟動的目錄,直接創建即可。
  2. 但是想寫入日誌和數據必須是普通用戶有寫入權限logs,data。

啟動之後:有如下顯示錶示已經安裝成功。

[root@module-kzkt-02 bin]# curl -XGET '10.0.1.7:9200'
{
"name" : "node-1",
"cluster_name" : "es-log",
"cluster_uuid" : "ZKwbyR74RHqKhUMyzFSQ5A",

"version" : {
"number" : "5.3.1",
"build_hash" : "5f9cf58",
"build_date" : "2017-04-17T15:52:53.846Z",
"build_snapshot" : false,
"lucene_version" : "6.4.2"
},
"tagline" : "You Know, for Search"
}

擴展:集群啟動設置

假如說只有一個節點,那麼es就當做自己是一個集群。

一個節點(node)就是一個Elasticsearch實例,而一個集群(cluster)由一個或多個節點組成,它們具有相同的cluster.name,它們協同工作,分享數據和負載。

當加入新的節點或者刪除一個節點時,集群就會感知到並平衡數據。

3.2 Logstash安裝與配置

1. 下載解壓即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf logstash-6.2.4.tar.gz

2. 配置文件修改

[root@module-kzkt-02 config]# vim config/logstash_to_es.conf
input {
file {
type => "log"
path => "/usr/local/nginx/logs/\\*.log"
discover_interval => 10
start_position => "beginning"
}
}

filter {
}
output {
elasticsearch {
index => "log-%{+YYYY.MM.dd}"
hosts => ["10.0.1.7:9200"]
}
stdout {codec => rubydebug}

也支持條件判斷,例如:

 if [type] == "****"{
elasticsearch {
hosts => ["192.168.1.1:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
if [type] == "****"{
elasticsearch {
hosts => ["192.168.1.160:9200"]
index => "es-error-%{+YYYY.MM.dd}"
}
}

我的配置文件如下:

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

3. 啟動服務

 [root@module-kzkt-02 bin]# nohup ./bin/logstash -f config/logstash_to_es.conf & 

3.3 Filebeat安裝與配置

1.下載解壓即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf filebeat-5.3.1-linux-x86_64

2.配置文件修改

[root@module-kzkt-02 filebeat-5.3.1-linux-x86_64]# vim filebeat.yml
- input_type: log #類型
paths:
- /var/log/*.log #需要採集的日誌路徑
- / #多個的話直接添加
exclude_files: [".gz$"] : #移除這個目錄下面相關gz結尾的文件
exclude_lines: ["^DBG"]: #表示移除什麼樣的結尾的行。
output.elasticsearch:
hosts: ["localhost:9200"]

也可以輸出到Logstash、Redis等,示例:

輸出到logstash:
output.logstash:
hosts: ["localhost:5044"]
輸出到redis:
output.redis:
hosts: ["localhost"]
password: "my_password"
key: "filebeat"
db: 0
timeout: 5

3.4 Kibana安裝與配置

1.下載解壓即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf kibana-5.3.1-linux-x86_64.tar.gz

2.配置文件修改

[root@module-kzkt-02 config]# cd /opt/kibana-5.3.1-linux-x86_64/config/
[root@module-kzkt-02 config]# vim kibana.yml
server.port: 5601 #服務端口
server.host: "10.0.1.7" #服務IP
elasticsearch.url: <http> #連接es的地址
#elasticsearch.username: "user" #es用戶
#elasticsearch.password: "pass" #es密碼
/<http>

3.啟動服務

[root@module-kzkt-02 bin]# ./kibana

4.訪問

直接訪問:http://IP:5601

剛開始有個初始化的步驟,可能要等一會。

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

要創建一個索引:Management-->>index Partterns-->>Add New

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

出圖:

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

ELK還支持非常豐富的儀表盤功能,可視化展示關鍵數據,以下是公司6.x版本kibana展示的數據。

官網總訪問量及總字節數:

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺

電商月份總收入額:

組件的一些監控:

ELK 是什麼?一文全面瞭解 ELK Stack 企業級日誌平臺


分享到:


相關文章: