avatarJen-Hsuan Hsieh (Sean)

总结

网页主要介绍了APM(应用性能管理)和日志服务的三个关键组件:Cloudflare、Kibana和Splunk,以及它们在监控和日志分析中的应用。

摘要

文章首先引用了Headlee的话,强调在对话中学习的重要性。接着,文章介绍了Cloudflare作为反向代理服务的特点,包括其全球分布的高效服务器群(165个数据中心,处理能力为25Tbps),以及它在速度、弹性和攻击缓解方面的优势。文章详细说明了Cloudflare的日志字段,并通过示例展示了如何使用这些字段进行调试。

文章随后介绍了ELK堆栈中的Kibana,它用于将ElasticSearch存储的数据可视化。作者解释了Kibana中的搜索和查询功能,包括如何添加过滤器、使用查询栏以及如何进行时间选择。此外,文章通过创建一个最大响应时间图表的示例,展示了如何使用Kibana进行数据视觉化。

最后,文章讨论了Splunk,它是一个集成了搜索、分析、统计、报告和警报功能的IT搜索引擎。文章对Splunk与New Relic的区别进行了比较,并提供了如何在Splunk中进行IIS日志搜索的示例,包括条件连接、时间条件和排序等操作。

观点

  • Cloudflare的分布式网络可以有效缓解DDOS攻击的压力,并通过CDN缓存加快请求响应速度。
  • Kibana的强大视覺化工具可以帮助开发者更好地理解和分析ElasticSearch中的数据。
  • Splunk专注于日志文件的搜索和分析,它提供了灵活的查询语言和强大的数据可视化功能,有助于IT运维和监控工作。
  • APM和日志服务是现代软件开发和运维中不可或缺的部分,它们可以帮助团队更快地发现和解决问题,优化系统性能。
  • 通过学习和使用这些工具,开发者和运维人员可以更有效地管理和监控他们的应用程序和服务。

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

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:

Cloudflare
SaaS
Splunk
Kibana
DevOps
Recommended from ReadMedium