今日目標
對ELK的概念進行了解
elasticsearch介紹
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎来颤,基于RESTful web接口御雕。Elasticsearch是用Java開發(fā)的输瓜,并作為Apache許可條款下的開放源碼發(fā)布嗅剖,是第二流行的企業(yè)搜索引擎根蟹。設計用于云計算中,能夠達到實時搜索拷肌,穩(wěn)定到旦,可靠,快速巨缘,安裝使用方便添忘。
elasticsearch幾個重要術語
- NRT
elasticsearch是一個近似實時的搜索平臺,從索引文檔到可搜索有些延遲若锁,通常為1秒搁骑。 - 集群
集群就是一個或多個節(jié)點存儲數據,其中一個節(jié)點為主節(jié)點又固,這個主節(jié)點是可以通過選舉產生的仲器,并提供跨節(jié)點的聯(lián)合索引和搜索的功能。集群有一個唯一性標示的名字仰冠,默認是elasticsearch乏冀,集群名字很重要,每個節(jié)點是基于集群名字加入到其集群中的洋只。因此辆沦,確保在不同環(huán)境中使用不同的集群名字。一個集群可以只有一個節(jié)點识虚。強烈建議在配置elasticsearch時肢扯,配置成集群模式。 - 節(jié)點
節(jié)點就是一臺單一的服務器担锤,是集群的一部分鹃彻,存儲數據并參與集群的索引和搜索功能。像集群一樣妻献,節(jié)點也是通過名字來標識蛛株,默認是在節(jié)點啟動時隨機分配的字符名团赁。當然啦,你可以自己定義谨履。該名字也蠻重要的欢摄,在集群中用于識別服務器對應的節(jié)點。
節(jié)點可以通過指定集群名字來加入到集群中笋粟。默認情況下怀挠,每個節(jié)點被設置成加入到elasticsearch集群。如果啟動了多個節(jié)點害捕,假設能自動發(fā)現(xiàn)對方绿淋,他們將會自動組建一個名為elasticsearch的集群。 - 索引
索引是有幾分相似屬性的一系列文檔的集合尝盼。如nginx日志索引吞滞、syslog索引等等。索引是由名字標識盾沫,名字必須全部小寫裁赠。這個名字用來進行索引、搜索赴精、更新和刪除文檔的操作佩捞。
索引相對于關系型數據庫的庫。 - 類型
在一個索引中蕾哟,可以定義一個或多個類型一忱。類型是一個邏輯類別還是分區(qū)完全取決于你。通常情況下谭确,一個類型被定于成具有一組共同字段的文檔帘营。如ttlsa運維生成時間所有的數據存入在一個單一的名為logstash-ttlsa的索引中,同時琼富,定義了用戶數據類型,帖子數據類型和評論類型庄新。
類型相對于關系型數據庫的表鞠眉。
*文檔
文檔是信息的基本單元,可以被索引的择诈。文檔是以JSON格式表現(xiàn)的械蹋。
在類型中,可以根據需求存儲多個文檔羞芍。
雖然一個文檔在物理上位于一個索引哗戈,實際上一個文檔必須在一個索引內被索引和分配一個類型。
文檔相對于關系型數據庫的列荷科。 - 分片和副本
在實際情況下唯咬,索引存儲的數據可能超過單個節(jié)點的硬件限制纱注。如一個十億文檔需1TB空間可能不適合存儲在單個節(jié)點的磁盤上,或者從單個節(jié)點搜索請求太慢了胆胰。為了解決這個問題狞贱,elasticsearch提供將索引分成多個分片的功能。當在創(chuàng)建索引時蜀涨,可以定義想要分片的數量瞎嬉。每一個分片就是一個全功能的獨立的索引,可以位于集群中任何節(jié)點上厚柳。
分片的兩個最主要原因:
a氧枣、水平分割擴展,增大存儲量
b别垮、分布式并行跨分片操作便监,提高性能和吞吐量
分布式分片的機制和搜索請求的文檔如何匯總完全是有elasticsearch控制的,這些對用戶而言是透明的宰闰。
網絡問題等等其它問題可以在任何時候不期而至茬贵,為了健壯性,強烈建議要有一個故障切換機制移袍,無論何種故障以防止分片或者節(jié)點不可用解藻。
為此,elasticsearch讓我們將索引分片復制一份或多份葡盗,稱之為分片副本或副本螟左。
副本也有兩個最主要原因:
高可用性,以應對分片或者節(jié)點故障觅够。出于這個原因胶背,分片副本要在不同的節(jié)點上。
提供性能喘先,增大吞吐量钳吟,搜索可以并行在所有副本上執(zhí)行。
總之窘拯,每一個索引可以被分成多個分片红且。索引也可以有0個或多個副本。復制后涤姊,每個索引都有主分片(母分片)和復制分片(復制于母分片)暇番。分片和副本數量可以在每個索引被創(chuàng)建時定義。索引創(chuàng)建后思喊,可以在任何時候動態(tài)的更改副本數量壁酬,但是,不能改變分片數。
默認情況下舆乔,elasticsearch為每個索引分片5個主分片和1個副本岳服,這就意味著集群至少需要2個節(jié)點。索引將會有5個主分片和5個副本(1個完整副本)蜕煌,每個索引總共有10個分片派阱。
每個elasticsearch分片是一個Lucene索引。一個單個Lucene索引有最大的文檔數LUCENE-5843, 文檔數限制為2147483519(MAX_VALUE – 128)斜纪。 可通過_cat/shards來監(jiān)控分片大小贫母。
logstash 介紹
LogStash由JRuby語言編寫,基于消息(message-based)的簡單架構盒刚,并運行在Java虛擬機(JVM)上腺劣。不同于分離的代理端(agent)或主機端(server),LogStash可配置單一的代理端(agent)與其它開源軟件結合因块,以實現(xiàn)不同的功能橘原。Logstash是一個完全開源的工具,他可以對你的日志進行收集涡上、分析趾断,并將其存儲供以后使用(如,搜索)吩愧,您可以使用它芋酌。說到搜索,logstash帶有一個web界面雁佳,搜索和展示所有日志脐帝。
- logStash的四大組件
Shipper:發(fā)送事件(events)至LogStash;通常糖权,遠程代理端(agent)只需要運行這個組件即可堵腹;
Broker and Indexer:接收并索引化事件;
Search and Storage:允許對事件進行搜索和存儲星澳;
Web Interface:基于Web的展示界面
正是由于以上組件在LogStash架構中可獨立部署疚顷,才提供了更好的集群擴展性。
- LogStash主機分類
代理主機(agent host):作為事件的傳遞者(shipper)禁偎,將各種日志數據發(fā)送至中心主機腿堤;只需運行Logstash 代理(agent)程序;
中心主機(central host):可運行包括中間轉發(fā)器(Broker)届垫、索引器(Indexer)释液、搜索和存儲器(Search and Storage)全释、Web界面端(Web Interface)在內的各個組件装处,以實現(xiàn)對日志數據的接收、處理和存儲。
kibana
Kibana 是一個基于Web的圖形界面也是一個開源和免費的工具妄迁,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面寝蹈,可以幫助匯總、分析和搜索重要數據日志登淘。
新增了一個FileBeat箫老,它是一個輕量級的日志收集處理工具(Agent),F(xiàn)ilebeat占用資源少黔州,適合于在各個服務器上搜集日志后傳輸給Logstash耍鬓,官方也推薦此工具
Filebeat隸屬于Beats。目前Beats包含四種工具:
Packetbeat(搜集網絡流量數據)
Topbeat(搜集系統(tǒng)流妻、進程和文件系統(tǒng)級別的 CPU 和內存使用情況等數據)
Filebeat(搜集文件數據)
Winlogbeat(搜集 Windows 事件日志數據)
使用ELK必要性(解決運維痛點)
開發(fā)人員不能登錄線上服務器查看詳細日志
各個系統(tǒng)都有日志牲蜀,日至數據分散難以查找
日志數據量大,查詢速度慢绅这,或者數據不夠實時
明日計劃
ELK環(huán)境的搭建
總結
ELK 其實并不是一款軟件涣达,而是一整套解決方案,之間互相配合使用证薇,完美銜接度苔,高效的滿足了很多場合的應用。
比如應用出現(xiàn)故障浑度,需要通過日志排查故障信息寇窑。當應用已部署了多個環(huán)境時,這時排查的難度和耗時就是一個巨大的損耗俺泣。而ELK就可以對多個環(huán)境的日志進行收集疗认,過濾,存儲伏钠,檢錯横漏,可視化。屆時你只需要查看kibana上的日志信息熟掂,就可以找出故障所在缎浇。
比如針對應用在生產環(huán)境上的表現(xiàn)需要數據支撐,如訪客數赴肚,功能調用量素跺,出錯率等等。此類數據的收集誉券,當然可以通過使用別的產品或編寫一套程序進行輸出指厌,是有其一定的效果。但能像ELK這樣對應用無入侵踊跟,且功能強大的開源軟件踩验。那是少之又少了。