ELK 實作分散式log採集系統 - LUFOR129

文章推薦指數: 80 %
投票人數:10人

ELK 是由三個工具組成,Elasticsearch (E) 、Logstash (L) 、Kibana (K) 組成的Log 過濾、儲存、分析、視覺化系統,另外我們還需要一個叫Beat的工具來擔任 ... GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWriteELK實作分散式log採集系統這禮拜恰好修的一門叫做企業電腦網路的課,正要報告ELK。

恰好上個禮拜台積電IT來我們學校徵才,給出了一張GGIT進入會用到的工具一覽圖,那碩士期間這些應該就是我們碩班的必修了。

台積IT技術圖,未來我就把這些工具一點一點的寫成文章吧!那今天先來講圖片中間的ELK,這篇會講解ELK的安裝、配置文件、使用方法。

ELK組成ELK是由三個工具組成,Elasticsearch(E)、Logstash(L)、Kibana(K)組成的Log過濾、儲存、分析、視覺化系統,另外我們還需要一個叫Beat的工具來擔任Log的採集工具。

ElasticSearch是整體系統的核心部分,是一個非關聯式資料庫以JSON格式儲存資料,擁有一個非常厲害的索引功能,默認為9200portLogstash是一個過濾器(不過其實本身也可以作為採集器),會把所有採集到的Log傳遞到logstash中。

logstash可以依照規則將Log分割並傳遞到ElasticSearch(文章之後用ES表示),默認是5044port。

Kibana是圖形化展示工具,將儲存在ES內的資料用各式各樣圖表呈現出來,默認是5601port。

Beats是Log採集工具,負責將本台電腦的Log檔取出傳遞到logstash做過濾,或是直接傳遞到ES儲存器起來。

整體流程如下:為何用ELK那為什麼會需要ELK來採集Log呢?過去系統不優嗎?來看看過去怎麼做,假如我今天想要採集Nginx的成功access的log,那通常會放在/var/log/nginx/access.log。

如果我們想要查詢baidu是否有來爬我們網站,那麼可以通過簡單的grep來達成。

但是用在現今的大型系統會發現三個問題,一個是一旦流量過大會使log檔爆量,當log檔爆量後會自動壓縮成gz檔這使得查找困難。

另一個是在現代的分散式系統,所有的log檔散布在各個分散式機台中,當我們需要查找特定Log時會很費力。

最後是爬取出來都是文字資料,要轉成老闆看得懂的圖表還要自己寫,很不方便。

知道ELK的好處後我們來說說如何安裝吧!一、ELK的安裝其實ELK安裝都大同小異,就是去官方網站下載。

DownloadElasticProducts|ElasticDownloadElasticsearch,Logstash,Kibana,andBeatsforfree,andgetstartedwithElasticAPM,ElasticAppSearch…www.elastic.co進入官網你可以選擇使用deb安裝或是直接下載linux_x86_64壓縮包解壓縮。

把ES、logstash、Kibana、beats都安裝下來,要注意的是beats分成很多種beats,如果想要採集log檔那麼應該選擇filebeat,因為log本質就是file。

在安裝ES之前,ES是基於JRE來撰寫的所以要確保系統內有JAVA並加入了系統變數,安裝JAVA。

#檢查有沒有javajava-version#安裝javasudoaptinstalldefault-jre#安裝JDKsudoaptinstalldefault-jdk#確認JDKjavac-version具體安裝方式我寫完後發現篇幅太長了,所以我就放在這裡給大家看吧ELK-HackMDOnascaleof0-10,howlikelyisitthatyouwouldrecommendHackMDtoyourfriends,familyorbusinessassociates?hackmd.io二、ELK+Filebeat配置文件我們舉一個實際的分散式系統的例子,今天我有兩台伺服器一台是在140.127開頭(高雄大學的),一台是140.115開頭(中央大學的)。

我想將中央大學與高雄大學的log檔都抓進中央大學的logstash並保存在中央大學的ES中。

詳細流程如下:1.Filebeat首先先來看filebeat的配置文件,如果你是用deb安裝那應該可以在/etc/filebeat/filebeat.yml上看到他,如果你是用解壓縮方式那文件應該在解壓縮後資料夾底下,修改yml。

記得開啟enable,還有你的paths是爬取log的目標支援使用通配符,比如你想匹配所有nginx下的accesslog檔,你可以寫/var/log/nginx/access.*。

然後tags是為了在傳送到logstash後這個log檔是從哪裡來的。

接著是output,output默認是直接輸出到ES中,不過我們這裡要改成output到中央的logstash中(默認5044port),因此將ESoutput都註解掉並在logstash中改為outputhost完成後就開始執行吧,執行指令如果你是deb安裝那就/usr/share/filebeat/filebeat-e-c/etc/filebeat/filebeat.yml,如果你用解壓縮方式,那麼filebeat執行檔與yml配置檔都在同一個資料夾內,直行即可/filebeat-e-c/filebeat.yml。

2.logstashlogstash就是過濾beats進來的東西,過濾規則遵循grok清理規則,具體是如何清理的可以看這一篇:ELK教學-LogstashGrokFilter建立欄位Logstash在ELK架構中,是負責把收到的純文字資料,做特定的規則處理,就可以變成指定的欄位。

建立欄位的好處是可以方便搜尋,而且也能做到比全文檢索更好的分析,可說是欄位切的好,查詢沒煩惱。

我個人認為Logstash…blog.johnwu.cc修改/etc/logstash/logstash-sample.conf,如果你是解壓縮方式安裝則在/config/logstash-sample.conf。

logstash-sample.conf包含了logstash的input、filter、output。

舉個例子,假如今天beat爬取log檔為Alice|HELLOWORLD|33,我想經過清理將Alice放在name欄位、HELLOWORLD放在talk欄位、33放在age欄位。

依據grok規則在name欄位接受.*的正則表達,其他也相同。

最後會得到{name:"ALICE",talk:"HELLOWORLD",age:"33"}。

接著我們要輸出到ES(默認為9200port),ES本質是一個資料庫,因此我們需要建立table,只是要注意的是,ES的TABLE被稱作index。

我們需要對index取名字如下就是filebeat-2020.11.6-demo1,作為資料庫的表。

接著要將logstash打開,如果你是用解壓縮的方式安裝,開啟logstash的方式就是/bin/logstash-f/config/logstash-sample.conf,如果你是用deb安裝則指令為/usr/share/logstash/bin/logstash-f/etc/logstash/logstash-sample.conf3.ElasticSearch與KibanaElasticSearch與Kibana沒什麼配置文件,如果Kibana需要遠端開啟可以參考安裝說明中的調整server.host。

ES、Kibana如果你是用deb安裝則開啟方式就是serviceelasticsearchstart、servicekibanastart。

如果你是解壓縮安裝則/bin/elasticsearch、/bin/kibana。

你可以用localhost:5601來開啟kibana,或是如果你有調整service.host那就使用那個IPhost的5601來開啟kibana吧。

三、Kibana視覺化如果以上配置文件與安裝都成功,現在對目標logappend一些資料應該能夠在kibana上發現了。

不果你一進去肯定是發現什麼都看不到的,那是因為你尚未將ES內的index匯入進kibana。

方法如下,進入stackmanagement:這麼一來就可以在Discover看到傳入的清理過的log檔了。

記住要調整右上角的時間區間喔。

接下來是圖表,打開Visualize,隨便選一張圖,在bucket的aggregration選擇terms作為聚合方式。

大致上ELK的過程就算是完成了。

MorefromLUFOR129Follow中央大學資管碩二Lovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableAboutHelpTermsPrivacyGettheMediumappGetstartedLUFOR129182Followers中央大學資管碩二FollowMorefromMediumHackingSkillsBufferoverflowusingImmunityDebuggerICTFellaHowtoRetrievetheBitLockerRecoveryKeyfromAzureAD — ICTFellaTusharjadhavNAGIOSCLIENTINSTALATIONSCRIPTAnandMaragurAzureDevOps:CI/CDtodeployaPythonwebapptoAzureAppServiceonLinuxHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable



請為這篇文章評分?