APM & Logging Services Part.1 — Cloudflare, Kibana visualization & Splunk search
‘Headlee says that everyone is an expert in something. That’s why you should enter every conversation believing that you are going to learn something.’
Introduction
這陣子接觸到很多監控及Logging的服務,像reverse proxy服務如Cloudflare;像儲存traffics以做後續分析的服務,如Kibana; 像用來監控應用程式狀態對服務, 例New Relic; 負責logging的服務,例如Splunk及Loggly。使用起來雖不盡相同,但也十分類似。
這篇想先從Cloudflare,Kibana的視覺化及Splunk的搜尋開始寫起。
Cloudflare
Cloudflare是Reverse proxy,其特色是散佈在世界各地的高效能server群(共有165個資料中心,處理能力為25Tbps),數量龐大得以分散掉外來攻擊如DDOS attack的壓力,並且具有以下優勢:
- 速度(Speed):
Cloudflare有提供CDN緩存的服務,基本上有75%的requests不需要進到服務本身。
2. 彈性(Resiliency):
Anycast是一種網路定址及路由的方式,incoming requests可以被導到不同的節點,基本上Cloudflare或將incoming requests導到最接近使用者的data center. 即使某地區的節點offline,traffic也會自己找到最佳路徑。
3.減緩攻擊(Attack mitigation):
由於Cloudflare的特性,可以分散high traffic volume或是DDOS attack。
Fields
Cloudflare是在第一線面對高流量以及提供緩存的角色,因此會有記錄這些requests/responses的需求,以做為上線後debug時使用,可以參考文件的Field。
{
"CacheCacheStatus": hit,
"CacheResponseBytes" : 1,245,
"CacheResponseStatus" : 404,
"ClientIP": "138.163.241.42",
"ClientRequestHost": "xxx.abc.com",
"ClientRequestMethod": "GET",
"ClientRequestURI": "/shared/jquery.fancybox.css",
"ClientRequestReferer" : "xxx.cde.com",
"EdgeEndTimestamp": 2019-02-12T02:20:57Z,
"EdgeResponseBytes": 1099,
"EdgeResponseStatus": 404,
"EdgeStartTimestamp": 2019-02-12T02:20:57Z,
"OriginResponseBytes": 0,
"OriginResponseStatus": 0,
"OriginResponseTimeSecs" : 0,
"RayID": "4a7ad321bd1d9318"
}
以上是一些重要的欄位,若想找Request資訊可以找ClientRequest開頭的欄位; 而Response資訊有三種:Cache,Origin,Edge。
如果CacheCacheStatus為hit,表示給客戶的回應來自CDN的緩存,此時OriginResponse會是0; Edge device為網路彼此間的交界。
以下為從官方文件中擷取的欄位定義:
Kibana search & visualization
一般來說ELK這個stack通常會被一起介紹, 分別代表
- ElasticSearch
- Logstash
- Kibana
Logstash負責蒐集並將資料傳給ElasticSearch; ElasticSearch儲存資料並提供搜尋; Kibana則是將ElasticSearch的資料視覺化的介面。
由於先前已經了解Cloudflare的重要欄位,這邊遂假設Kibana已存有Cloudflare的資料為例,說明其視覺化資料的方式。
Search and query
由於視覺化時可能會需要用到搜尋條件過濾,因此先介紹基本的搜尋概念。
1.Filter:
從Add a filter中可以選擇data的欄位,舉例而言若想找traffic的host,則選擇”ClientRequestHost”,“is”,“abc.xxx.com”,則Kibana就會將host為abc.xxx.com的host的request過濾出來,要注意的是多個Filter條件間是以AND連結。
更簡單的方式是從左邊的Filed list中按+號,便可以直接加入新的filter。
2. Actions:
- Enable Filter: 讓filter disable但不移除它,再按一次則可enable。
- Pin Filter: 被pin的filter即使切換頁面還是會持續停在search bar。
- Invert Filter: 讓原來的filter反義。
- Remove Filter: 移除filter。
- Edit Filter: 編輯filter。
3.Query bar:
- String query: 將關鍵字用””框起,舉例若是想搜尋所有由Mozilla 5.0發起的HTTP request,則輸入”Mozilla/5.0”即可。
- Field-based query:用key:value的方式加上連結詞查詢, 連結詞可以是AND, OR,NOT,XOR,<,>, !=,==,LIKE (一定要大寫)。
4.Time picker:
可選擇時間範圍。
Visualization — Max response time chart
- 選擇Visualize->Create new visualization,選擇Line。
- 需指定index,也就是資料來源。
- y軸為度量聚合: 選項有Count,Max,Min,Sum,Medium,在Aggregation選擇Max,並在Field選擇OriginResponseTimeSecs。
- X軸的Aggregation選擇Date histogram,並在Field選擇@timestamp,按下三角形後會產生Max OrignResponseTimeSecs的Line chart,但此時還是未區分Client host name的狀態。
- 向下拉選擇Split Series,Sub Aggregation選擇Terms,Field選擇ClientRequestHost.keyword,再次按下三角形。
- 現在就會依不同的Client host name逐一畫出線圖,下一個問題是我們可能只需要監控其中的兩個Host。
- 在Query bar中輸入查詢條件,例如ClientRequestHost:”abc.xxx.com” OR ClientRequestHost:”def.xxx.com”,並按下Refresh,這時就可以畫出指定的client host在不同時間的Max response time了。
Splunk
Splunk是IT搜尋引擎及知識管理系統,老實說我覺得與許多的監控服務大同小異,也可以自訂圖表及Dashboard,但Splunk的特色是著重log檔的搜尋,分析,統計,報表,與警示等功能。
Splunk vs New Relic
New Relic是另一套跟Splunk很相似的SaaS服務,但用途跟發展趨勢稍有不同,其主要差異如下。
Fields
這裡的資料來源是IIS log,重要欄位可參考下圖。
Splunk IIS log search
在每個query前一定要先指定index
index="xxx-iis"
條件連結:
- AND,OR,NOT,XOR,<,>, !=,==,LIKE (一定要大寫),for example:
e.g., index=”xxx-iis” OR host = “xxx”
- 若沒有用條件連結則會被視為AND,for example:
e.g., index=”xxx-iis” OR host = “xxx”
- 如果條件為事件中的關鍵字,則不須指定欄位名稱,for example:
index="xxx-iis" "/swagger/ui/index"
時間條件
- earliest: 最近的時間/ latest: 最晚的時間/ now: 現在時間,for example:
index="xxx-iis" earliest=-24h latest=now
- 指定某個日期,for example:
index="xxx-iis" 2019-02-14
排序
- 取前10名
index="xxx-iis" | top limit=10 c_ip
計算數量
- for example:
index="xxx-iis" | stats count as c_ip
Summary
謝謝你耐心地讀到Summary,我是Sean HS, 是位軟體工程師。
這片文章是我在研究過程時的筆記,若有錯誤之處,期待您的見解,與您交流討論。
Related topics
[Software as a Service] Modern APM & Logging Services
[Golang] Build A Simple Web Service
[React.js] Build A React App
[DevOps] Ansible Provisioning for Windows: