在當前微服務架構流行情況下,對于初創企業,可能就幾個技術(2-20個不等),但是卻要開發十多個應用,要維護幾十臺云機器,甚至可能是混合云的模式。由于業務變化迅速,應用需要采用敏捷開發,針對這十來個應用怎么快速高效無誤的部署,出現系統異常能快速給出報警信息,快速定位問題并修復bug后重新部署上線,并且是在不影響線上服務的基礎上,這對技術團隊提出很高的要求。
傳統的開發模式和流程里面,這些工作需要開發人員和運維人員一起配合協作才能完成。但是實際上的效果不少特別好,因為開發人員對操作系統優化,監控報警并不熟悉,而運維人員不懂業務邏輯,不懂具體應用開發。所以針對這樣的情況,今年devOPS的概念和具體的實踐不斷被提出來。
行業內各巨頭(比如BAT)的自動化運維架構都各種功能各種酷炫,功能復雜,但是開發工作難度和強度也非常大,需要消耗大量的人力和財力。那么小團隊就沒有實現自己的devOPS了嗎?
答案當然是可以實現的。
筆者在一家小團隊,有10幾個開發人員,管理這幾十臺服務器和幾十個應用,在初期代碼的管理、應用的構建、部署發布、監控等都只能都人肉實現,需要不斷的到處救火,消耗了大量的開發人員的精力。好在有opensource,我們借助開源的力量慢慢形成了自己的一套devOPS體系,總體效果還不錯。
本文就是總結筆者在這方面一些經驗和實踐,希望對讀者有幫助。
對于監控和告警,現在市面上監控系統很多:Zabbix、Open-Falcon、Prometheus,最終選擇了 Prometheus,因為Prometheus生態強大,功能強大。
Prometheus 簡介
Prometheus 是一套開源的系統監控報警框架。它啟發于 Google 的 borgmon 監控系統,由工作在 SoundCloud 的 google 前員工在 2012 年創建,作為社區開源項目進行開發,并于 2015 年正式發布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成為受歡迎度僅次于 Kubernetes 的項目。
作為新一代的監控框架,Prometheus 具有以下特點:
強大的多維度數據模型:
插件多,想要監控什么,基本都會有現成的插件。
易于管理: Prometheus server 是一個單獨的二進制文件,可直接在本地工作,不依賴于分布式存儲。
高效:平均每個采樣點僅占 3.5 bytes,且一個 Prometheus server 可以處理數百萬的 metrics。
使用 pull 模式采集時間序列數據,這樣不僅有利于本機測試而且可以避免有問題的服務器推送壞的 metrics。
可以采用 push gateway 的方式把時間序列數據推送至 Prometheus server 端。
可以通過服務發現或者靜態配置去獲取監控的 targets。
有多種可視化圖形界面。
易于伸縮。
需要指出的是,由于數據采集可能會有丟失,所以 Prometheus 不適用對采集數據要 100% 準確的情形。但如果用于記錄時間序列數據,Prometheus 具有很大的查詢優勢,此外,Prometheus 適用于微服務的體系架構。
Prometheus基本原理
Prometheus的基本原理是通過HTTP協議周期性抓取被監控組件的狀態,任意組件只要提供對應的HTTP接口就可以接入監控。不需要任何SDK或者其他的集成過程。這樣做非常適合做虛擬化環境監控系統,比如VM、Docker、Kubernetes等。輸出被監控組件信息的HTTP接口被叫做exporter 。目前互聯網公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統信息(包括磁盤、內存、CPU、網絡等等)。
用Ansible 來Prometheus安裝
Ansible是一個自動配置管理工具,本文先不介紹了,以后有空再來做下介紹,ansible也是小團隊搭建devOPS的利器。
使用 Ansible 作為部署工具的一個好處是太多現成的 role 了,安裝 Prometheus 時,筆者使用的是現成的:
- prometheus-ansble (https://github.com/cloudalchemy/ansible-prometheus)
不過這ansible role需要linux支持systemd,centos6及以下操作系統安裝不了。可以采用二進制文件安裝的方式。
安裝所需各種exporter
比如需要采集操作系統系統,需要安裝node_exporter,當然安裝exporter也可以用ansible來實現。
安裝和配置監控可視化Grafana
Grafana是用于可視化大型測量數據的開源程序,它提供了強大和優雅的方式去創建、共享、瀏覽數據。
Dashboard中顯示了你不同metric數據源中的數據。
Grafana最常用于因特網基礎設施和應用分析,但在其他領域也有用到,比如:工業傳感器、家庭自動化、過程控制等等。
Grafana支持熱插拔控制面板和可擴展的數據源,目前已經支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。
具體安裝比較簡單,參照官網安裝即可。
安裝結束后登錄,默認用戶名密碼admin、admin
添加一個數據源
導入的模板會看到已經有各種圖,下圖筆者所在公司導入的node_exporter的監控圖
好了,有了監控數據后,我們就可以對數據進行可視化了,是不是很黑科技呢?并且告訴你這些監控圖是可以隨意定制的哦!
可是,我們不可能 24 小時盯著屏幕看 CPU 負載有沒有超吧?這時候就要上告警了。由于篇幅原因,下篇來說說告警(http://www.lxweimin.com/p/0dbece52b488)。