iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
1
Elastic Stack on Cloud

ES 新手,破門而入!!!系列 第 2

【ES新手,破門而入!】Day2 - Logging 芝麻開門

  • 分享至 

  • xImage
  •  

你可以學到?

今天,你將學到如何使用 Elastic Cloud(後面簡稱 EC)從你的應用程式讀入、閱讀和分析一般的日誌(logs),日誌搭配指標(metrics)和 APM traces,都是在建構系統的可觀察性方面上,非常重要的元素。

本篇的主題包含有:

  1. 什麼是日誌(logs)?
  2. 串流(Streaming)日誌到 Elastic
  3. 不使用模組(module)的支援來串流非結構化(Unstructrued)的日誌

那我們就開始吧!

測錄(Logging)和可觀測性(Observability)

可觀測性(Observability)

  • 可觀測性:是一種利用外部輸出的內容來衡量內部系統狀態方法,這不僅僅只是用來監測,也包含了和發生在系統中事件的互動,藉由向問題根源詢問特定的問題。

舉例來說,如果系統中一個程序(process)失敗了,我會想知道它到底為什麼失敗,以便我可以修正防止未來再次遇到這個問題;然而,可觀測性的概念不僅僅於此,對於同一個失敗的程序,我還想更進一步的知道:哪一個顧客/使用者被影響了、他們怎麼應對,以及造成了多少的金錢損失,這就從技術層面的觀測拓展至了商業層面上。

觀測四本柱:Logging、Metrics、APM、Uptime

一個可觀測的系統,會由四個重要的支柱所構成:

  1. 測錄(logging)
  2. 指標(metrics)
  3. 應用效能監測(application performance monitoring, APM)
  4. 正常運行時間(uptime)

觀測四本柱

那麼 Elasticsearch(之後簡稱ES) 在可觀測性上提供了什麼樣的解決方案呢?很好的問題!你可以將所有觀測到的內容,送進 ES 中,並且使用 Kibana 來視覺化、分析你的觀測資料。

什麼是日誌(logs)?

  • 日誌(log):是一個紀錄或是事件包含有一段訊息,其中並含有該紀錄或事件發生的時間戳記(timestamp)。

當日誌有著共同的格式(format)時,就可以使用一個叫做 Filebeat 的模組,快速地將日誌送進 ES 做分析

舉例來說,今天你收到數筆資料如下圖示,那麼你可能會想要分析的部分就會有:IP、時間、函數名稱...等等,接下來的實作,將會帶你使用 EC 來對日誌做簡單的送入、分析。

動手實作 EP1:使用 Elastic Cloud 做簡單的日誌分析

Elastic Cloud 基本登入

  1. 進入 EC 頁面,並登入自己的帳號:https://cloud.elastic.co/home
  2. 進入後就會看到可以讓你設定部署的地方摟!

創造一個部署

  1. 隨意填一個測試部署的名稱,這邊我就用:test_logging
  2. 隨意選擇想要的雲端服務空間,這裡我就選:GCP
  3. 選擇伺服器位置,既然身在台灣,就葬在台灣吧!

  1. 下面優化部署的部分,推薦選擇 I/O Optimized,都好了之後就可以按下 Create Deployment 囉!

  1. 等待一下(數秒~數分鐘),創建成功會跳出一組帳號密碼,用來讓你存取 ES 和 Kibana,記得按下 Download 按鈕下載下來,以便我們後面設定 Filebeat 會用到歐!

初探 Kibana

  1. 進入創建好的頁面後,馬上可以看到大大的 Open Kibana 按鈕,讓我們先從這邊開始吧!

  1. 按下後,會開啟一個新的視窗,並且跳出歡迎的訊息,我們先來自己探索一下,按下 Explore on my own

  1. 進入後,就會看到各種讓你眼花撩亂的功能、按鈕,別緊張,我們今天只關心日誌(logs),因為一開始就先選擇 Add sample data ,然後 Add data 添加裡面的 Sample web logs 吧!

  1. 等待一下後,會看到按鈕變成 View data,按下去選擇 Logs,就可以看到日誌的資料摟。

  1. 進到 Logs 頁面,有幾個地方你可以試著玩玩看,第一個是左上的搜索條(Search bar),可以輸入你有興趣的關鍵字,如 morzilla,看會找到什麼結果,第二個是中上的 Highlights,可以突顯、強調你想要看的文字內容,有興趣的讀者可以試試看有什麼好玩的效果!

  1. 接著我們到最左上角三條線的地方,點一下,來看看儀表板 Dashboard 有什麼有用好玩的功能吧!按下後,會看到剛才的 Sample 資料,點選一下 Web Traffic 進去。

  1. 一進來資料的儀表板後,哇!裡面各種華麗圖表,好炫砲啊,相信這樣的圖表拿去給老闆看,應該今年加薪 3% up 不是問題了(吧?)!

串流(Streaming)日誌到 Elastic

這一部分的實作,我們將可以學到:

  • 如何下載並在本機端安裝 Filebeat
  • 如何設置預先建好的儀表板
  1. 回到 EC 首頁,這次我們選擇 Add log data,裡面的 System logs

  1. 裡面可以選擇對應的 OS,因為我是用 macOS,所以就選擇它囉

  1. 用下面指令,在 terminal 下載與安裝 Filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.0-darwin-x86_64.tar.gz
tar xzvf filebeat-7.9.0-darwin-x86_64.tar.gz
cd filebeat-7.9.0-darwin-x86_64/

  1. 安裝好後,我們先看看資料夾裡面有什麼檔案,裡面有接下來我們要設定的 filebeat.yml 這個檔案,把我們 EC 的資訊加進去裡面,而其中的 <password> ,就填入剛才下載下來 EC 的帳號密碼。

cloud.id: "test_logging:YXNpYS1lYXN0MS5nY3AuZWxhc3RpYy1jbG91ZC5jb20kOWE3ZjdjMzkzYjY0NGNkZWE3ZTM5Y2JjZjZjYTNiZGIkYmY2MTcyMDlmZmVmNDM3MWE0NWE0YzEzMWQwYzg3M2M="
cloud.auth: "elastic:<password>"

  1. 啟動並設定系統模組
./filebeat modules enable system

  1. 若是第一次連結,需要先使用 setup 指令來讀取 Kibana 儀表板;若已經連接過儀表板,就直接執行 Filebeat 就可以了。
# 第一次連結才需要執行
./filebeat setup 
# 啟動 Filebeat
./filebeat -e

  1. 按下 Check data,檢查連結是否正確,這樣就差不多啦!接下來就是視覺化資料的部分了。

  1. 從儀表板(Dashboards)中,我們可以選擇到很多已經建立好的樣板,我們選擇其中一種和 system 有關的來看看,感覺還不賴,但是如果想要再加一些別的東西呢?


  1. 別擔心,我們還可以從左邊的 Visualize 選進去,裡面也有各式各樣的視覺化(Visualizations)任君挑選!


不使用模組(module)的支援來串流非結構化(Unstructrued)的日誌

前面的實作是一般常見的日誌格式,可以輕鬆的藉由 Filebeat 送進 ES 做分析,然而大人的世界總是這麼地複雜,如果格式不是那麼單純的話,那該怎麼辦呢?沒關係,大人的問題就用大人的方法來解決吧!嘿嘿嘿嘿...

這一部分的實作,我們將可以學到:

  • 如何使用 Data Visualizer 來上傳一個檔案
  • 如何使用由 Data Visualizer 產生的組態設定在本地端的 Filebeat 組態設定
  • 如何使用 Elastic Logs 來查看日誌
  1. 先下載練習用的 log 檔案(ES官方提供):https://98c6c14acce.s3.eu-central-1.amazonaws.com/logging/quick_start/myapp.log
  2. 到 EC 的首頁,選擇上傳日誌檔案 Upload data from log file

  1. 接著在 Data Visualizer 內,選擇上傳一開始下載的 myapp.log 檔案

  1. 上傳完成後,可以看到 myapp.log 的部分檔案內容,特別值得注意的是在 Summary 中的 Grok pattern 部分,是使用機器學習將上傳的日誌內容做分析,可以想像成是一種類似正規表示法(Regular Expression)的方式,這邊也可以體會到機器學習的妙用啊!我們試著自己修改部分設定,按下 Override settings

  1. 將最後面整數的部分從原本的 field 改為 linenumber 試試看,按下 Apply


  1. 眼尖的你一定發現了,Grok pattern 的部分,最後面依據我們的修改變成了 linenumber 了!接著我們要將 myapp.log 檔案輸入進去,按下畫面左下角的 Import 按鈕。


  1. 輸入你想要取的索引名稱(index name),這邊我就取做 myapp_log,然後按下 Import 按鈕,

  1. 等待幾秒後(等待時間取決於檔案內容的多寡,因為這是練習用的檔案,內容其實很少),可以看到下面會顯示出整個流程的狀態,都完成後,我們按下 Create Filebeat configuration ,來看看 Data Visualizer 產生的組態設定吧!


  1. Data Visualizer 產生的組態設定,可以用來作為修改本地端的 Filebeat 組態設定的參考,打開剛才裝載 Filebeat 路徑下的 filebeat.yml 檔案,在下面的輸入設定區添加如下內容,路徑 path 的部分,就填上一開始下載 myapp.log 檔案存放的路徑。

  1. 最後來看看我們設定完後,有沒有成功串流非結構化(Unstructrued)的日誌,點開左邊的面板,選擇 Observability 下的 Logs,把想看的 Log indices 改成剛才建立的 myapp_log


  1. 因為練習用的檔案,時間戳記是在 2020 年 4 月 15 日,所以要記得把右上的時間區間選擇一下,就可以看到了!

大功告成~可喜可賀!有沒有注意到日誌檔案紀錄的內容,時間都集中發生在早上 6:00 左右,莫非...日誌也有早起的習慣嗎!?哈哈哈哈哈!!!

今日心得與短結

哇!沒想到官網寫 15 分鐘的影片內容,看完整理之後,竟然有這麼多啊...第二天就這麼硬,後面情況不太樂觀啊!!!能看完本篇的你,相信一定也是非常有病不簡單,了不起

今天我們學到了如何將日誌,透過本地端的 Filebeat 與雲端的 Elastic 和 Kibana 連接,送進 EC 上做分析和視覺化結果,明天我們將要來了解指標(Metrics)是蝦米東東!


上一篇
【ES新手,破門而入!】Day1-簡介與規劃
下一篇
【ES新手,破門而入!】Day3 - Hello,Metrics
系列文
ES 新手,破門而入!!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言