目前有一個新興的概念在雲計算時代下發展起來了,叫做可觀測性,英文是“observability”,這個說法其實來自於控制論(Cybernetics),而控制論起源於 1948 年諾伯特·維納 Nobert Wiener 發表的著作《控制論-關於動物和機器中控制和通訊的科學》。
控制理論中的可觀察性(observability)是指系統可以由其外部輸出推斷其內部狀態的程度。系統的可觀察性和可控制性是數學上對偶的概念。可觀察性最早是匈牙利裔工程師魯道夫·卡爾曼針對線性動態系統提出的概念,若以信號流圖來看,若所有的內部狀態都可以輸出到輸出信號,此系統即有可觀察性。
這並不是一個新概念。在這個概念進入到計算機軟件領域前,我們其實是通過監控這種方式去保障系統整體的穩定性,計算機領域很少有人提及可觀測性。
實際上這里存在一個誤區,因為如果我們要完成對一套計算機系統的監控,那么監控的就是計算機所產生的數據,而監控的前提就是被監控對象要能夠產生可被觀測的指標等數據。如果指標或者數據少,即我們可觀測的數據少,監控帶來的價值和意義就會變得少。根據控制論的對偶性概念,也就意味着我們控制這個系統的能力也較差。
比如,我們僅僅能監控到一台服務器是否正常,那么只能判斷這台服務器的狀態,完全無法觀察到上面的操作系統的狀態;
如果我們僅監控操作系統的指標,那么我們只能判斷操作系統的狀態,完全無法判斷安裝在這個操作系統之上應用的狀態;
如果要監控應用,那就需要每個應用本身具備可觀測性,否則我們也就只能從操作系統的角度判斷這個應用是否在運行。
所以,監控是一個動作,其前提條件是被監控的對象要具備可觀測性,而且有更多的可觀測數據,也就意味着我們能更好地掌控整個系統。
為什么今天對可觀測性的要求變得越來越高,越來越迫切呢?
我們先來看看計算機和監控軟件的發展史。
計算機和監控軟件發展史
01 計算機發展史
02 監控軟件發展史
監控軟件發展歷程
01 單機電腦時代
最早的電腦大部分是單機運行的,沒有網絡概念。那個時候在操作系統層面上就帶着很多的工具軟件,來保障我們能夠知道和觀測這個操作系統的運行狀態。對於 Windows 用戶來說,最著名的就是任務管理器了,而 Linux 也有一堆類似 Top、PS 等命令,幫助我們知道操作系統的運行狀態。一部分應用為了方便排查問題,設計出了以輸出文本記錄應用運行情況的“日志”這種形態,如 windows 的事件關聯,Linux 中的 syslog。這個時期,我們是通過操作系統本身和應用本身的一些功能,來了解並掌控這個系統的。
02 局域網時代
隨着時代的進步,計算機進入了局域網時代,出現了 C/S 架構(Client/Server)。在這種情況下,出現了將局域網中的一台計算機變成服務器(服務器,顧名思義就是服務別人的機器),那么與之對應的就是客戶端通過與該服務器進行數據交互,來實現各種業務的需求,這樣客戶端之間就可以通過服務器協同起來了。
隨后,開始出現早期的分布式系統。
最早分布式系統的訴求是高可用,因為一旦服務器故障,客戶端就無法正常工作了。后面發現可以通過不同的服務器處理不同的客戶端的請求來改變這種狀況。隨着連接的客戶端增多,業務的復雜性變大,“集群”的概念出現了。當時人們將服務器放在一起,通過交換機、路由器等網絡設備串聯起來。此時的監控需求就變化了,隨着需要管理的服務器變多,人們不可能隨時登陸到每一台服務器上面去巡檢系統的狀態,於是乎面向集群的監控軟件便出現了,比如 Zabbix。
Zabbix 使用了 C/S 架構,將操作系統中的可被觀測的數據收集過來統一查看,包括根據收集的數據對閾值(即某個值大於或者小於一定的值)進行告警(Alert)。但由於 Zabbix 誕生的年代整體計算機性能並不強,能收集的系統數據少,無法收集更完整的數據,Zabbix 的收集顆粒度就比較粗。並且由於性能原因,日志數據通常也是在 Client 端(Zabbix agent)判斷后(比如日志關鍵字中包含某些內容),再作為信號傳輸到 Zabbix 的 Server 端。
因此,Zabbix 作為一個簡單的監控軟件,且開源免費,獲得了很大的普及,直到今天仍然有大量用戶。但其本身僅僅面向系統固有的簡單可觀測性指標采集,以及通過腳本方式處理信號的模式也成了它最大的局限。
在 Zabbix 開始流行時,也有一些同類型的軟件,由於處理能力的不同,有些側重於網絡,有些側重於特種軟件,如數據庫專門的監控軟件。與此同時,一個產品悄然問世了——Splunk,其目的是將日志數據能夠從集群中收集過來,最終統一處理統一分析。這個數據量就非常恐怖了。Splunk 也因為其特殊的存儲結構和算法,而且相較於 Zabbix,他能完整地收集數據,和分析處理這些海量數據,很多時候人們也把 Splunk 當作一種數據庫對待。
03 互聯網時代
時間不停歇,技術不斷發展,互聯網出現了,一種統一客戶端產品的瀏覽器問世(最初來自於 Netscape 網景),出現一種統一的內容展示形態——Web,其利用了 HTML 語言(一種文本),而瀏覽器恰恰是 HTML 語言解析器,將文本變成了可視化的網頁,並且網景一開始就提供了一種讓靜態的文本協議動態化的編程小語言(JavaScript)。
隨着這個技術出現了一個概念叫 B/S(Brower/Server 瀏覽器/服務器),即瀏覽器作為統一的客戶端與服務器進行交互。由於互聯網的興起和越來越多的用戶接入,出現了大量的基於 Web 技術的 WebSite 網站。當時如果人們要創建自己的網站,網站一端是放在服務器上,通過瀏覽器作為統一客戶端來獲取服務器提供的服務。
最初的形態是將個人電腦接入互聯網,通常只有具備互聯網地址的大學才有可能使用,而隨着互聯網越來越發展,電信運營商提供了一種統一將服務器接入互聯網的方式——IDC(互聯網數據中心,而與之相對的傳統大規模存放服務器,並且用專線連接各個辦公室的被稱為數據中心)。
數據中心最初的用戶都是國家、銀行、電信公司等,為滿足其內部業務而開始使用,后面互聯網公司也出現了,他們將應用服務通過互聯網向全世界提供。互聯網上的服務器變得越來越多,系統也變得越來越復雜,有些公司如網易也開始提供類似網站托管服務,讓用戶可以快速擁有一個 WebSite,而不需要到 IDC 托管服務器(這也是雲計算的前身)。
04 移動互聯網時代
這個時候出現了一個偉大的公司——Google,將快速增長的 WebSite 用搜索引擎的方式,以爬蟲(也是客戶端)的方式去掃描整個互聯網網站,對其內容進行索引,然后提供給人們通過搜索的方式快速找到自己想訪問的內容。
同一時刻,大量的互聯網應用誕生,有即時通訊,有小說網站,有互聯網游戲,相對應的是背后的系統復雜度越來越高,服務器集群規模也越來越大。期間,有一個程序員為了幫助妻子更快地搜索菜譜,創造了 ElasticSearch(一個搜索引擎技術),並且為此成立了公司。
只不過最終 Elastic 公司並沒有去做下一個 Google,而是與 Splunk 成為了對手,推出了 ELK 方案(ElasticSearch、Logstash、Kibana)和 Splunk 競爭海量的日志數據收集管理的事情。此時此刻隨着計算機能力的提升和技術的發展,海量日志的處理已經變得有可能了,ELK 作為開源軟件成為了非常流行的選擇,Splunk 作為商業軟件也快速發展,與 ELK 都被視為基於日志的監控高效解決方案。
大規模的互聯網應用又催生了 CDN 技術,將用戶訪問的內容以緩存方式分布到不同物理位置的服務器上來為最終用戶訪問加速。與此同時一種新的監控方式開始出現——撥測,即網站或者互聯網服務的提供者,為了確保自己的網站或服務是監控的,需要模擬自己是客戶端的方式去訪問自己的網站或服務,以確保網站是健康的無異常的,同時還可以分析網站在不同區域的訪問加速情況,以確認 CDN 工作是否正常。
2007 年,蘋果發布了偉大的產品 iPhone,這個產品的誕生徹底改變和加速了互聯網的發展。Google 的 Android 也針鋒相對地推出。無線通訊技術的高速發展,人類快速進入了移動互聯網時代。移動互聯網帶來了兩個改變,第一個由於喬布斯對於體驗極致追求,加上當時移動設備的計算能力,Apps 這種在移動操作系統上統一的客戶端悄然出現(我們會將 Program 指 PC 上的應用,而用 App 來指代移動端的應用);而另一個改變更加巨大,全球大量的設備接入了互聯網,大量的用戶,大量的訪問。
同時一種大規模管理海量服務器的方式被發明,Vmware 最早推出了虛擬化的方案,從最初的只是解決個人的電腦適配不同的操作系統,到后來發展為將一個物理服務器集群以軟件方式分割來創造更多的虛擬機(virtual machine)來提升服務器的利用率。而在 2006 年,亞馬遜就開始利用這項技術悄然推出了一個互聯網服務 AWS(Amazon Web Service),最初是其利用亞馬遜作為電商網站的大量數據中心中的閑置服務器來提供一種網站的大規模托管服務,今天這個服務已經被人們稱之為雲計算了。
隨着游戲變成了互聯網游戲,有了互聯網的視頻網站,有了全國甚至全球性質的電商、打車、外賣等互聯網服務,企業級軟件也開始以 Paas、SaaS 的方式,通過互聯網加瀏覽器或者移動客戶端(App)的方式提供服務了。而為了滿足互聯網的各種各樣的服務,以及移動設備帶來的不同的應用形態,大量的新形態的數據庫、消息隊列、中間件被創造出來了,包括 NoSQL,其實就是一系列滿足特定場景需要的數據庫,而單一的關系型數據已經不滿足客戶的需求了(數據庫歷史也很長,就不展開了)。
隨着大量的用戶出現,每個用戶在不同的互聯網應用的使用過程中又產生了大量的數據,人們為了分析處理這些數據,大數據這個概念也就出來了。包括最近幾年隨着用戶對於服務的提升和更迭的訴求,以及互聯網推送更新的流行,互聯網公司的開發測試環節也變得越來越敏捷了,傳統的一個應用程序開發需要大量測試才能發布的一個版本的方式越來越難以被接收,Devops 概念出現了。尤其最近幾年,為了進一步讓應用更敏捷,更方便管理,容器技術和為了適應容器技術的雲原生概念出現了(雲原生是基於容器編排框架 Kubernetes 構建的生態軟件的統稱)。
回到文章的正題,這個時候人們為了進一步提升應用性能,提出了一個 APM 的概念(Application Performance Moniter),旨在通過數據收集的方式將服務端和客戶端的代碼執行情況統一地收集起來,不僅僅是解決故障的問題,更為了提升應用的性能,比如 New Relic、Dynatrace、AppDynamic 就推出了相應的 APM 服務。但這也帶來了一個問題,由於最初控制論描述的,一個復雜的互聯網的 IT 服務需要全面被觀測起來才能完整地掌控這套系統,因此需要大量的監控類產品,從基礎設施、雲、雲原生、數據庫、中間件、大數據、撥測到安全。
需要觀測的對象從原先的服務器變成虛擬機再到現在的容器,我們需要觀測更多的數據庫中間件,我們需要觀測包括像 AWS 一樣的雲服務,甚至不同的應用部署在不同的雲廠商上,老舊的 Zabbix 已經完全無法承擔監控這么多的需要觀測的對象。
在開源世界里為了解決這么多海量的數據觀測問題,基於時序數據庫的監控軟件開始出現,如 Prometheus、Telegraf+InfluxDB,APM 則出現了像 ZipKin、Jaeger、Pinpoint、Skywalking 這些軟件,如果我們要完整地觀測一個互聯網系統,需要大量的各種形態的開源監控產品進行組合使用,而在商業世界里,統一的平台成為了方向,DataDog 作為 SaaS 化的全方位的可觀測監控服務橫空出世,目前已是全球市值最高的 IT 監控管理類廠商;ELK 也不僅僅是一個日志平台,也推出了包括 ELK APM 等功能;Splunk 也不想把自己停留在僅僅是處理日志的產品上,因此收購了 DataDog 的主要競爭對手 SignalFX;而 New Relic、Dynatrace、AppDynamic 也開始將自己不僅僅定位成單一的 APM 廠商,而是進一步提供完整的可觀測能力。同時 OpenTelemetry 這個組織的出現也標志着業界意識到需要將系統的可觀測性變成一種統一的標准和規范,提出了可觀測性的三支柱的概念,即 Metric(指標),Log(日志),Trace(鏈路追蹤),其目標是推動更多的應用或者服務能夠遵循這一規范,提供相應的可觀測性能力。
寫到這里基本上是把整個計算機監控和可觀測性的發展史粗略地講了一遍,但是可能大家對什么是可觀測性,以及其余監控的區別並沒有分得很清楚。事實上可觀測性強調的是服務器、雲服務、應用程序本身需要主動地將可觀測性三支柱能夠以某種形式提供出來,如開源的 Prometheus 提出一種叫 Exporter 的概念,號召所有的中間件、應用能夠主動地將指標(Metric)暴露出來給監控軟件調用,與此同時也需要有軟件支持讀取提供的可觀測性數據,並對其進行進一步地性能分析和監控。
計算機已經發展這么久,而可觀測性標准僅僅在最近一兩年才被提出,因此要想讓所有的系統支持可觀測性是不可能的,最新的開源的數據庫 Tidb 就默認開放了自己的可觀測性接口,而老牌的 MySQL 則沒有。這也是 DataDog 這家公司強大的地方,一方面他提供了 DataDog Agent,能夠方便、專業地實現大量系統的可觀測性的接口,使得不具備可觀測性的系統快速具備可觀測性,另一方面他也提供了相應的服務處理海量可觀測性的數據,將這些可觀測性數據可視化,並提供分析以及告警等功能。但開源世界就沒這么容易,比如 Prometheus、Telegraf 有大量的不成熟甚至存在安全隱患的愛好者開發的開源 Exporter,而大部分軟件工程師也不可能自己去完成對於自己系統的可觀測性的完整適配。
因此,與傳統的監控軟件或產品相比較,我們可以稱具備可觀察性能力產品有兩個要素,一是能夠將需要監控的對象變得可觀測(收集其指標、日志和代碼鏈路),二是能夠存儲、處理、分析這些海量的實時數據。
監控和可觀測性發展史到此就寫得差不多了,大家可以看到,這種特定的產品發展和計算機本身的發展以及互聯網的發展是密不可分的。未來會這么樣?我只能說人類的系統會變得越來越復雜,我們即將面對更多的互聯網設備接入(IOT 技術下的物聯網,工業互聯網),同時會有更多的新的雲技術、數據技術出現,而這些設備和新的技術也需要具備可觀測性,以及能夠監控管理他們的監控產品。為了保障一個個復雜多元的系統穩定,監控和可觀測性也將不斷的發展。
DataFlux 作為駐雲科技推出的雲時代的可觀測性平台也是隨着歷史的潮流和用戶的需求應運而生。
更多精彩分享關注駐雲 DataFlux 官網呀~
