Prometheus是什么
Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成為社區開源項目,
擁有非常活躍的開發人員和用戶社區。為強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算
基金會(CNCF),成為繼Kubernetes之后的第二個托管項目。
https://prometheus.io
Prometheus特點:
• 多維數據模型:由度量名稱和鍵值對標識的時間序列數據
• PromSQL:一種靈活的查詢語言,可以利用多維數據完成復雜的查詢
• 不依賴分布式存儲,單個服務器節點可直接工作
• 基於HTTP的pull方式采集時間序列數據
• 推送時間序列數據通過PushGateway組件支持
• 通過服務發現或靜態配置發現目標
• 多種圖形模式及儀表盤支持(grafana)
Prometheus組成及架構
• Prometheus Server:收集指標和存儲時間序列數據,並提供查詢接口
• ClientLibrary:客戶端庫
• Push Gateway:短期存儲指標數據。主要用於臨時性的任務
• Exporters:采集已有的第三方服務監控指標並暴露metrics
• Alertmanager:告警
• Web UI:簡單的Web控制台
1、首先,核心是一個Prometheus Server服務端,然后它默認會定時的通過http的方式去拉取客戶端的數據,或者對於一些短期的任務可以通過Push Gateway組件由客戶端推送到Push Gateway,然后server端去拉取Push Gateway的存儲的數據。
2、再接收到數據后,普羅米會把數據存儲在TSDB(時間序列數據庫)中,不需要依賴於其他存儲,當然,在大規模的應用中,其本身的存儲是遠遠不夠的,所以我們需要配置存儲路徑來存儲數據。--storage.tsdb.path=/data/prometheus/prometheus/data/ 在啟動普羅米時用這個參數配置存儲路徑
3、對於普羅米的服務發現功能(service discovery),普羅米內置了很多配置可以幫助我們更好的去監控我們的客戶端,比如說file_sd,可以通過文件去發現主機,並打上各種標簽便於管理和區分。目前,普羅米對於kubernetes是市面上最為兼容的監控器,我們可以通過簡單地配置就可以管理上kubernetes里的所有主機,這也普羅米興起的一個重要原因。
4、普羅米內置了很多http api,其他產品都可以通過api來獲取普羅米的數據,比如說grafana通過PromSQL去獲取數據以便展示。
5、普羅米在獲取了數據后,我們需要有個機器人能幫助我們一直監控這些數據的健康狀態,那么就需要一個報警組件altermanager,通過2遍的配置對接后,alertmanager對數據進行監控,並可以通過郵件、微信等方式發送告警。
監控系統的搭建
服務器配置:
系統:centos 7.x
Cpu:4核
內存:16G
主目錄:/data/prometheus/
prometheus
1、安裝
二進制部署:https://prometheus.io/docs/prometheus/latest/getting_started/
Docker部署:https://prometheus.io/docs/prometheus/latest/installation/
訪問Web:http://localhost:9090
cat prometheus.yml
scrape_interval:收集數據間隔
evaluation_interval:評估規則間隔
alerting:配置連接alertmanager
rule_files:監控規則文件的目錄
scrape_configs:定義監控的項目及配置
file_sd_config:基於文件發現規則
2、配置后台服務
vim /usr/lib/systemd/system/prometheus.service
########################################
[Unit]
Description=Prometheus server daemon
[Service]
ExecStart=/data/prometheus/prometheus/prometheus --config.file=/data/prometheus/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/prometheus/data/
Restart=on-failure
[Install]
WantedBy=multi-user.target
###########################################
systemctl daemon-reload
systemctl start Prometheus
安裝grafana展示數據
1、安裝
https://grafana.com/grafana/download
2、添加data sources
3、添加或創建展示頁
這里我用的是別人創建好的頁面(id:8919),如果不滿意,我們可以把這個導出json格式,然后修改再導進去生成新的展示頁
3、 用PromSQL創建我們想要展示的數據
node_online_keepalive{instance=~"$node"}
安裝alertmanager
1、安裝
地址1:https://prometheus.io/download/
地址2:https://github.com/prometheus/alertmanager/releases
2、配置后台服務,與普羅米一樣,看前面
/data/prometheus/alertmanager/alertmanager --config.file=/data/prometheus/alertmanager/alertmanager.yml
3、配置文件
Alertermanager配置路由和接收者
Prometheus配置告警規則
4、配置普羅米與alertmanager通信
普羅米定義監控規則,把告警傳給alertmanager,alertmanager根據路由選擇發送方式
5、告警狀態
• Inactive:這里什么都沒有發生。
• Pending:已觸發閾值,但未滿足告警持續時間
• Firing:已觸發閾值且滿足告警持續時間。警報發送給接受者
6、告警收斂(分組,抑制,靜默)
分組(group):將類似性質的警報分類為單個通知
抑制(Inhibition):當警報發出后,停止重復發送由此警報引發的其他警報
靜默(Silences):是一種簡單的特定時間靜音提醒的機制
客戶端數據的采集方案
需求:由於項目需求,我們往往需要采集exporter不能采集到的數據,那么用go在短時間內定制exporter和后期交接的維護都會存在時間成本,所有我們可以用通過node_exporter --collector.textfile.directory參數,用shell或者python來收集數據。
流程:
1、所有客戶端都安裝一個node_exporter,我們通過node的接口讓普羅米來拉數據
/data/prometheus/node_exporter/node_exporter --collector.textfile.directory=/data/prometheus/node_exporter/textfile_collector --web.listen-address=:9999
2、新建數據采集腳本(不能帶有exit等退出的語句,原因后期講到)
cd /data/prometheus/node_exporter/textfile_scpripts/
vim node_online_keepalive
3、創建調度
vim /data/prometheus/node_exporter/cron.d/cron_node_exporter_textfile_common
#如果搭服后調度沒運行了,那么把下面幾步都加在搭服腳本中吧
chown root:root cron_node_exporter_textfile_common chmod 644 cron_node_exporter_textfile_common
ln -s /data/prometheus/node_exporter/cron.d/cron_node_exporter_textfile_common /etc/cron.d
systemctl restart crond
4、創建runner腳本批量運行采集腳本
cat /data/prometheus/node_exporter/textfile_scpripts/runner
5、查看有無收集到數據
cat /data/prometheus/node_exporter/textfile_collector/node_online_keepalive.prom
web界面查看metrics