Prometheus+Grafana監控系統部署與使用

Prometheus 簡介

Prometheus是一套開源的監控&報警&時間序列數據庫的組合,起始是由SoundCloud公司開發的。隨着發展,越來越多公司和組織接受採用Prometheus,社區也十分活躍,他們便將它獨立成開源項目,並且有公司來運作。google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。

1)Prometheus的特點

強大的數據模型,Prometheus採集的監控數據均以metric的形式存放在內置的時序數據庫TSDB當中易於管理,因爲Prometheus的核心部分只有一個單獨的二進制文件,因此不存在任何的第三方依賴強大的查詢語言,Prometheus內置了一個強大的數據查詢語言PromQL, 通過它可以實現對監控數據的查詢與聚合高可用與可擴展,Prometheus的數據不僅可以存儲在本地,還可以使用遠程存儲,同時還可以使用第三方工具加上它的聯邦集羣來實現高可用``可視化平臺,Prometheus自帶了一個UI,不過較爲簡陋,但Grafana天然支持Prometheus,兩者完美結合,可以創建更加精美的數據監控圖標;

2)Prometheus數據採集方式

pull方式:該方式爲拉取形式,首先需要在Client安裝exporter,exporters以守護進程的模式運行,然後開始採集數據每個exporters程序爲一個單獨的http-server,因爲它可以對http的請求做出響應,並返回metric(K/V數據)而Prometheus-server則通過pull的形式去訪問每個節點上的exporter並採集所需要的數據,默認爲該方式;

push方式:該方式爲推送形式,如需使用push方式,則需在服務端或者客戶端上安裝pushgateway插件pushgateway我們可以將其理解爲一個代理,它位於客戶端與服務端之間pushgateway先接收指標,然後pushgateway再推送給prometheus-server,這裏的pushgateway不一定要安裝客戶端,也可以安裝在服務端甚至其它節點;

3)Prometheus的指標類型

指標的英文叫做metrics,metrics就是一組K/V數據,可以理解爲metrics是對採集過來的數據的一種統稱而非一個具體的數值或者指標,因爲指標的類型是多樣的,但實際在Prometheus-server當中並不對指標類型進行區分``而是簡單地把這些指標統一視爲無類型的時間序列,說到這裏,我們來看看metrics的指標類型有哪些;

1.Counter(計數器):從0開始累積計算,代表一種樣本數據單調遞增的指標,也就是它只增不減,除非監控系統發生了重置我們可以用這種類型的指標來表示服務器的請求數量,錯誤發生的總數量,已經完成的總數量在使用Counter類型時,不要將其應用於樣本數據非單調遞增的指標,比如說系統當前運行的進程數量,此時應該使用其它類型;

2.Gauge(儀表盤):它收集的數據是瞬時的,與時間沒關係,這種類型代表一種樣本數據可以任意變化的指標,也就是它不一定會持續增長,但也不一定會持續降低它的變化沒有規則,我們可以使用這種類型的指標來採集硬盤容量的使用率與內存使用率,同時也可以表示能隨時增加或者減少的總數,比如併發請求數量;

3.Histogram(直方圖):直方圖用於表示一段時間內的數據採集結果,並能夠對指定區間以及總數進行統計,它通常用來計算分位數的直方圖,比如說請求的持續時間或者響應的大小;

4.Summary(摘要):它和Histogram類型相似,用於表示一段時間內的數據採集結果,但是它直接存儲了分位數而不是通過區間來進行計算

Prometheus 優點

另外Prometheus還存在以下優點:
1.高效:單一Prometheus可以處理數以百萬的監控指標;每秒處理數十萬的數據點。

2.易於伸縮:通過使用功能分區(sharing)+聯邦集羣(federation)可以對Prometheus進行擴展,形成一個邏輯集羣;Prometheus提供多種語言的客戶端SDK,這些SDK可以快速讓應用程序納入到Prometheus的監控當中。

3.良好的可視化:Prometheus除了自帶有Prometheus UI,Prometheus還提供了一個獨立的基於Ruby On Rails的Dashboard解決方案Promdash。另外最新的Grafana可視化工具也提供了完整的Proetheus支持,基於Prometheus提供的API還可以實現自己的監控可視化UI。

4.監控更多多樣性**:prometheus支持多種語言的的客戶端,我們通過客戶端方便對核心業務進行埋點,比如下單,添加購物車等流程。
而且prometheus已經有非常多的系統集成;

比如:應用層面的監控:nginx,haproxy,mysql,docker等;
系統層面如: SNMP協議監控,主機監控,進程監控;
容器雲監控: docker,k8s openstack私有云;

5.非常高效的存儲 :平均一個採樣數據佔 ~3.5 bytes左右,320萬的時間序列,每30秒採樣,保持60天,消耗磁盤大概228G。

Prometheus 架構

此圖說明了Prometheus的體系結構及其一些生態系統組件: img

對照圖中的每一部分進行介紹:

  • 1.prometheus server: 用於收集和存儲時間序列數據。

  • 2.Retrieval:採樣模塊,prometheus的服務器在哪裏拉取數據,檢索拉取到的數據分發給 TSDB進行存儲;
    TSDB:存儲模塊默認本地存儲爲TSDB;
    HTTP server : 提供http接口查詢和麪板,默認端口爲9090;

  • 3.Service Discovery
    服務發現,prometheus支持多種服務發現機制: 文件,DNS,k8s,openstack,等,基於服務發現的過程,通過第三方接口,prometheus查詢到需要監控的target列表,然後輪詢這些target獲取監控數據;

  • 4.客戶端SDK
    官方提供的客戶端類庫有go,java,python,ruby;

  • 5.short-lived jobs
    存在時間不足以被刪除的短暫或批量業務,無法通過pull的方式拉取,需要使用push的方式,與pushgeteway結合使用;

  • 6.proDash
    使用rails開發的dashboard,用於可視化指標數據;

  • 7.Exporters:用於暴露已有的第三方服務的 metrics 給 Prometheus。

  • 8.Alertmanager:從 Prometheus server 端接收到 alerts 後,會進行去除重複數據,分組,並路由到對收的接受方式,發出報警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。

  • 9.Push Gateway:主要用於短期的 jobs。由於這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。爲此,這次 jobs 可以直接向 Prometheus server 端推送它們的 metrics。

  • 10.prometheus_cli:命令行工具;

Prometheus 的工作流程

  • prometheus server 定期從配置好的jobs或者exporters中拉metrics.或者接受來自pushgateway發過來的metrics,或者從其他的prometheus server中拉取metrics

  • prometheus server 在本地存儲收集到的metrics,並運行已經定義好的arlt.rules,記錄新的時間序列或者向alertmanager推送報警

  • Alertmanager根據配置文件,對接受的警報進行處理,發出告警

  • 在圖形界面中,可視化採集數據,可以使用別人寫好的grafana模板。

Prometheus 安裝部署

下載地址:https://github.com/prometheus/prometheus/releases/

[root@ chenc01 ~]# tar xf prometheus-2.16.0.linux-amd64.tar.gz 
[root@ chenc01 ~]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
[root@ chenc01 ~]# cd /usr/local/prometheus/
[root@ chenc01 prometheus]# pwd
/usr/local/prometheus
[root@ chenc01 prometheus]# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool  tsdb
[root@ chenc01 prometheus]# ./prometheus --version
prometheus, version 2.16.0 (branch: HEAD, revision: b90be6f32a33c03163d700e1452b54454ddce0ec)
  build user:       root@7ea0ae865f12
  build date:       20200213-23:50:02
  go version:       go1.13.8

# 後臺啓動普羅米修斯
[root@ chenc01 prometheus]# ./prometheus &
[1] 1920
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Prometheus 使用

1、訪問Prometheus

通過後臺訪問http://ip:9090

在這裏插入圖片描述

2、查看狀態

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

3、查看配置信息

在這裏插入圖片描述
在這裏插入圖片描述

4、查看運行信息

在這裏插入圖片描述

Grafana 簡介

Grafana是一款用Go語言開發的開源數據可視化工具,可以做數據監控和數據統計,帶有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。

Grafana還支持多種數據源,包括Elasticsearch,InfluxDB,MySQL,OpenTSDB,在部署和使用Grafana之前,我們先來看看Grafana的幾個基本術語 ;

1)Grafana的基本術語

1.DataSource(數據源):在上面我們說到了,Grafana支持多種數據源,包括但不限於Prometheus,而數據源通俗來講就是提供數據的對象,比如Zabbix,比如Prometheus

2.Dashboard(儀表盤):儀表盤就是一個呈現頁面,當我們添加好對應的數據源以後,這個時候就需要實現數據的可視化,在Grafana中,可以通過Dashboard來組織和管理數據可視化圖表;

3.Row(行):行是Dashboard的組成單元,一個Dashboard可以包含多個行,而一個行當中又可以展示一種或者多種信息的組合,比如負載狀態,內存使用率,磁盤使用率;

4.Panel(面板):面板我們可以理解爲是Row展示信息的方式,它支持表格(tables),列表(alert list),熱圖(heatmap),在Grafana當中,所有的面板均以插件的形式進行使用;

5.Query Editor(查詢編輯器):查詢器的作用是指定獲取哪一部分的數據,這個有點類似於SQL語句,但我們如果添加的數據源爲Prometheus,那實際上使用的爲PromQL;

6.User(用戶):用戶和我們平常登錄系統的用戶概念一樣,Grafana中包含三種角色,分別爲admin,editor,viewer,read only editor在這其中,admin的權限最高,它可以執行如何操作,editor只能創建DashBoard,viewer只能查看DashBoard,read only editor可以修改DashBoard,但不允許保存;

7.Organization(組織):在Grafana當中,DataSource與Dashboard屬於一個組織,每個用戶可以擁有多個不同的組織,在不同的組織當中,可以爲不同的用戶賦予不同的權限需要知道的是,不同組織之間的數據源和儀表板都不同,每當在Grafana當中創建一個組織,就相當於開啓了一個全新的視圖,這時候所有的數據源與儀表盤等內容都要重新去添加和配置

Grafana 安裝部署

1)下載軟件包並安裝Grafana

首先登陸grafana官網,選擇需要版本進行下載rpm包,下載鏈接爲:Grafana官網下載路徑

`[root@prometheus ~]# wget -c https:``//dl.grafana.com/oss/release/grafana-6.6.2-1.x86_64.rpm``[root@prometheus ~]# yum -y install /root/grafana-6.6.2-1.x86_64.rpm`

2)熟悉Grafana的配置文件

Grafana的默認配置文件爲:/etc/grafana/grafana.ini,其配置項有700多行,多數爲默認即可,下面來看看幾個常用的配置項

[root@ chenc01 ~]# vim /etc/grafana/grafana.ini
[paths]
# 定義數據存儲路徑,用來存儲sqlite3,臨時文件
data = /var/lib/grafana
 
# 在data目錄中的臨時數據要存儲多久,默認爲24h,也可以
temp_data_lifetime = 24h
 
# 定義日誌存儲路徑
logs = /var/log/grafana

# 定義插件存儲目錄
plugins = /var/lib/grafana/plugins
 
[server]
# 定義訪問的協議,默認爲http
protocol = http

# 定義監聽的IP地址,默認爲所有
http_addr = 10.2.3.11

# 定義監聽的端口,默認爲3000
http_port = 3000

# 定義在瀏覽器中訪問Grafana的全路徑,默認即可,也可以寫成http://ip:port
root_url = %(protocol)s://%(domain)s:%(http_port)s/

# 是否記錄web請求日誌,默認爲關閉
router_logging = false

# 前端靜態文件的存儲路徑,默認爲/usr/share/grafana/public目錄
static_root_path = public

# 選擇數據庫類型,默認爲sqlite3,也可以選擇MySQL
[database]
type = sqlite3

# 定義連接地址與端口
host = 127.0.0.1:3306

# 定義數據庫名稱
name = grafana

# 定義連接用戶
user = root

# 定義連接密碼
password = 123

# 關閉SSL
ssl_mode = disable

# 這裏只是sqlite3需要,定義sqlite3的數據存儲路徑,默認爲/var/lib/grafana目錄
path = grafana.db
 
[users]
# 是否允許普通用戶登錄,默認爲允許
allow_sign_up = true

# 是否允許普通用戶創建組織,默認爲允許
allow_org_create = true

# 如果爲true,則自動把新增的用戶增加到id爲1的組織中,如果爲false,則新建用戶的時候會新增一個組織 ,默認爲true
auto_assign_org = true

# 默認的背景頁面,也可以選擇light
default_theme = dark

3)定義Grafana的配置文件

[root@ chenc01 ~]# cp /etc/grafana/grafana.ini /etc/grafana/grafana.ini.bak
[root@ chenc01 ~]# vim /etc/grafana/grafana.ini
[paths]
data = /var/lib/grafana
temp_data_lifetime = 24h
logs = /var/log/grafana
plugins = /var/lib/grafana/plugins
provisioning = conf/provisioning
 
[server]
protocol = http
http_addr = 10.2.3.11
http_port = 3000
root_url = %(protocol)s://%(domain)s:%(http_port)s/
serve_from_sub_path = false
router_logging = false
static_root_path = public
enable_gzip = true
 
[users]
allow_sign_up = true
allow_org_create = true
auto_assign_org = true
default_theme = dark

4)啓動Grafana並設置爲開機自啓

[root@ chenc01 ~]# systemctl enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@ chenc01 ~]# systemctl start grafana-server
level=info ts=2020-03-28T06:28:07.583Z caller=compact.go:496 component=tsdb msg="write block" mint=1585366069255 maxt=1585368000000 ulid=01E4FX6YNHTQPYGTEKNJ9TCH2E duration=3.110826386s

level=info ts=2020-03-28T06:28:07.682Z caller=head.go:661 component=tsdb msg="head GC completed" duration=72.63582ms
[root@ chenc01 ~]# systemctl status grafana-server
● grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-03-28 14:28:09 CST; 4s ago
     Docs: http://docs.grafana.org
 Main PID: 17041 (grafana-server)
   CGroup: /system.slice/grafana-server.service
           └─17041 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/...

Mar 28 14:28:08 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=..."
Mar 28 14:28:08 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=..."
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=..."
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=...s
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...s
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...e
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...p
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=..."
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...=
Mar 28 14:28:09 localhost.localdomain systemd[1]: Started Grafana instance.
Hint: Some lines were ellipsized, use -l to show in full.

Grafana 使用

1)訪問Grafana

提示:訪問的用戶名與密碼爲admin,第一次登錄會被要求更改密碼

在這裏插入圖片描述
在這裏插入圖片描述

2)Grafana基本配置

1)添加數據源

提示:這裏選擇Prometheus作爲數據源,如果選擇的數據源爲Zabbix,則需要安裝插件

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2)查詢儀表盤

提示:這裏進入官網,直接複製ID即可,當然也可以下載,然後再Grafana中上傳JSON文件

在這裏插入圖片描述

3)添加儀表盤

提示:選擇添加以後,將剛剛複製的ID粘貼進去即可自動識別

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4)展示數據

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章