ELK 教學- 從無到有安裝ELK (CentOS/Red Hat)
文章推薦指數: 80 %
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-資料探索世界
延伸文章資訊
- 1[elk] 教學與介紹
[elk] 教學與介紹. 上網打關鍵字「什麼是elk?」,都會介紹說elk 是elasticsearch + logstash + kibana 三兄弟stack 起來的服務。
- 2以ELK進行視覺化分析資安設備日誌
- 3今夜,先來個開場,什麼是ELK Stack?
ELK是一個簡單但功能強大的日誌管理和分析平台,價格卻僅為其一小部分。 我公司的運維主管,透過快速的教學,已經能讓我的同事們(客服)都會觀看Kibana ...
- 4ELK 安裝教學|Elasticsearch 線上及離線安裝
- 5如何開始搭建Elastic Stack及使用方式介紹-下- 偉康科技洞察室
.env: ELK版本參數. docker-compose.yml: container相關設定 ... ELK應用場境 ... ELK在Machine learning上異常偵測必知的教學設定...