一、ELK Stack概述
官方話:ELK一款輕量級的實時日誌收集,處理,展示系統。
為什麼用ELK:
- 業務需求,市場的需求
- 開發與產品的需求,運維的一種責任
- 大數據也是當前的一個前景
1.1 ELK介紹及優缺點
ELK日誌分析系統的優勢
- 使用方便,直接解決了我們的需求,並且是開源的;
- 相對來說,學習還是配置都是相對簡單的;
- ES搜索快,基本上是秒級的;
- 架構相對簡單,橫向擴展方便。
ELK日誌分析系統的缺點
- Logstash耗資源較大,運行佔用CPU和內存高;
- 另外,沒有消息隊列緩存,存在數據丟失隱患。
二、ELK Stack架構
ELK是Elasticsearch、Logstash、Kibana三個開源軟件的組合而成,形成一款強大的實時日誌收集展示系統。除了相關的beat相關採集插件外,基本都是基於這個架構來完成。
- 日誌採集層:logstash或 filebeat
- 消息代理層:redis或kafka。
- 管理層:logstash
- 搜索引擎層:Elasticsearch
- 展示層:kibana
Filebeat隸屬於Beats(社區)。目前Beats包含四種工具:
- Packerbeat (蒐集網絡流量數據)
- Topbeat (蒐集系統,進程和文件系統級別的CPU和內存使用情況等數據)
- Filebeat(蒐集文件數據)
- Winlogbeat(蒐集windows事件日誌數據)
Redis和kafka的作用
- 那如果logstash和ES無法通訊的話,日誌是不是會從而丟失?
- 那如果日誌量過大的話,日誌是不是會從而丟失?
- 防止logstash 直接與ES操作,產生大量的鏈接,導致ES瓶頸!
生產環境拓撲圖:
三、ELK Stack搭建
環境規劃
操作系統:CentOS-6.5-x86_64
ES版本:5.0
主機:192.168.63.246
主機:192.168.63.242
3.1 Elasticsearch安裝與集群配置
- 安裝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)
- 安裝Elasticsearch,下載解壓即可
[root@module-kzkt-02 opt]# cd /opt
[root@module-kzkt-02 opt]# tar zcvf elasticsearch-5.3.1.tar.gz
- 配置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
- 要是提示,報一些沒有啟動的目錄,直接創建即可。
- 但是想寫入日誌和數據必須是普通用戶有寫入權限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}"
}
}
我的配置文件如下:
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
剛開始有個初始化的步驟,可能要等一會。
要創建一個索引:Management-->>index Partterns-->>Add New
出圖:
ELK還支持非常豐富的儀表盤功能,可視化展示關鍵數據,以下是公司6.x版本kibana展示的數據。
官網總訪問量及總字節數:
電商月份總收入額:
組件的一些監控:
閱讀更多 Go語言中文網 的文章