業內比較著名的監控解決方案,據筆者所知,大概是三套:
一個是zabbix的解決方案,一個是prometheus+grafana,一個是ELK
zabbix比較重,而且原生支持監控SNMP,自帶一個儀表盤,不需要額外部署
promethues,對K8S的支持比較好,并且比較輕量化,但是需要配grafana才能出圖
ELK非常重,筆者沒咋玩過,但據說對大規模日志和實時分析非常好,你可以看到數據部門特別喜歡用Elastic search這個東西
今天筆者陽了,頭疼的要命,哎上次陽了之后做了個核磁發現有腦萎縮和脫髓鞘希望這次不要加重。趁著這會寫一個prometheus的搭建和配置教程吧。
一、【環境準備】
如果你打算創造就業崗位,建議用傳統方法部署一個Prometheus,這樣你可以創造一個專門維護Prometheus的崗位。
如果為了給自己省事,建議直接上docker(docker compose)或者K8S(chart),不過注意docker需要有root權限,雖然docker有root less版本,但是官網文檔提出有一些潛在的和尚未探知的問題。
這里筆者就直接用docker搭了
prometheus是監控的中心節點,grafana是畫圖的,node-exporter是采集指標的放在哪臺機器就是采集哪臺機器指標,pushgateway是做短時任務的,alertmanager是告警的,當然你也可以用grafana自帶的告警。
1. 安裝docker
# 先查一下自己的發行版本,根據發行版本,下一步下載對應的安裝包
lsb_release
比如我這個是Ubuntu 18.04的版本,bionic,那么接下來我們就下載?對應的五個包
containerd.io_<version>_<arch>.deb
docker-ce-cli_<version>_<arch>.deb
docker-ce_<version>_<arch>.deb
docker-buildx-plugin_<version>_<arch>.deb
docker-compose-plugin_<version>_<arch>.deb
# 下載一下離線包,設法傳到機器上
# ubuntu:https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/
# centos:https://download.docker.com/linux/centos/
# 隨后逐個安裝
sudo dpkg -i 安裝包路徑
這個安裝順序一般是先裝container,再裝剩下的,有時候新版本的container在老版本的linux上會有依賴錯誤,更新一下依賴就行。
全部安裝完后,最好還要換一下contanier的源,在/etc/containerd下面的config.toml,換源的教程很多,這里就不展開了
2. 測試docker
docker run helloword
如果docker成功運行了你會看到這個
3. 寫配置文件
這個是一個yml文件,簡單來講就是編排容器用的,可以一下起好幾個,很方便。我們創建一個 docker-compose.yml
version: '3.7'services:prometheus:image: prom/prometheus:latestcontainer_name: prometheusvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml- prometheus_data:/prometheusports:- "9090:9090"command:- '--config.file=/etc/prometheus/prometheus.yml'- '--storage.tsdb.path=/prometheus'- '--web.console.libraries=/usr/share/prometheus/console_libraries'- '--web.console.templates=/usr/share/prometheus/consoles'alertmanager:image: prom/alertmanager:latestcontainer_name: alertmanagervolumes:- ./alertmanager.yml:/etc/alertmanager/alertmanager.ymlports:- "9093:9093"command:- '--config.file=/etc/alertmanager/alertmanager.yml'node-exporter:image: prom/node-exporter:latestcontainer_name: node-exporterports:- "9100:9100"command:- '--path.rootfs=/host'network_mode: "host"pid: "host"volumes:- /:/host:ro,rslavepushgateway:image: prom/pushgateway:latestcontainer_name: pushgatewayports:- "9091:9091"grafana:image: grafana/grafana:latestcontainer_name: grafanaenvironment:- GF_SECURITY_ADMIN_PASSWORD=your_passwordvolumes:- grafana_data:/var/lib/grafanaports:- "3000:3000"volumes:prometheus_data:grafana_data:
再寫一個prometheus.yml,輸入一下內容,這個是配置連接用的
global:scrape_interval: 15s # 默認抓取間隔scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['prometheus:9090']- job_name: 'node-exporter'static_configs:- targets: ['node-exporter:9100']- job_name: 'pushgateway'static_configs:- targets: ['pushgateway:9091']alerting:alertmanagers:- static_configs:- targets: ['alertmanager:9093']rule_files:- 'alert.rules.yml'
再寫一個 alermanager.yml,先這么寫后期有告警加進去了再改
global:resolve_timeout: 5mroute:receiver: 'default'receivers:- name: 'default'
二、【容器!啟動~】
然后cd到剛才你寫docker-compose.yml的路徑,輸入
sudo docker compose up -d
# 如果要停止就是 sudo docker compose down
看到這個,沒報錯,就算是成功了
三、【網頁上的檢查與配置】
1. 訪問prometheus
瀏覽器訪問prometheus的地址(我們這里是127.0.0.1:9090)里面有個target
看到這邊的state都是up狀態,就是連接成功了
2. 訪問grafana?
瀏覽器訪問prometheus的地址(我們這里是127.0.0.1:9094)
先配一個數據源,選prometheus
有了數據源就可以制圖了,點左側的dashboard儀表盤,new一個dashboard出來
點右上角新建一個視圖
進來之后就可以設置自己的監控項目了,右側有一些其他設置,感興趣也可以看看,設置完右上角保存
?然后再保存dashboard配置
3. 配置告警?
告警可以用alertmanager也可以用grafana的告警,前者需要寫yml,后者可以在網頁上點點點,如果告警量大建議用alertmanager,告警不多不復雜用grafana的告警也行
新建一個自己用的告警方式,這里有很多比如什么email、dingding、webhook、slack等
?
然后配置一下alert rules,簡單來說就是在里面查詢某個指標,達成條件了發出告警