APM & Logging Services Part.1 — Cloudflare, Kibana visualization & Splunk search

Jen-Hsuan Hsieh (Sean)
A Layman
Published in
14 min readFeb 16, 2019

‘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.’

Copy right@A layman

Introduction

這陣子接觸到很多監控及Logging的服務,像reverse proxy服務如Cloudflare;像儲存traffics以做後續分析的服務,如Kibana; 像用來監控應用程式狀態對服務, 例New Relic; 負責logging的服務,例如Splunk及Loggly。使用起來雖不盡相同,但也十分類似。

這篇想先從Cloudflare,Kibana的視覺化及Splunk的搜尋開始寫起。

Copy right@A layman

Cloudflare

Source: https://www.cloudflare.com/zh-tw/

Cloudflare是Reverse proxy,其特色是散佈在世界各地的高效能server群(共有165個資料中心,處理能力為25Tbps),數量龐大得以分散掉外來攻擊如DDOS attack的壓力,並且具有以下優勢:

  1. 速度(Speed):
    Cloudflare有提供CDN緩存的服務,基本上有75%的requests不需要進到服務本身。
Source: https://www.cloudflare.com/zh-tw/

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為網路彼此間的交界。

Source: https://www.cloudflare.com/zh-tw/

以下為從官方文件中擷取的欄位定義:

Source: https://www.cloudflare.com/zh-tw/

Kibana search & visualization

一般來說ELK這個stack通常會被一起介紹, 分別代表

  • ElasticSearch
  • Logstash
  • Kibana

Logstash負責蒐集並將資料傳給ElasticSearch; ElasticSearch儲存資料並提供搜尋; Kibana則是將ElasticSearch的資料視覺化的介面。

由於先前已經了解Cloudflare的重要欄位,這邊遂假設Kibana已存有Cloudflare的資料為例,說明其視覺化資料的方式。

Source: https://www.elastic.co/cn/products/kibana

Search and query

由於視覺化時可能會需要用到搜尋條件過濾,因此先介紹基本的搜尋概念。

Copy right@A layman

1.Filter:
Add a filter中可以選擇data的欄位,舉例而言若想找traffic的host,則選擇”ClientRequestHost”,“is”,“abc.xxx.com”,則Kibana就會將host為abc.xxx.com的host的request過濾出來,要注意的是多個Filter條件間是以AND連結。

Copy right@A layman

更簡單的方式是從左邊的Filed list中按+號,便可以直接加入新的filter。

Copy right@A layman

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 (一定要大寫)。
Source: https://www.elastic.co/cn/products/kibana

4.Time picker:
可選擇時間範圍。

Visualization — Max response time chart

  • 選擇Visualize->Create new visualization,選擇Line。
Copy right@A layman
  • 需指定index,也就是資料來源。
Copy right@A layman
  • y軸為度量聚合: 選項有Count,Max,Min,Sum,Medium,在Aggregation選擇Max,並在Field選擇OriginResponseTimeSecs。
Copy right@A layman
  • X軸的Aggregation選擇Date histogram,並在Field選擇@timestamp,按下三角形後會產生Max OrignResponseTimeSecs的Line chart,但此時還是未區分Client host name的狀態。
Copy right@A layman
  • 向下拉選擇Split Series,Sub Aggregation選擇Terms,Field選擇ClientRequestHost.keyword,再次按下三角形。
Copy right@A layman
  • 現在就會依不同的Client host name逐一畫出線圖,下一個問題是我們可能只需要監控其中的兩個Host。
Copy right@A layman
  • 在Query bar中輸入查詢條件,例如ClientRequestHost:”abc.xxx.com” OR ClientRequestHost:”def.xxx.com”,並按下Refresh,這時就可以畫出指定的client host在不同時間的Max response time了。
Copy right@A layman

Splunk

Splunk是IT搜尋引擎及知識管理系統,老實說我覺得與許多的監控服務大同小異,也可以自訂圖表及Dashboard,但Splunk的特色是著重log檔的搜尋,分析,統計,報表,與警示等功能。

Splunk vs New Relic

New Relic是另一套跟Splunk很相似的SaaS服務,但用途跟發展趨勢稍有不同,其主要差異如下。

Copy right@A layman

Fields

這裡的資料來源是IIS log,重要欄位可參考下圖。

Copy right@A layman

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"
Copy right@A layman

時間條件

  • 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:

--

--

Jen-Hsuan Hsieh (Sean)
A Layman

Frontend Developer🚀 Angular • React • Nest • Electron • Micro-frontend • Monorepo Architecture • https://daily-learning.herokuapp.com/