一.Prometheus介紹
Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成爲社區開源項目,擁有很是活躍的開發人員和用戶社區。爲強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算基金會(CNCF),成爲繼Kubernetes以後的第二個託管項目。
https://prometheus.io
https://github.com/prometheus前端
做爲新一代的監控框架,Prometheus 具備如下特色:
• 多維數據模型:由度量名稱和鍵值對標識的時間序列數據
• PromSQL:一種靈活的查詢語言,能夠利用多維數據完成複雜的查詢
• 不依賴分佈式存儲,單個服務器節點可直接工做
• 基於HTTP的pull方式採集時間序列數據
• 推送時間序列數據經過PushGateway組件支持
• 經過服務發現或靜態配置發現目標
• 多種圖形模式及儀表盤支持
Prometheus適用於以機器爲中心的監控以及高度動態面向服務架構的監控。node
二.Prometheus部署
轉載:https://blog.gmem.cc/prometheus-study-note
1.安裝環境:
server1:centos7.6 主節點 190.168.3.250
server2:centos7.6 節點1 190.168.3.251mysql
爲您的平臺下載最新版本的Prometheus,而後解壓縮並運行它:linux
https://prometheus.io/download/nginx
https://prometheus.io/docs/prometheus/latest/getting_started/git
2.二進制安裝
tar xvfz prometheus-2.15.0.linux-amd64.tar.gz
cd prometheus-2.15.0.linux-amd64
mv prometheus-2.15.0.linux-amd64 /usr/local/prometheusgithub
啓動
./prometheus --config.file=prometheus.ymlweb
爲了方便,加入到服務配置文件裏
vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=https://prometheus.iosql
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.ymldocker
[Install]
WantedBy=multi-user.target
重啓服務
systemctl daemon-reload
systemctl start prometheus.service
3.容器安裝
https://prometheus.io/docs/prometheus/latest/installation/
prometheus.yml經過運行如下命令將您從主機綁定:
docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
或者爲配置使用額外的卷:
docker run -p 9090:9090 -v /prometheus-data \
prom/prometheus --config.file=/prometheus-data/prometheus.yml
4.訪問web
http://190.168.3.250:9090訪問本身的狀態頁面
能夠經過訪問localhost:9090驗證Prometheus自身的指標:190.168.3.250:9090/metrics
三.配置監控服務
1.配置Prometheus監控自己
全局配置文件簡介
有關配置選項的完整,請參閱:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
Prometheus以scrape_interval規則週期性從監控目標上收集數據,而後將數據存儲到本地存儲上。scrape_interval能夠設定全局也能夠設定單個metrics。
Prometheus以evaluation_interval規則週期性對告警規則作計算,而後更新告警狀態。evaluation_interval只有設定在全局。
global:全局配置
alerting:告警配置
rule_files:告警規則
scrape_configs:配置數據源,稱爲target,每一個target用job_name命名。又分爲靜態配置和服務發現
global:
默認抓取週期,可用單位ms、smhdwy #設置每15s採集數據一次,默認1分鐘
[ scrape_interval: <duration> | default = 1m ]
默認抓取超時
[ scrape_timeout: <duration> | default = 10s ]
估算規則的默認週期 # 每15秒計算一次規則。默認1分鐘
[ evaluation_interval: <duration> | default = 1m ]
和外部系統(例如AlertManager)通訊時爲時間序列或者警情(Alert)強制添加的標籤列表
external_labels:
[ <labelname>: <labelvalue> ... ]
規則文件列表
rule_files:
[ - <filepath_glob> ... ]
抓取配置列表
scrape_configs:
[ - <scrape_config> ... ]
Alertmanager相關配置
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ]
遠程讀寫特性相關的配置
remote_write:
[ - <remote_write> ... ]
remote_read:
[ - <remote_read> ... ]
vi prometheus.yml
下面就是拉取自身服務採樣點數據配置
scrape_configs:
別監控指標,job名稱會增長到拉取到的全部採樣點上,同時還有一個instance目標服務的host:port標籤也會增長到採樣點上
最下面,靜態配置監控本機,採集本機9090端口數據
注:每次修改配置完成,用promtool檢測配置文件是否正確
[root@server1 prometheus]# ./promtool check config prometheus.yml
重啓服務
能夠用kill -hup 進程id 自動加載新配置文件
查看targets能夠看到節點正常
也能夠在這裏搜尋收集來的數據
2.配置服務發現監控linux主機及相關服務
在server2 190.168.3.251上安裝node_exporter
使用文檔:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter
exporter列表:https://prometheus.io/docs/instrumenting/exporters/
在server2安裝節點採集器,mysql服務,nginx服務
tar zxf node_exporter-0.17.0.linux-amd64.tar.gz
mv node_exporter-0.17.0.linux-amd64 /usr/local/node_exporter
cd /usr/local/node_exporter/
./node_exporter --help
服務發現,咱們這裏使用file_sd_configs,寫監控配置文件,服務發現node節點
mkdir sd_config建立服務發現目錄
寫採集地址targets
[root@server1 prometheus]# vi sd_config/node.yml
方便管理服務,將宿主機節點監控採集node_exporter加入到服務配置文件裏,
若是要監控節點的系統服務,須要在後面添加名單參數
--collector.systemd.unit-whitelist=".+" 從systemd中循環正則匹配單元
--collector.systemd.unit-whitelist="(docker|sshd|nginx).service" 白名單,收集目標
/usr/bin/node_exporter --collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service
在http://190.168.3.250:9090/graph已經能看到節點採集到的宿主機信息,已經能夠看到監控到了服務,值爲1就是服務正常
補充:
也能夠將以前190.168.3.250上監控本機的9090的靜態採集改爲文件服務發現的形式
[root@server1 prometheus]# vi sd_config/test.yml ,其中的加上了標籤,添加採集地址,能夠在targets裏使用標籤查找
四.使用grafana前端展現數據並監控docker服務
1.cAdvisor採集容器信息
使用cAdvisor(Container Advisor)用於收集正在運行的容器資源使用和性能信息。
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
http://190.168.3.250:8080/訪問web端口,已經採集到了容器的數據
2.Grafana
https://grafana.com/grafana/download
Grafana是一個開源的度量分析和可視化系統,Grafana支持查詢普羅米修斯。自Grafana 2.5.0(2015-10-28)以來,包含了Prometheus的Grafana數據源。
在官網上下載https://grafana.com/grafana/download?platform=docker
咱們這裏用的是docker版的
docker run -d --name=grafana -p 3000:3000 grafana/grafana
跑起來後,190.168.3.250:3000訪問web接口
密碼帳號都是admin,第一次登錄須要修改密碼
添加數據源
已經有一個Prometheus數據源
3.添加監控宿主機模板
輸入9276,導入
修更名字和數據庫
完成,查看最後模板效果
4.查看docker監控
添加新job,修改採集配置文件prometheus.yml
[root@server1 prometheus]# vi prometheus.yml
檢查配置文件後,重啓主服務 ./promtool check config prometheus.yml
一樣方法在Grafana下載模板,導入193
也能夠在https://grafana.com/dashboards/下載別的模板
五.監控mysql服務
mysql_exporter:用於收集MySQL性能信息。
下載https://github.com/prometheus/mysqld_exporter
監控模板https://grafana.com/dashboards/7362
咱們在server2 190.168.3.251上配置,須要下載mysqld_exporter數據庫採集和安裝mariadb
登陸mysql爲exporter建立帳號,以即可以採集數據:
mysql> CREATE USER 'exporter'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO 'exporter'@'localhost';
vi .my.cnf ,添加用戶隱藏的數據庫帳號,prometheus監控mysql須要用這個帳號採集
在server1 190.168.3.250修改採集配置文件
[root@server1 prometheus]# vi prometheus.yml
檢查配置文件並重啓服務,systemctl restart prometheus.service
[root@server2 mysql_exporter]# ./mysqld_exporter --config.my-cnf=.my.cnf
數據庫信息已經採集到了
http://190.168.3.251:9104/metrics
導入模板後7362後
六.郵件告警
1.告警介紹
在Prometheus平臺中,警報由獨立的組件Alertmanager處理。一般狀況下,咱們首先告訴Prometheus Alertmanager所在的位置,而後在Prometheus配置中建立警報規則,最後配置Alertmanager來處理警報併發送給接收者(郵件,webhook、slack等)。
地址1:https://prometheus.io/download/
地址2:https://github.com/prometheus/alertmanager/releases
設置告警和通知的主要步驟以下:
第一步 部署Alertmanager
第二步 配置Prometheus與Alertmanager通訊
第三步 在Prometheus中建立告警規則
2.配置Prometheus與Alertmanager通訊
須要在官網下載以上的報警包
修改告警媒介,使用郵箱發送
[root@server1 alertmanager-0.16.0.linux-amd64]# vi alertmanager.yml
注意:上面的驗證密碼不是郵箱密碼,是受權碼
修改完檢查配置文件alertmanager.yml是否正確,而後重啓服務
./alertmanager --config.file alertmanager.yml
systemctl restart prometheus.service
修改prometheus鏈接告警模塊,並設定告警規則
[root@server1 prometheus]# vi prometheus.yml
[root@server1 prometheus]# vi rules/test.yml
參照官網告警上寫的
groups:
3.測試郵箱告警
咱們把server2 上的mysql監控關閉,測試告警
http://190.168.3.250:9090/alerts,已經觸發
咱們看郵箱,收到報警