一:簡介
1.Prometheus 的介紹
Prometheus是一套開源的監控&報警&時間序列數據庫的組合,起始是由SoundCloud公司開發的。隨着發展,越來越多公司和組織接受采用Prometheus,社區也十分活躍,他們便將它獨立成開源項目,並且有公司來運作。google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在 最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。
2.Prometheus 的優點:
(1)配置靈活
使用過zabbix的同學應該都體驗過安裝時候的安裝依賴包的痛苦,而premetheus核心部分只有一個單獨的二進制文件,下載解壓安裝即可, 沒有依賴的第三方庫
(2)監控的多樣性
prometheus支持多種語言的的客戶端,我們通過客戶端方便對核心業務進行埋點,比如下單,添加購物車等流程。
而且prometheus已經有非常多的系統集成
比如:
應用層面的監控:nginx,haproxy,mysql ,docker等
系統層面如:SNMP協議監控,主機監控,進程監控
容器雲監控:docker,k8s openstack私有雲
(3)非常高效的存儲
平均一個采樣數據占 ~3.5 bytes左右,320萬的時間序列,每30秒采樣,保持60天,消耗磁盤大概228G
二:prometheus的架構
對照圖中的每一部分進行介紹:
·prometheus server
主要負責數據的采集和存儲,提供PromQL查詢語言支持
Retrieval:采樣模塊,prometheus的服務器在哪里拉取數據,檢索拉取到的數據分發給 TSDB進行存儲
TSDB:存儲模塊默認本地存儲為TSDB
HTTP server : 提供http接口查詢和面板,默認端口為9090
·short-lived jobs:
存在時間不足以被刪除的短暫或批量業務,無法通過pull的方式拉取,需要使用push的方式,與pushgeteway結合使用
·Service Discovery:
服務發現,prometheus支持多種服務發現機制:文件,DNS,k8s,openstack,等,基於服務發現的過程,通過第三方接口,prometheus查詢到需要監控的target列表,然后輪詢這些target獲取監控數據
·客戶端SDK
官方提供的客戶端類庫有go,java,python,ruby
·pushgateway
支持臨時性的job主動推送指標的中間網關,prometheus默認通過pull方式從exporters拉取,但有些情況我們是不允許promethes與exporters直接進行通信的,這時候我們可以使用pushgateway由客戶端主動push數據到pushgateway,在由prometheus拉取。很多時候我們需要自定義一些組件來采集
·proDash
使用rails開發的dashboard,用於可視化指標數據
·exporters
支持其他數據源的指標導入到prometheus,支持數據庫,硬件,消息中間件,存儲系統,http服務器,jmx等
負責收集目標對象的性能數據,並通過http接口供prometheus server獲取
只要符合接口格式,就可以被采集
·alertmanager
實驗性組件,用來進行報警
·prometheus_cli
命令行工具
三:prometheus的工作流程
1.prometheus server 定期從配置好的jobs或者exporters中拉metrics.或者接受來自pushgateway發過來的metrics,或者從其他的prometheus server中拉取metrics
2.prometheus server 在本地存儲收集到的metrics,並運行已經定義好的arlt.rules,記錄新的時間序列或者向alertmanager推送報警
3.Alertmanager根據配置文件,對接受的警報進行處理,發出告警
4.在圖形界面中,可視化采集數據,可以使用別人寫好的grafana模板。
部署前說明
prometheus 服務端一台主機
grafana 服務端一台主機
prometheus和grafana可以安裝在同一主機上
node_exporter和mysqld_exporter 被監控的主機插件一台主機
我是在做演示,所以全部安裝在同一台主機上
四:prometheus 部署
1.安裝前准備
安裝前先檢查一下時間是不是同步,不同步的話會導致數據收集不到,會報錯
[root@localhost ~]# date
2020年 08月 31日 星期一 12:19:18 CST
我是還原快照,所以時間並不同步
解決辦法:
命令如下:
# yum -y install ntp
# ntpdate time1.aliyun.com #同步阿里雲時間
# hwclock -w #將系統時間賦值給硬件時間,有些時候 硬件時間會比系統時間快8個小時
關閉防火牆和selinux
# systemctl stop firewalld && setenforce 0 && iptables -F
准備安裝包
prometheus-2.6.1.linux-amd64.tar
grafana-7.1.5-1.x86_64
node_exporter-0.17.0.linux-amd64.tar
mysqld_exporter-0.12.1.linux-amd64.tar
官網下載地址https://prometheus.io/download/
2.開始安裝部署
命令如下:
# tar -zvxf prometheus-2.6.1.linux-amd64.tar.gz
# mv prometheus-2.6.1.linux-amd64 /usr/local/prometheus
# cd /usr/local/prometheus/
# ./prometheus & #后台啟動
然后通過瀏覽器訪問:http://192.168.20.100:9090
web網頁介紹
http://IP:9090
查看監控目標
可以看到系統默認監控了自己的主機信息,監控接口通過http://IP:9090/metrics 可以直接看到監控數據,如下圖:
prometheus默認監控圖像,如下圖:
在圖2的位置輸入process_cpu_seconds_total ,可以查看到cpu的使用情況
3.實例:監控linux主機
需要在被監控的主機安裝node_exporter插件,是prometheus來收集數據
在官網上下載node_exporter-0.17.0.linux-amd64.tar安裝包
命令如下:
# tar -zvxf node_exporter-0.17.0.linux-amd64.tar.gz
# mv node_exporter-0.17.0.linux-amd64 node_exporter
# cd node_exporter
# nohup ./node_exporter &
nohup 是 Linux 的一個常用命令,當你想要在退出賬戶或者關閉終端 后進程仍在運行時,就可以使用 nohup 命令。nohup 就是不掛斷的意思(no hang up)
在瀏覽器上查看監控信息 http://IP:9100/metrics
配置prometheus server端文件 prometheus.yml 可以拉取node信息
# vim /usr/local/prometheus/prometheus.yml
將以下內容添加到文件最后
- job_name: 'agent'
static_configs:
- targets: ['192.168.20.100:9100']
注意:一定格式正確,否則服務重啟不了 IP應該填寫的是被監控主機的IP,我是把服務端客戶端做在同一主機上了
添加完成后重新啟動prometheus
命令如下:
# pkill prometheus
# cd /usr/local/prometheus/
# ./prometheus &
然后通過web可以看見兩台,如下兩張圖
監控mysql需要在被監控機器安裝mysql_exporter
mysql_exporter下載地址:https://prometheus.io/download/mysqld_exporter-0.12.1.linux-amd64.tar.gz
命令如下:
# tar -zvxf mysqld_exporter-0.12.1.linux-amd64.tar.gz
# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter
# cd /usr/local/mysqld_exporter/
# yum -y install mariadb\* (這里mariadb數據庫為參考)
# systemctl start mariadb && systemctl enable mariadb 啟動並設置開機自啟
在數據庫里創建mysql賬號用戶收集數據
# mysql
MariaDB [(none)]> grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '12345678';
MariaDB [(none)]> flush privileges;
注意:此處是prometheus服務器來找mysql_exporter,然后mysql_exporter 在找mariadb,所以這里用的是localhost,指的是mysql_exporter的ip
在mysql_exporter中設置mysql配置信息
命令如下:
# cd /usr/local/mysqld_exporter
# vim .my.cnf (手工創建)
[client]
user=mysql_monitor
password=12345678
啟動mysql_exporter
# nohup ./mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &
配置prometheus拉取mysql節點信息
在prometheus的server端進行修改
# vim /usr/local/prometheus/prometheus.yml
- job_name: 'mariadb'
static_configs:
- targets: ['192.168.20.100:9104']
重啟prometheus服務
命令如下:
# pkill prometheus
# cd /usr/local/prometheus/
# ./prometheus &
然后在web網頁中刷新一下,會出現三台
知識擴展:
prometheus.yml配置文件詳解
global:
# 全局配置
scrape_interval: 15s # 多久收集一次數據
evaluation_interval: 15s # 多久評估一次規則
scrape_timeout: 10s # 每次收集數據的超時時間
# Alertmanager configuration #告警設置
alerting:
alertmanagers:
- static_configs: #告警規則,也可以基於動態方式進行告警
- targets:
rule_files: #規則文件
#收集數據配置列表
scrape_configs:
- job_name: 'prometheus'
五:Grafana介紹
Grafana是開源的度量分析和可視化工具,,可以通過將采集的數據查詢然后可視化的展示,並實現報警。它主要有以下六大特點:
(1)展示方式:快速靈活的客戶端圖表,面板插件有許多不同方式的可視化指標和日志,官方庫中具有豐富的儀表盤插件,比如熱圖、折線圖、圖表等多種展示方式;
(2)數據源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
(3)通知提醒:以可視方式定義最重要指標的警報規則,Grafana將不斷計算並發送通知,在數據達到閾值時通過Slack、PagerDuty等獲得通知;
(4)混合展示:在同一圖表中混合使用不同的數據源,可以基於每個查詢指定數據源,甚至自定義數據源;
(5)注釋:使用來自不同數據源的豐富事件注釋圖表,將鼠標懸停在事件上會顯示完整的事件元數據和標記;
(6)過濾器:Ad-hoc過濾器允許動態創建新的鍵/值過濾器,這些過濾器會自動應用於使用該數據源的所有查詢。
1.安裝grafana
下載地址:grafana官網下載
# wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
# yum -y install grafana-7.1.5-1.x86_64.rpm
啟動服務並設置開機自啟
# systemctl start grafana-server && systemctl enable grafana-server
在瀏覽器上訪問http://IP:3000 用戶名和密碼默認是admin
2.添加數據源(prometheus的數據源)
點擊齒輪的圖標,可以看到剛才添加的prometheus的數據源信息信息
3. 現成模板添加版
先要找到模板的添加碼:
模板網址: https://grafana.com/grafana/dashboards
4.點擊“+”里面的import選項
點擊后就會看到當前服務器監控信息:
可以看到已經添加了相關的模板之后,圖表就非常漂亮,省去了我們人工的一些操作,當然grafana還有一些比較高級的功能,官網上也有介紹,比如定制變量,定制圖形模板等。