導航
感謝您的閱讀,預計閱讀時長3min。 智客工坊出品必屬精品。
引子
網際網路時代,一切以網際網路為核心,IT的邊界被完全開啟,IT系統不再是為企業內部管理提供支撐,而是為億萬網際網路使用者提供各種線上服務。因此,IT部門成為了網際網路企業的核心,而保障線上業務持續、穩定執行,也是網際網路企業的第一使命。
故障發生時,要求網際網路運維能夠第一時間發現問題,並快速定位問題。依靠人工巡檢的傳統運維管理方式嚴重落後,因此,自動化運維逐漸流行。這就對網際網路運維工程師的開發能力提出了更高的要求,熟悉Python之類的指令碼語言只是基礎,玩得轉各種開源監控系統,能夠根據業務特點和企業需求定製開發自動化監控和告警工具。
今天我們就來一起認識一個開源監控工具——Prometheus
在開始之前,我們先來欣賞一下prometheus監控報表圖:
前言
什麼是Prometheus?
Prometheus是最初在SoundCloud上構建的開源系統監視和警報工具包。自2012年成立以來,許多公司和組織都採用了Prometheus,該專案擁有非常活躍的開發人員和使用者社群。現在,它是一個獨立的開源專案,並且獨立於任何公司進行維護。為了強調這一點並闡明專案的治理結構,Prometheus於2016年加入了雲原生計算基金會,這是繼Kubernetes之後的第二個託管專案。
從全域性視角瞭解雲原生生態可以直接看CNCF全景圖。
特性
Prometheus的主要特性:
- 一個多維資料模型,其中包含通過度量標準名稱和鍵/值對標識的時間序列資料
- PromQL,一種可利用此維度的靈活的查詢語言
- 不依賴分散式儲存;單伺服器節點是自治的
- 時間序列收集通過HTTP上的拉模型進行
- 通過中間閘道器支援推送時間序列
- 通過服務發現或靜態配置發現目標
- 多種圖形和儀表板支援模式
元件
Prometheus生態系統包含多個元件,其中許多是可選的:
- Prometheus server主伺服器,它會抓取並儲存時間序列資料
- client libraries,用於檢測應用程式程式碼
- push gateway,一個支援短期工作的推送閘道器
- 諸如HAProxy,StatsD,Graphite等服務的exporters
- alertmanager,一個處理警報的報警器
- 各種各樣的支援工具
架構
下圖說明了Prometheus的體系結構及其某些生態系統元件:
Prometheus直接或通過中介推送閘道器從已檢測作業中刪除指標,以處理短暫的作業。它在本地儲存所有報廢的樣本,並對這些資料執行規則,以彙總和記錄現有資料中的新時間序列,或生成警報。Grafana或其他API使用者可以用來視覺化收集的資料。
什麼時候適合?
Prometheus可以很好地記錄任何純數字時間序列。它既適用於以機器為中心的監控,也適用於高度動態的面向服務的體系結構的監控。在微服務世界中,它對多維資料收集和查詢的支援是一種特別的優勢。
Prometheus的設計旨在提高可靠性,使其成為中斷期間要使用的系統,以使您能夠快速診斷問題。每個Prometheus伺服器都是獨立的,而不依賴於網路儲存或其他遠端服務。當基礎結構的其他部分損壞時,您可以依靠它,並且無需設定廣泛的基礎結構即可使用它。
什麼時候不合適
Prometheus重視可靠性。即使在故障情況下,您始終可以檢視有關係統的可用統計資訊。如果您需要100%的準確性(例如按請求計費),則Prometheus並不是一個好的選擇,因為所收集的資料可能不夠詳細和完整。在這種情況下,最好使用其他系統來收集和分析資料以進行計費,並使用Prometheus進行其餘的監視。
環境準備
環境準備
運維自動化已經不再是新鮮名詞,特別是隨著Devops思想的影響下,越來越多的網際網路產品公司已經開始搭建屬於自己的運維自動化平臺,甚至個別公司已經走在了AIDevOps實踐的路上。
早些年,網際網路產品公司很多都要自建運維平臺(財大氣粗的公司),相關文章可以檢視《運維自動化平臺之路》,但是隨著雲服務的普及,雲服務廠商也提供了更多運維付費服務(當然是收費的,價格也是不菲的)。比如,阿里雲的日誌服務,早期我們是需要自己搭建ELK的。但是,很多公司基於成本考慮,亦或是有一些自定義的需求,會選擇一些開源運維繫統,比如,jenkins來實現自動化部署,grafana,prometheus來做一些監控等。
本教程基於prometheus+grafana+mysqld_exporter來搭建mysql監控服務。
Prometneus伺服器
- 一臺centos 7 雲伺服器
- 安裝Prometneus
- 安裝grafana
被監控伺服器
- 一臺centos 7 雲伺服器,作為資料儲存伺服器
- 安裝了mysql資料庫
- 安裝mysqld_exporter
Notes: 為了更加接近生產環境,建議選擇雲伺服器,不要使用虛擬機器。
本教程伺服器配置如下:
- Linux 伺服器版本
- 記憶體
- cpu 資訊
安裝Docker
Prometneus伺服器
上一章節,我們已經提到Prometneus伺服器。
- 一臺centos 7 雲伺服器
- 安裝docker
- 安裝Prometneus
- 安裝grafana
我們希望在該機器上安裝Prometneus和grafana,然後通過他們管理和檢視監控物件的報表。呈現結果如下:
yum安裝docker
我們使用docker來安裝Prometneus,所以首先得安裝docker。
Notes: 安裝步驟最好是參照docker官網。https://docs.docker.com/engine/install/centos/
(1) 解除安裝本機安裝的所有版本的docker,如果機器之前沒有安裝過docker,可以跳過這步。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(2) 在新主機上首次安裝 Docker Engine-Community 之前,需要設定 Docker 倉庫。之後,您可以從倉庫安裝和更新 Docker。
設定倉庫
安裝所需的軟體包。yum-utils 提供了 yum-config-manager ,並且 device mapper 儲存驅動程式需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
(3) 使用以下命令來設定穩定的倉庫(這裡推薦國內阿里雲的源)
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4) 安裝dokcer engin
$ sudo yum install -y docker-ce-cli
(4) 啟動docker
$ sudo systemctl start docker
(5) 檢測docker是否安裝成功
$ sudo docker run hello-world
還可以通過檢測docker是否安裝成功
$ docker -v
也可以通過檢視docker 狀態
$ systemctl status docker
(6) 設定開機啟動docker服務
$ systemctl enable docker