企业日志分析ELK(Logstash+Elasticsearch+Kibana)介绍及搭建
目錄
- 一、ELK概述
- 1、ELK日志分析系統
- 2、ELK中日志處理步驟
- 二、Elasticsearch介紹
- 1、Elasticsearch的基礎核心概念
- 2、分片和副本
- 三、LogStash概述
- 1、LogStash的主要組件
- 2、LogStash主機分類
- 四、Kibana概述
- 五、部署ELK日志分析系統
- 1、配置elasticsearch環境
- 2、部署elasticsearch軟件
- 3、安裝elasticsearch-head插件
- 4、安裝logstash
- 5、安裝kibana
- 總結
- elk 是什么 ?
- 為什么要用elk?
一、ELK概述
1、ELK日志分析系統
ELK是由Elasticsearch、Logstash、Kiban三個開源軟件的組合。在實時數據檢索和分析場合,三者通常是配合共用,而且又都先后歸于 Elastic.co 公司名下,故有此簡稱。
2、ELK中日志處理步驟
- 1、將日志進行集中化管理(beats)
- 2、將日志格式化(Logstash),然后將格式化后的數據輸出到Elasticsearch
- 3、對格式化后的數據進行索引和存儲(Elasticsearch)
- 4、前端數據的展示(Kibana)
二、Elasticsearch介紹
- Elasticsearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發的,并作為Apache許可條款下的開放源碼發布,是第二流行的企業搜索引擎。設計用于云計算能夠達到實時搜索,穩定、可靠,快速,安裝使用方便。
1、Elasticsearch的基礎核心概念
- 1、接近實時(NRT)
- 2、集群(cluster)
- 3、節點(node)
- 4、索引(index) 索引相對于關系型數據庫的庫
- 類型(type) 類型相當于關系型數據庫的表
- 文檔(document) 文檔相當于關系型數據庫的列
2、分片和副本
在上述特性中,最重要的就是分片和副本,也是讓es數據庫(Elasticsearch)成為百度這些主流搜索引擎的主要原因,理論上能提升4倍的性能。
結合實際情況分析:索引存儲的數據可能超過單個節點的硬件限制,如一個10億文檔需1TB空間可能不適合存儲在單個節點的磁盤上,或者從單個節點搜索請求太慢了,為了解決這個問題,elasticsearch提供將索引分成多個分片的功能,當在創建索引時,可以定義想要分片的數量。每個分片就是一個全功能的獨立索引,可以位于集群中任何節點上。
- 分片的最主要的原因:
- 水平分割擴展,增大存儲量
- 分布式并行跨分片操作,提供性能和吞吐量
分布式分片的機制和搜索請求的文檔如何匯總完全是有elasticsearch控制的,這些對用戶而言是透明的。
網絡問題等等其他問題可以在任何時候不期而至,為了健壯性,強烈建議要有個故障切換機制,無論何種故障以防止分片或者節點不可用,為此,elasticsearch讓我們將索引分片復制一份或多份,稱為分片副本或副本
- 副本也有兩個最主要的原因:
- 高可用性,以應對分片或者節點故障,出于這個原因,分片副本要在不同的節點上
- 性能加強,增加吞吐量,搜索可以并行在所有副本上執行
總之,每個索引可以被分成多個分片。一個索引也可以被復制0次(意思是沒有復制)或多次。一旦復制了,每個索引就有了主分片(作為復制源的原來的分片)和復制分片(主分片的拷貝)之別。分片和副本的數量可以在索引創建的時候指定。在索引創建后,你可以在任何時候動態地改變副本的數量,但是你事后不能改變分片的數量。
默認情況下,Elasticsearch中的每個索引被分片5個主分片和1個副本,這意味著,如果你的集群中至少有兩個節點,你的索引將會有5個主分片和另外5個副本分片(1個完全拷貝),這樣的話每個索引總共就有10個分片。
三、LogStash概述
- 一款強大的數據處理工具
- 可實現數據傳輸、格式處理、格式化輸出
- 數據輸入、數據加工(如過濾,改寫等)以及數據輸出
- 常用插件:Input、Filter Plugin、Output
- Input:收集源數據(訪問日志、錯誤日志等)
- Filter Plugin:用于過濾日志和格式處理
- Output:輸出日志
1、LogStash的主要組件
- shipper:日志收集者:負責監控本地日志文件的變化,及時把日志文件的最新內容收集起來。通常,遠程代理瑞(agent〉只需要運行這個組件即可;
- Indexer:日志存儲者。負責接收日志并寫入到本地文件。
- Broker:日志Hub。負責連接多個shipper和多個Indexer
- search and storage:允許對事件進行搜索和存儲;
- web Interface:基于web的展示界面
正是由于以上組件在Logstash架構中可獨立部署,才提供了更好的集群擴展性
2、LogStash主機分類
- 代理主機(agent host):作為事件的傳遞者(shipper),將各種日志數據發送至中心主機;只需運行Logstash代理(agent)程序
- 中心主機(central host):可運行包括中間轉發器(Broker)、索引器(Indexer)、搜索和存儲器(Search andstorage ) 、web界面端(web Interface)在內的各個組件,以實現對日志數據的接收、處理和存儲
四、Kibana概述
- 一個針對Elasticsearch的開源分析及可視化平臺
- 搜索、查看存儲在Elasticsearch索引中的數據
- 通過各種圖表進行高級數據分析及展示
- Kibana主要功能
- Elasticsearch無縫之集成
- Kibana架構為Elasticsearch定制,可以將任何結構化和非結構化數據加入Elasticsearch索引。Kibana還充分利用了Elasticsearch強大的搜索和分析功能。
- 整合數據
- Kibana能夠更好地處理海量數據,并據此創建柱形圖、折線圖、散點圖、直方圖、餅圖和地圖。
- 復雜數據分析
- Kibana提升了Elasticsearch分析能力,能夠更加智能地分析數據,執行數學轉換并且根據要求對數據切割分塊。
- 讓更多團隊成員收益
- 強大的數據庫可視化接口讓各業務崗位都能夠從數據集合受益。
- 接口靈活,分享更容易
- 使用Kibana可以更加方便地創建、保存、分享數據,并將可視化數據快速交流。
- 配置簡單
- Kibana的配置和啟用非常簡單,用戶體驗非常友好。Kibana自帶Web服務器,可以快速啟動運行。
- 可視化多數據源
- Kibana可以非常方便地把來自Logstash、ES-Hadoop、Beats或第三方技術的數據整合到Elasticsearch,支持的第三方技術包括Apache flume、 Fluentd 等。
- 簡單數據導出
- Kibana可以方便地導出感興趣的數據,與其它數據集合并融合后快速建模分析,發現新結果。
- Elasticsearch無縫之集成
五、部署ELK日志分析系統
- 配置ELK日志分析集群
- 使用Logstash收集日志
- 使用Kibana查看分析日志
案例環境
| node1 | CentOS7 | 192.168.172.10 | Elasticsearch/Kibana |
| node2 | CentOS7 | 192.168.172.20 | Elasticsearch |
| apache | CentOS7 | 192.168.172.30 | httpd / Logstash |
| 客戶機(宿主機) | Windows10 | 192.168.172.1 |
關防火墻和系統安全機制
更改主機名
1、配置elasticsearch環境
node1(192.168.172.10)
node2(192.168.172.20)
2、部署elasticsearch軟件
node1(192.168.172.10)
node2(192.168.172.20)
(1)安裝elasticsearch—rpm包
上傳elasticsearch-5.5.0.rpm到/opt目錄下
(2)加載系統服務
systemctl daemon-reload systemctl enable elasticsearch.service(3)更改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bakvim /etc/elasticsearch/elasticsearch.yml #17行;取消注釋,修改;集群名字 cluster.name: my-elk-cluster #23行;取消注釋,修改;節點名字(node2修改成node2) node.name: node1 #33行;取消注釋,修改;數據存放路徑 path.data: /data/elk_data #37行;取消注釋,修改;日志存放路徑 path.logs: /var/log/elasticsearch #43行;取消注釋,修改;不在啟動的時候鎖定內存 bootstrap.memory_lock: false #55行;取消注釋,修改;提供服務綁定的IP地址,0.0.0.0代表所有地址 network.host: 0.0.0.0 #59行;取消注釋;偵聽端口為9200(默認) http.port: 9200 #68行;取消注釋,修改;集群發現通過單播實現,指定要發現的節點 node1、node2 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
(4)創建數據存放路徑并授權
mkdir -p /data/elk_data chown elasticsearch:elasticsearch /data/elk_data/(5)啟動elasticsearch是否成功開啟
systemctl start elasticsearch netstat -antp |grep 9200(6)查看節點信息
在宿主機192.168.172.1訪問
(7)檢驗集群健康狀態
在宿主機192.168.172.1訪問
(8)查看集群狀態
在宿主機192.168.172.1訪問
3、安裝elasticsearch-head插件
- 上述查看集群的方式,及其不方便,我們可以通過安裝elasticsearch-head插件后,來管理集群
(1)編譯安裝node組件依賴包
node1(192.168.172.10)
node2(192.168.172.20)
(2)安裝phantomjs(前端框架)
node1(192.168.172.10)
node2(192.168.172.20)
(3)安裝elasticsearch-head(數據可視化工具)
node1(192.168.172.10)
node2(192.168.172.20)
(4)修改主配置文件
node1(192.168.172.10)
node2(192.168.172.20)
(5)啟動elasticsearch-head
node1(192.168.172.10)
node2(192.168.172.20)
(6)使用elasticsearch-head插件查看集群狀態
http://192.168.172.10:9100 在Elasticsearch 后面的欄目中輸入 http://192.168.172.10:9200http://192.168.172.20:9100 在Elasticsearch 后面的欄目中輸入 http://192.168.172.20:9200(7)創建索引
node1(192.168.172.10)
創建索引為index-demo,類型為test
回到宿主機192.168.172.1
打開瀏覽器輸入地址,查看索引信息http://192.168.172.10:9100- 下圖可以看見索引默認被分片5個,并且有一個副本
4、安裝logstash
- 收集日志輸出到elasticsearch中
(1)安裝Apahce服務(httpd)
apache(192.168.172.30)
(2)安裝Java環境
apache(192.168.172.30)
(3)安裝logstash
apache(192.168.172.30)
(4)測試logstash命令
apache(192.168.172.30)
定義輸入和輸出流:
輸入采用標準輸入,輸出采用標準輸出(類似管道)
使用rubydebug顯示詳細輸出,codec為一種編解碼器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'使用 Logstash 將信息寫入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.172.10:9200"] } }'在宿主機192.168.172.1上訪問
查看索引信息
(5)在Apache主機上做對接配置
apache(192.168.172.30)
Logstash配置文件主要由三部分組成:input、output、filter(根據需要)
在宿主機192.168.172.1上訪問
查看索引信息
5、安裝kibana
node1(192.168.172.10)
上傳kibana-5.5.1-x86_64.rpm 到/opt目錄 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpmcd /etc/kibana/ cp kibana.yml kibana.yml.bakvim kibana.yml #2行;取消注釋;kibana打開的端口(默認5601) server.port: 5601 #7行;取消注釋,修改;kibana偵聽的地址 server.host: "0.0.0.0" #21行;取消注釋,修改;和elasticsearch建立聯系 elasticsearch.url: "http://192.168.172.10:9200" #30行;取消注釋;在elasticsearch中添加.kibana索引 kibana.index: ".kibana" systemctl start kibana.service systemctl enable kibana.service
在宿主機192.168.172.1上訪問
首次登錄創建一個索引 名字:system-* (這是對接系統日志文件)
然后點最下面的出面的create 按鈕創建
然后點最左上角的Discover按鈕 會發現system-*信息
然后點下面的host旁邊的add 會發現右面的圖只有 Time 和host 選項了 這個比較友好
(6)對接Apache主機的Apache 日志文件(訪問日志、錯誤日志)
apache(192.168.172.30)
在宿主機192.168.172.1上訪問
打開輸入http://192.168.172.30,制造點訪問記錄
打開瀏覽器 輸入http://192.168.172.10:9100/ 查看索引信息
能發現apache_error-2021.05.11和apache_access-2021.05.11
打開瀏覽器 輸入http://192.168.172.10:5601點擊左下角有個management選項—index patterns—create index pattern
分別創建apache_error-* 和 apache_access-* 的索引
總結
elk 是什么 ?
Elastic Stack(舊稱ELK Stack),是一種能夠從任意數據源抽取數據,并實時對數據進行搜索、分析和可視化展現的數據分析框架。(hadoop同一個開發人員)ELK 其實并不是一款軟件,而是一整套解決方案,是三個軟件產品的首字母縮寫 Elasticsearch:負責日志檢索和儲存 Logstash:負責日志的收集和分析、處理 Kibana:負責日志的可視化 這三款軟件都是開源軟件,通常是配合使用,而且又先后歸于 Elastic.co 公司名下,故被簡稱為 ELK為什么要用elk?
服務器眾多,組件眾多,日志眾多發現問題困難,技能要求高ELK組件在海量日志系統的運維中,可用于解決: 分布式日志數據集中式查詢和管理 系統監控,包含系統硬件和應用各個組件的監控 故障排查 安全信息和事件管理 報表功能業務場景:《實時日志分析展現》日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。通常,日志被分散的儲存不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日志管理,例如:開源的 syslog ,將所有服務器上的日志收集匯總。集中化管理日志后,日志的統計和檢索又成為一件比較麻煩的事情,一般我們使用 grep 、 awk和 wc 等 Linux 命令能實現檢索和統計,但是對于要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。開源實時日志分析 ELK 平臺能夠完美的解決我們上述的問題, ELK 由 ElasticSearch 、 Logstash 和 Kiabana 三個開源工具組成。總結
以上是生活随笔為你收集整理的企业日志分析ELK(Logstash+Elasticsearch+Kibana)介绍及搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存32000:挑战人类极限,揭秘记忆奥
- 下一篇: OpenStack 的部署T版(一)——