Prometheus(由go語言(golang)開發)是一套開源的監控&報警&時間序列數據庫的組合。適合監控docker容器。
基于時間序列的數值數據的容器監控解決方案。
按照時間順序記錄系統、設備狀態變化的數據被稱為時序數據
優勢
易于管理
輕易獲取服務內部狀態
高效靈活的查詢語句
支持本地和遠程存儲
采用http協議,默認pull模式拉取數據,也可以通過中間網關push數據
支持自動發現
可擴展
易集成
grafana 將Prometheus收集到的數據以圖形化展現
通過grafana+onealert實現報警
模擬項目---對遠程機器進行監控
實現7*24小時監控
報警分級
一級 電話通知
二級 微信通知
三級 郵件通知
完成報警處理機制
異地集中監控
實驗環境準備
grafana服務器一臺,prometheus服務器一臺,被監控服務器一臺
初始化服務器
設置好IP后,修改/etc/hosts
172.16.30.217 prometheus
172.16.30.222 grafana
172.16.30.223 agent
1 #!/bin/bash
2 for li in `cat ip.txt`
3 do
4? ? echo "lianjie $li..."
5? ? sshpass -p saka ssh -o "StrictHostKeyChecking=no" root@$li mv /etc/hosts /etc/hosts.bk
6? ? scp /etc/hosts root@$li:/etc/
7 done
時間同步
由于連接了外網,使用了外網的NTP server 在此只做時間檢查
#!/bin/bash
for li in `cat ip.txt`
do
sshpass -p saka ssh -o StrictHostKeyChecking=no root@$li date
done
prometheus安裝
tar -xvf prometheus-2.5.0.linux-amd64.tar.gz -C /usr/local
mv prometheus-2.5.0.linux-amd64 prometheus
cd prometheus
./prometheus --config.file="/usr/local/prometheus/prometheus.yml" & //執行后臺安裝
ss -natlp | grep 9090 //測試端口占用情況
ip:9090 即可看到prometheus的自帶界面
默認監控自己
監控項有搜索提示
監控遠程主機
在被監控的主機上安裝組件(所有需要監控的機器都需要安裝)
監控不同的服務需要不同的組件,比如mysqld_exporter
安裝node_exporter(主要監控系統信息)
tar -xvf node_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local
mv node_exporter-0.16.0.linux-amd64 node_exporter
cd node_exporter
nohup ./node_exporter & //永久運行node_exporter
查看是否運行
lsof -i:9100 //node_exporter 默認監聽9100端口
通過ip:9100/metrices 來查看監控的數據
回到prometheus服務器的配置文件中添加被監控機器的地址段
vim prometheus.yml
- job_name: 'agent1'
? static_configs:
? - targets: ['172.16.30.223:9100'] //嚴格控制縮進
改完后重啟服務
回到prometheus服務器的監控頁面,已經可以看到添加的被監控主機
監控mysqld_exporter
解壓安裝
安裝mysql(start enable)
lsof -i:3306 //查看是否運行
創建mysql賬號,只允許本機訪問
grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '123';
刷新權限
flush privileges;
完成之后,需要去添加配置文件來給prometheus登錄Mysql來拉取數據
vim /usr/local/mysqld_exporter/.my.cnf
[client]
user=mysql_monitor
password=123
運行mysqld_exporter
nohup /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf & //添加參數,指明配置文件路徑
ss -natlp | grep 9104 //確認已啟動
到網頁中查看是否已搜集到數據
回到prometheus服務器的配置文件中添加被監控機器的地址段
? - job_name: 'agent1_mariadb'
static_configs:
- targets: ['172.16.30.223:9104']
修改完成后重啟prometheus服務,在web上已經能看到監控的targets
grafana圖形工具
grafana是開源的度量分析和可視化工具,可以通過將prometheus采集的數據分析,查詢,然后進行可視化的展示,并實現報警。監聽3000端口
安裝
rpm -ivh grafana-5.3.4-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
通過Ip:3000進入 grafana測試頁面,默認用戶名密碼均為admin,第一次登陸后需要更改密碼
與prometheus關聯
添加數據源
點擊頁面中的add data source添加prometheus服務器的信息
點+給數據源做圖形展示
可以通過兩種方式來篩選監控數據
1.{instance="IP:PORT"}
2.{job="JOB NAME"} //job name在prometheus的配置文件中
通過grafana監控mysql數據
需要安裝模板并修改配置文件
修改配置文件
vim /etc/grafana/grafana.ini
[dashboards.json]
enabled = true //開啟json
path = /var/lib/grafana/dashboards //模板路徑
cd /var/lib/grafana/dashboards后
git clone https://github.com/percona/grafana-dashboards.git //下載模板
cp -r grafana-dashboards/dashboards/ /var/lib/grafana? //把模板拉出來
systemctl restart grafana-server
在grafana中導入json 文件
頁面中存在上傳頁面
選擇上傳mysql_overview.json
//上傳后沒有數據,因為沒設置數據源
//設置數據源
//默認名字為Prometheus,之前的名字叫prometheus_data
//一覺睡醒grafana沒采集到數據,prometheus報錯no data points 發現3臺機器時間不同步,重新校時 ntpdate cn.ntp.org.cn 所有機器保證時間同步
更改dashboards界面 https://grafana.com/grafana/dashboards?
編號9276比較酷炫,是收集系統信息的,需要node_exporter
grafana+onealert實現報警
prometheus報警需要alertmanager組件,且報警規則需要手動添加,并不友好,所以使用grafana+onealert實現報警
onealert需要注冊
https://caweb.aiops.com/#/? //頁面有創建提示
在grafana中配置webhook url
在grafana中創建Notification channel 類型為webhook
鏈接地址不能填錯
將webhook Notification Channel添加到grafana Alert中
在grafana dashboards中添加報警觸發條件
cat /dev/urandom | md5sum
//目前未付費狀態 只能微信推送或者釘釘 //綁定微信后已經可以從郵箱和微信推送獲取報警信息
dpkg-reconfigure openssh-server重新生成ssh配置文件