ELK 教學- 從無到有安裝ELK (CentOS/Red Hat)

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

ELK 教學架構. ELK 是由Elasticsearch、Logstash 及Kibana 三個系統所組成的Log 蒐集、分析、查詢系統。

可以在不改變原系統架構的情況下,架設ELK ... HomeCategoriesTagsArchivesELK是由Elasticsearch、Logstash及Kibana三個系統所組成的Log蒐集、分析、查詢系統。

可以在不改變原系統架構的情況下,架設ELK蒐集、分析、查詢Log,簡化過去繁鎖又沒效率的查Log工作。

前言過往架設網站或伺服端系統時,通常把Log寫在檔案中,當發生問題要查詢時,用筆記本打開查到眼花撩亂。

或聰明一點的方式,用LogParser之類的分析工具查看,但速度很慢,畢竟是查詢文字內容。

如果你還在用筆記本查Log,強烈建議你馬上在測試環境裝起來,試試ELK強大的威力吧!※特別強調,不需要改變原系統架構。

VirtualBox如果有現成的Linux系統,可以直接跳過此章節。

請先安裝VirtualBox5.x以上版本。

DownloadVirtualBox不想自己重新安裝Linux的話,可以用本文提供的RedHat7.3VM。

下載RedHat7.3.ova下載完成後,點兩下RedHat7.3.ova啟動匯入。

建議給2GB記憶體,方便之後的練習。

如下圖:匯入完成就請動了,帳號密碼都是root。

如果無法啟動,可能因為VM裝64位元版,而你的BIOS沒有啟動VirtualizationTechnology。

看看能不能ping到VM。

如下圖:1.Java因為Elasticsearch及Logstash是用Java開發,所以要安裝JVM。

本篇教學是用Elasticsearch5.3版本,需要Java8以上版本,官方推薦1.8.0_73上版本。

RedHat及CentOS可以下載rpm安裝檔。

其他Linux版本的話就下載tar解壓縮安裝。

DownloadJRE下載後,透過SCP或WinSCP放到/tmp/,執行以下安裝指令。

1rpm-ivh/tmp/jre-*.rpm2.ElasticsearchElasticsearch是搜尋引擎,就像是資料庫,把收集到的Log存在這裡,讓你可以快速的查詢。

從Elasticsearch官網下載rpm後,透過SCP或WinSCP放到/tmp/,執行以下指令安裝:1rpm-ivh/tmp/elasticsearch-*.rpm2.1啟動安裝好後,執行以下指令啟動:1systemctlstartelasticsearch查看狀態:12systemctlstatuselasticsearchcurl"http://localhost:9200/_cat/nodes"2.2設定記憶體越大,查詢速度越快。

但Elasticsearch使用記憶體有兩個條件限制:最高只能設定為系統的50%。

例:系統8GB,Elasticsearch只能設定4GB。

不能超過32GB。

違反以上兩個條件,Elasticsearch查詢速度會不升反減。

設定Elasticsearch記憶體使用上限及下限。

1vi/etc/elasticsearch/jvm.options找到以下兩個設定值,都改為1g:1234#Xms記憶體使用下限#Xmx記憶體使用上限-Xms1g-Xmx1g本文提供的VM只有2G記憶體,Elasticsearch安裝完預設是2G。

如果不改Elasticsearch會crash。

設定Elasticsearch綁定的IP及Port。

1vi/etc/elasticsearch/elasticsearch.yml找到以下兩個設定值:123456789#綁定特定IP#network.bind_host:192.168.56.101#綁定多個IP#network.host:["192.168.56.101","127.0.0.1"]#綁定所有IPnetwork.bind_host:0.0.0.0#綁定Port,預設其實就是9200http.port:9200設定完成後,重新啟動:1systemctlrestartelasticsearch試試看用IP查詢nodes1curl"http://192.168.56.101:9200/_cat/nodes"記得換成你的IP你也可以試試看用瀏覽器打開http://192.168.56.101:9200/_cat/nodes,你會發現打沒有回應!!!2.3防火牆很多新手會忘記防火牆的存在…兩個解法:完全關閉12systemctlstopfirewalldsystemctldisablefirewalld增加防火牆規則12firewall-cmd--add-service=elasticsearch--permanentfirewall-cmd--reload為了以下教學順利,選擇1會比較方便,不用每次都加規則。

正式環境請選擇2會比較安全。

再次用瀏覽器打開,就可以看到回應了。

3.Beats看到這邊你可能會覺得奇怪,ELK三個字沒有出現B,上面也都沒有Beats等字眼。

Beats是ELK的附屬程式,是幫忙傳送資料的小工具,基本上沒有它們也沒關係,但有它們會很方便。

Beats有很多種,此教學只使用Filebeat,有興趣的可以自己研究其它Beats。

本範例Server是用Windows,所以下載的是FilebeatWindows版本。

DownloadFilebeatFilebeat是一個exe的執行檔,為了方便常駐啟用,可以把它註冊到WindowsService中。

用Administrator權限打開PowerShell,用cd指令切換到解壓縮位置,執行以下指令:1.\install-service-filebeat.ps1如果提示檔案未經數位簽屬等訊息,請改用以下指令:1powershell.exe-ExecutionPolicyUnRestricted-File.\install-service-filebeat.ps1如下圖:3.1設定打開Filebeat資料夾中的filebeat.yml,改為以下內容(可以全部刪光光,記得備份就好):12345678910filebeat.prospectors:-input_type:logpaths:#路徑改成你的Log位置-C:\Logs\*.*log*output.elasticsearch:#記得換成你的IPhosts:["192.168.56.101:9200"]#index名稱,可以把它想像成資料庫名稱index:"my-first-index"注意!注意!注意!此yml絕對不能出現Tab也就是\t這個字元,排版只能用空格。

只要有Tab這個字元出現,就會無法啟動。

3.2啟動打開服務,找到filebeat啟動它:3.3測試到Log位置新增text.log檔,隨便輸入文字,如圖:要有Enter斷行,斷行才會算這筆Log完整。

完整的Log才會被Filebeat送出。

用網頁打開http://192.168.56.101:9200/_cat/indices可以看到有名稱為my-first-index的index囉~3.4目前架構Elasticsearch+Filebeat已經能夠蒐集Log了,目前架構如下圖:4.Logstash你可能會想Elasticsearch+Filebeat已經能夠蒐集,那還要Logstash幹嘛!?Logstash主要的工作是把收到的資料,做特定的規則處理,例如Log內容如下:12017-03-3001:46:09,858[1]INFOMyWebsite.Global-Application_StartFilebeat是以純文字送給Elasticsearch,所以只能當字串查詢。

Logstash可以透過grok正則表示,把這筆Log拆分成好幾個欄位:123grok{ match=>["message","%{TIMESTAMP_ISO8601:logTimestamp}\[%{NUMBER:thread}\]%{DATA:logType}%{DATA:logger}-%{GREEDYDATA:detail}"]}logTimestamp(字串):2017-03-3001:46:09,858thread(字串):1logType(字串):INFOlogger(字串):MyWebsite.Globaldetail(字串):Application_Start字串不容易被統計,透過轉換成數值、日期或其它能被統計的格式,才能對Log做分析。

不要懷疑logTimestamp及thread真的是字串,GrokFilter及轉型可以參考這篇:ELK教學-LogstashGrokFilter建立欄位從Logstash官網下載rpm後,透過SCP或WinSCP放到/tmp/,執行以下指令安裝:12rpm-ivh/tmp/logstash-*.rpm/usr/share/logstash/bin/system-install4.1啟動安裝好後,執行以下指令啟動:1systemctlstartlogstash查看狀態:1systemctlstatuslogstash4.2設定透過vi或其他文字編輯器,新增Logstah的Filter設定檔:1vi/etc/logstash/conf.d/pipeline.conf輸入以下內容:1234567891011121314151617181920input{beats{port=>5044}}filter{grok{ match=>["message","%{TIMESTAMP_ISO8601:logTimestamp}\[%{NUMBER:thread}\]%{DATA:logType}%{DATA:logger}-%{GREEDYDATA:detail}"]}mutate{add_tag=>["logstash"]}}output{elasticsearch{hosts=>["http://localhost:9200"]index=>"%{[@metadata][beat]}-%{+xxxx.ww}"document_type=>"%{[@metadata][type]}"}}在output的部分index後面多了%{+xxxx.ww},這是為了把Log按每週區分。

(本篇不解釋)修改filebeat.yml1234567filebeat.prospectors:-input_type:logpaths:-C:\Logs\*.*log*output.logstash:hosts:["192.168.56.101:5044"]index:"my-second-index"改完重啟Logstash及FilebeatService,再到Log位置新增text.log檔,新增文字格式如:1232017-03-3001:46:09,858[1]INFOMyWebsite.Global-Application_Start2017-03-3001:46:10,311[1]INFOMyWebsite.Global-Application_Start-Done-Spendtime:[00:00:00.5069073]2017-03-3002:03:10,965[14]INFOMyWebsite.Global-Application_End用瀏覽器打開http://192.168.56.101:9200/_search?pretty,就可以查到資料了。

5.Kibana用瀏覽器查詢ElasticsearchAPI實在是很難閱讀,所以需要一個漂亮的圖形化工具,終於輪到Kibana登場了!從Kibana官網下載rpm後,透過SCP或WinSCP放到/tmp/,執行以下指令安裝:1rpm-ivh/tmp/kibana-*.rpm5.1啟動安裝好後,執行以下指令啟動:1systemctlstartkibana查看狀態:1systemctlstatuskibana5.2設定設定Kibana綁定的IP及Port。

1vi/etc/kibana/kibana.yml找到以下設定值:1234#綁定Port,預設其實就是5601server.port:5601#0.0.0.0表示綁定所有IPserver.host:"0.0.0.0"用瀏覽器打開http://192.168.56.101:5601設定index:設定完成後,就可以到Discover查詢Log了~總結本篇教學成果,是ELK常見的基本架構,資料流的流程如下圖:我個人認為導入ELK可以分為三個階段:第一階:把純資料送進ELK,用Kibana查詢取代原本開文字檔。

第二階:在Logstash寫進階一點的語法,從系統現行的Log解析出有意義的欄位。

當有數值欄位時,就可以用Kibana做分析圖表了。

第三階:重新檢視及定義系統的Log,讓Log從產出時就具備能被分析的價值。

除了需要在要蒐集Log的Server安裝Filebeat,完全不需要異動原來程式跟系統架構,立即就可以把Log蒐集到ELK,馬上就能查詢。

以我們產品為例,20幾台Server打給一組ELK,每分鐘最高可進18~20萬筆Log,查詢一天三千多萬筆Log不到5秒。

下每個查詢條件都不超過5秒就有結果,我相信這比純文字查看絕對快上千百倍。

補充:快速下載安裝本文範例VM無法連到外網,如果是使用可以連上網路的環境,能透過以下快速包下載及安裝:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647cd/tmp#下載jre-8u191-linux-x64.rpmwget--no-cookies--no-check-certificate\--header"Cookie:gpw_e24=http%3a%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Fjdk8-downloads-2133151.html;oraclelicense=accept-securebackup-cookie;"\"https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jre-8u191-linux-x64.rpm"#安裝jre-8u191-linux-x64.rpmrpm-ivhjre-*.rpm#下載elasticsearch-6.5.4.rpmwgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm#安裝elasticsearch-6.5.4.rpmrpm-ivhelasticsearch-*.rpm#下載logstash-6.5.4.rpmwgethttps://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.rpm#安裝logstash-6.5.4.rpmrpm-ivhlogstash-*.rpm/usr/share/logstash/bin/system-install#下載kibana-6.5.4-x86_64.rpmwgethttps://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-x86_64.rpm#安裝kibana-6.5.4-x86_64.rpmrpm-ivh/tmp/kibana-*.rpm#啟用服務systemctldaemon-reloadsystemctlenableelasticsearchsystemctlstartelasticsearchsystemctlenablelogstashsystemctlstartlogstashsystemctlenablekibanasystemctlstartkibana#增加防火牆規則firewall-cmd--add-service=elasticsearch--permanent#Logstashdefaultportfirewall-cmd--add-port=5044/tcp--permanent#Kibanadefaultportfirewall-cmd--add-port=5601/tcp--permanentfirewall-cmd--reload#刪除安裝檔rm-fjre-*.rpmrm-felasticsearch-*.rpmrm-flogstash-*.rpmrm-fkibana-*.rpmELKLogstashLinuxElasticsearchKibanaBeatsFilebeatnext:Angular4教學-MultipleModulesprev:Angular4FileStructure正在培養寫技術部落格的Web工程師,擅長ASP.NETMVC/WebAPI2、.NETCore、Angular網站開發,也略懂ELKstack及Jenkins應用。

目前正在學習敏捷軟體開發及Scrum。

前言VirtualBox1.Java2.Elasticsearch2.1啟動2.2設定2.3防火牆3.Beats3.1設定3.2啟動3.3測試3.4目前架構4.Logstash4.1啟動4.2設定5.Kibana5.1啟動5.2設定總結補充:快速下載安裝MicrosoftMVP2018-2020VisualStudioandDevelopmentTechnologies大內攻城-SoftwareEngineeringin.NET2020-12-25數學練習小程式2020-01-16.NETCore-在Mac開發階段發生ObjectDisposedException2019-10-29ASP.NETCore3系列-注入多個相同的介面(Interface)2019-10-29ASP.NETCore3系列-自行建置ServiceProvider2019-10-28ASP.NETCore3系列-程式進入點Main方法取得DI註冊的Services大內攻城粉絲團吳吉米-YouTube技術頻道Blackie-FailedNotesLarry-LevelupYowko-Yowko'sNotesJames-詹爸的隨手筆記Bruno-饅頭小舖MaxW.-RetrySamXiao-資料探索世界



請為這篇文章評分?