# 前言 & 淺談 Observability

## 參賽背景

去年參加第 12 屆的 iT邦幫忙鐵人賽，在飽受煎熬的度過 30 天之後，沒想過會要再參加下一屆，今年在經歷超過 100 次想放棄的念頭之後，在 9/15 最後一天報名截止日，填了報名表單，按下了送出，於是在 9/16 當天開始動筆寫下這篇文章。

(你沒看錯，就是學不會教訓，第二次參賽了還不懂得要先累積一些文章…)

本來少女人妻這次想落跑，今年換我把他推進坑！(不知她是誰的，她是我們上一屆的團長、也是推我入鐵人坑的兇手!)

今年除了我們去年團隊的三個成員，另外多找了三位新成員，總共六人報名，要團體完賽的難度加倍…夥伴們加油！也歡迎大家多鼓勵餵食我們！

## 什麼是 Observability (可觀察性) ?

最近幾年，特別是 2019\~2020 年時，Observability 這個字變得非常的熱門，一方面微服務架構的普及化，傳統的系統服務監控方式開始發現不足以應付這樣複雜的系統，另一方面 DevOps 的理念及各種實踐方法也愈來愈被大家重視，因此如何能有效的掌握系統的運作狀態，也就被受重視。

針對 Observability 字面上可以簡單的解讀為：

> 透過系統外部所揭露資訊的觀察，能有效的掌握到系統內部的運作狀態

有不少針對 Monitoring (監控) 與 Observability (可觀察性) 進行比較的討論，有人覺得根本是一樣的，這個 observability 只是個 buzzword，而我這邊和大家分享一下我自己對於這兩個字的解讀。

Monitoring，可以比喻像是我們透過心電圖、心跳、血壓…等各種方式來掌握一個人的生命狀態，透過身體本身就會產生的各種訊息，來**觀察**我們身體的狀態，用來**解讀**甚至能**監控**我們身體健康情況，一但有異常就能即時發現，甚至是可以當作生病時找尋病源的參考資訊。

Observability，重點是 Observable (**可被觀察的**)，如果今天是一個鋼鐵人，身穿盔甲，我們從外部測不到心跳、心電、血壓，這樣也就缺少了可被觀察的能力。

也就是說，讓身體的數據可以被取得、可以被觀察，也就是 Observability，並且因為有這樣的能力，我們也才有辦法做 Monitoring，因此若只是使用一堆 Monitoring 的工具，把系統的資訊給拉成一個個的 Dashboard，這樣並不適合叫做提升 Observability，而透過工具讓本來很不容易取得的資訊，能更容易的被觀察、分析、監控，甚至在服務或應用程式的設計上，將有被觀察意義的資訊給揭露出來，讓負責維護系統的人能有效的掌握系統狀況、盤查問題，這才是有效的提升系統的 Observability。

另外參考 Google Cloud Architecture Center 中 DevOps Guides \[1] 對針這兩個詞的定義：

**Monitoring** is tooling or a technical solution that allows teams to watch and understand the state of their systems. Monitoring is based on gathering predefined sets of metrics or logs.

**Observability** is tooling or a technical solution that allows teams to actively debug their system. Observability is based on exploring properties and patterns not defined in advance.

有提到一個重點，就是『事先定義』，Observability 也就是擁有能夠探索未事先定義的屬性與模式的能力。

## 此系列文章的目的

這次會以 Observability 當作主題，主要是喬叔自己在軟體領域 20 多年來，在實務中深感 Observability 的重要，因此希望一方面透過這個主題，能將這方面的經驗與觀念整理出來，另一方面也想透過寫這篇文章時，能再次精煉我自己對於 Elastic Stack 的熟練程度，因此這系列會以 Elastic Stack 來當作提升系統 Observability 的解決方案，另外不會去和其他的競品比較，在這邊要先要解釋一下，Elastic Stack 絕對不會是唯一合適的選擇，而我會選擇他，是因為他提一個整合度、生態圈都蠻完整的整體解決方案，最重要的是能較快速的將好的理念實現出來，能實際幫助到團隊、產品、客戶，盡快產生出實際的價值，希望這系列的文章能幫助到有需要的人。

## 參考資料

1. [Google Cloud Architecture Center - DevOps Guides](https://cloud.google.com/architecture/devops/devops-measurement-monitoring-and-observability)
