什么是ELK?
通俗來講,ELK是由Elasticsearch、Logstash、Kibana 三個開源軟件的組成的一個組合體,ELK是elastic公司研發的一套完整的日志收集、分析和展示的企業級解決方案,在這三個軟件當中,每個軟件用於完成不同的功能,ELK 又稱為ELK stack,官方域名為elastic.co,ELK stack的主要優點有如下幾個:
處理方式靈活:elasticsearch是實時全文索引,具有強大的搜索功能
配置相對簡單:elasticsearch的API全部使用JSON 接口,logstash使用模塊配置,kibana的配置文件部分更簡單。
檢索性能高效:基於優秀的設計,雖然每次查詢都是實時,但是也可以達到百億級數據的查詢秒級響應。
集群線性擴展:elasticsearch和logstash都可以靈活線性擴展
前端操作絢麗:kibana的前端設計比較絢麗,而且操作簡單
什么是Elasticsearch:
是一個高度可擴展的開源全文搜索和分析引擎,它可實現數據的實時全文搜索搜索、支持分布式可實現高可用、提供API接口,可以處理大規模日志數據,比如Nginx、Tomcat、系統日志等功能。
Elasticsearch使用Java語言開發,是建立在全文搜索引擎ApacheLucene基礎之上的搜索引擎,https://lucene.apache.org/。
Elasticsearch的特點:
實時搜索、實時分析
分布式架構、實時文件存儲
文檔導向,所有對象都是文檔
高可用,易擴展,支持集群,分片與復制
接口友好,支持json
什么是LogstashLogstash
是一個具有實時傳輸能力的數據收集引擎,其可以通過插件實現日志收集和轉發,支持日志過濾,支持普通log、自定義json格式的日志解析,最終把經過處理的日志發送給elasticsearch。
什么是kibana:
Kibana為elasticsearch提供一個查看數據的web界面,其主要是通過elasticsearch的API接口進行數據查找,並進行前端數據可視化的展現,另外還可以針對特定格式的數據生成相應的表格、柱狀圖、餅圖等。
為什么使用ELK?
ELK組件在海量日志系統的運維中,可用於解決以下主要問題:
-分布式日志數據統一收集,實現集中式查詢和管理
-故障排查-安全信息和事件管理-報表功能
ELK的好處:ELK組件在大數據運維系統中,主要可解決的問題如下:
-日志查詢,問題排查,故障恢復,故障自愈
-應用日志分析,錯誤報警
-性能分析,用戶行為分析
一:elasticsearch集群部署:
1.1:環境初始化:
最小化安裝Centos 7.x/Ubuntu x86_64操作系統的虛擬機,vcpu 2,內存4G或更多,操作系統盤50G,主機名設置規則為linux-fairies1.exmaple.com,其中host1和host2為elasticsearch服務器,為保證效果特額外添加一塊單獨的數據磁盤大小為100G並格式化掛載到/data的目錄下,我的虛擬機配置信息如下

有三台服務器同時安裝elasticsearch服務並搭建集群,三台服務器的IP分別為:192.168.37.16/192.168.37.17/192.168.37.18
1.1.1:主機名和磁盤掛載,
三台主機的主機名分別設置為
192.168.37.16 linux-fairies1
192.168.37.17 linux-fairies2
192.168.37.18 linux-fairies3
在三台主機上分別設置主機名並重啟,見下圖

在三台機器上分別格式化硬盤,具體做法見下圖

查看硬盤的ID信息,使用命令blkid ,具體見下圖

其中上圖/dev/sdb是我們自己手動添加的硬盤
打開文件,掛載,
vim /etc/fstab
在文件中添加掛載內容,見下圖,
假如你掛載的文件不存在,就要先創建文件,如下圖創建文件夾

執行命令,使掛載生效,見下圖
root@linux-fairies1:~# mount -a
驗證掛載信息,見下圖
root@linux-fairies1:~# df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 392M 13M 380M 4% /run /dev/sda1 30G 3.3G 25G 12% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup tmpfs 392M 0 392M 0% /run/user/0 /dev/sdb 100G 135M 100G 1% /data
看到上圖,說明掛載成功,同時在另外兩台電腦上執行相同的命令完成掛載
1.2:安裝elasticsearch,我這次系統使用的是Ubuntu1804,elasticsearch為帶JDK的7.6.1版本
上傳deb包,包名如下圖
1.3:開始安裝:具體見下圖
root@linux-fairies1:/usr/local/src# dpkg -i elasticsearch-7.6.1-amd64.deb
通過上圖可知,軟件安裝完成
1.4:修改配置文件,具體修改的內容如下圖
root@linux-fairies1:/usr/local/src# cat /etc/elasticsearch/elasticsearch.yml
三台機器都需要需改配置文件的,其中節點(node.name)的名稱必須唯一
配置文件解析如下:
cluster.name: ELK-Cluster #ELK的集群名稱,名稱相同即屬於是同一個集群 node.name: elk-node1 #當前節點在集群內的節點名稱 path.data: /elk/data#ES數據保存目錄 path.logs: /elk/logs#ES日志保存目 bootstrap.memory_lock: true#服務啟動的時候鎖定足夠的內存,防止數據寫入swapnetwork.host: 0.0.0.0#監聽IP http.port: 9200#監聽端口 #集群中node節點發現列表 discovery.seed_hosts: ["192.168.37.16","192.168.37.17","192.168.37.18"] #集群初始化那些節點可以被選舉為 mastercluster.initial_master_nodes: ["192.168.37.16","192.168.37.17","192.168.37.18"] #2.x 5.x 6.x 配置節點發現列表 discovery.zen.ping.unicast.hosts: ["192.168.15.11", "192.168.15.12"] #一個集群中的N個節點啟動后,才允許進行數據恢復處理,默認是1 gateway.recover_after_nodes: 2 #設置是否可以通過正則或者_all刪除或者關閉索引庫,默認true表示必須需要顯式指定索引庫名稱,生產環境建議設置為true,刪除索引庫的時候必須指定,否則可能會誤刪索引庫中的索引庫。 action.destructive_requires_name: true
1.5:啟動程序,可以直接執行 systemctl restart elasticsearch 啟動程序的,見下圖

通過上圖可知,程序啟動失敗
1.6:檢查排查,檢查排錯主要是通過查看日志的,查看日志及相關信息見下圖
下圖為系統日志

下圖為服務啟動的腳本

下圖為,服務啟動的賬戶信息

通過以上圖片分析可知,主要是/data目錄沒有權限及服務使用root啟動的,
修改權限見如下

1.7:重新啟動服務並驗證,具體明細見下圖

根據上圖可知,服務起開了
打開瀏覽器驗證,見下圖

由上圖可知,elasticsearch集群服務創建成功