prometheus+grafana監控mysql最佳實踐

導航

感謝您的閱讀,預計閱讀時長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官網。//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 \
    //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