Prometheus監控系統的從無到有


 

Prometheus是什么

Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成為社區開源項目,

擁有非常活躍的開發人員和用戶社區。為強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算

基金會(CNCF),成為繼Kubernetes之后的第二個托管項目。

 

https://prometheus.io

https://github.com/prometheus

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM