一、常用的監(jiān)控系統(tǒng)
1.1 簡(jiǎn)介
老牌傳統(tǒng)的:Zabbix 、Nagios、Cacti …
云時(shí)代的:Prometheus、夜鶯 … …
1.2 Prometheus和zabbix的區(qū)別
Zabbix:更適用于傳統(tǒng)業(yè)務(wù)架構(gòu)的物理機(jī)、虛擬機(jī)環(huán)境的監(jiān)控,對(duì)容器的支持比較差;數(shù)據(jù)存儲(chǔ)主要采用的是關(guān)系型數(shù)據(jù)庫(kù),會(huì)隨著監(jiān)控節(jié)點(diǎn)數(shù)量的增加,關(guān)系型數(shù)據(jù)庫(kù)的壓力也會(huì)變大,監(jiān)控?cái)?shù)據(jù)的讀寫也會(huì)變的很慢;對(duì)大規(guī)模集群監(jiān)控的性能比Prometheus要弱一些,可適用于單集群不超過(guò)2000節(jié)點(diǎn)的場(chǎng)景。
Prometheus:還能支持云環(huán)境、Kubernetes容器集群的監(jiān)控,是目前容器監(jiān)控最好的解決方案;數(shù)據(jù)存儲(chǔ)采用的是時(shí)序數(shù)據(jù)庫(kù),大大的節(jié)省了存儲(chǔ)空間,并且提升了查詢效率;單集群支持的節(jié)點(diǎn)規(guī)模更大,通常超過(guò)2000臺(tái)節(jié)點(diǎn)、業(yè)務(wù)服務(wù)數(shù)量大于1000個(gè)的時(shí)候建議直接上Prometheus。
二、Prometheus
Prometheus 官網(wǎng)地址:https://prometheus.io
Prometheus github 地址:https://github.com/prometheus
2.1 簡(jiǎn)介
Prometheus 是一個(gè)開源的監(jiān)控系統(tǒng) + 時(shí)間序列數(shù)據(jù)庫(kù),數(shù)據(jù)模型是 指標(biāo)度量名稱{鍵值對(duì)標(biāo)簽} 的時(shí)間序列數(shù)據(jù)格式。
2.2 Prometheus的主要組件
1)Prometheus server
Prometheus服務(wù)的核心組件;
通過(guò)http pull拉取的方式采集監(jiān)控指標(biāo)數(shù)據(jù)(時(shí)間序列數(shù)據(jù));
作為時(shí)序數(shù)據(jù)庫(kù)持久化存儲(chǔ)監(jiān)控指標(biāo)數(shù)據(jù);
根據(jù)告警規(guī)則生成告警通知推送給alertmanager;
內(nèi)建service discovery動(dòng)態(tài)服務(wù)發(fā)現(xiàn)功能(支持文件、consul、K8S等自動(dòng)發(fā)現(xiàn)方式)
2)Exporters
指標(biāo)暴露器,用于對(duì)原生不支持prometheus直接采集監(jiān)控指標(biāo)數(shù)據(jù)的系統(tǒng)或應(yīng)用,收集監(jiān)控指標(biāo)數(shù)據(jù)并轉(zhuǎn)換格式給prometheus server
拉取采集。
常用的exporters | 描述 |
---|---|
Node-Exporter |
用于收集服務(wù)器節(jié)點(diǎn)的物理指標(biāo)狀態(tài)數(shù)據(jù),如平均負(fù)載、CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等資源信息的指標(biāo)數(shù)據(jù),需要部署到所有運(yùn)算節(jié)點(diǎn)。 |
mysqld-exporter/nginx-exporter |
用于監(jiān)控特定服務(wù),比如mysql/nginx |
Kube-State-Metrics |
用于為 Prometheus 采集 K8S 資源數(shù)據(jù) |
cAdvisor | 用來(lái)監(jiān)控容器內(nèi)部使用資源的信息,比如 CPU、內(nèi)存、網(wǎng)絡(luò)I/O、磁盤I/O |
blackbox-exporter | 監(jiān)控業(yè)務(wù)容器存活性 |
3)Alertmanager
接收prometheus server發(fā)來(lái)的告警通知,負(fù)責(zé)對(duì)告警通知去重、分組,并路由給接收人(電子郵件、釘釘、企業(yè)微信等方式)
4)Pushgateway
作為中轉(zhuǎn)站,接收一些短期任務(wù)或只會(huì)push推送數(shù)據(jù)的任務(wù)發(fā)來(lái)的監(jiān)控指標(biāo)數(shù)據(jù),用于臨時(shí)存儲(chǔ)監(jiān)控指標(biāo)數(shù)據(jù)并統(tǒng)一給prometheus server拉取采集
5)Grafana
外置的監(jiān)控?cái)?shù)據(jù)展示平臺(tái),接入prometheus數(shù)據(jù)源,通過(guò)promQL查詢,并以圖形化形式展示
2.3 Prometheus的工作流程
1)prometheus server通過(guò)http pull拉取的方式從監(jiān)控目標(biāo)target(exporter或pushgateway暴露的http接口)拉取監(jiān)控指標(biāo)數(shù)據(jù);
2)prometheus server將采集到的監(jiān)控指標(biāo)數(shù)據(jù)通過(guò)時(shí)序數(shù)據(jù)庫(kù)持久化存儲(chǔ)在本地磁盤或外置存儲(chǔ)中;
3)prometheus server將采集到的監(jiān)控指標(biāo)數(shù)據(jù)與本地配置的告警規(guī)則進(jìn)行計(jì)算比對(duì),如果觸發(fā)告警則會(huì)生成告警通知推送給alertmanager;
4)alertmanager接收到prometheus server發(fā)來(lái)的告警通知后,對(duì)告警通知去重、分組,再通過(guò)電子郵件/釘釘/企業(yè)微信等方式發(fā)送給接收人;
5)prometheus支持原生的web UI或grafana接入prometheus數(shù)據(jù)源,通過(guò)promQL查詢,并以圖形化形式展示。
prometheus支持使用influxdb等作為外置時(shí)序數(shù)據(jù)庫(kù),實(shí)現(xiàn)長(zhǎng)期存儲(chǔ)歷史數(shù)據(jù)。
prometheus可基于thanos實(shí)現(xiàn)prometheus集群的高可用(主要方式是在K8S上部署,通過(guò)邊車模式與prometheus部署在同一個(gè)Pod里共享監(jiān)控?cái)?shù)據(jù))
2.4 Prometheus數(shù)據(jù)采集配置
#這是一個(gè)模板
scrape_configs:
- job_name: XXX #自定義監(jiān)控任務(wù)的名稱
metrics_path: "/metrics" #指定獲取監(jiān)控指標(biāo)數(shù)據(jù)的URL路徑,一般都是 /metrics
scheme: "http" #指定拉取監(jiān)控指標(biāo)數(shù)據(jù)的協(xié)議,http(默認(rèn)值)|https
static_configs: #定義靜態(tài)配置的監(jiān)控目標(biāo)
- targets: #指定監(jiān)控目標(biāo)的IP和exporter的端口
- <IP1>:<exporter的端口>
- <IP2>:<exporter的端口>
labels: #自定義監(jiān)控目標(biāo)的標(biāo)簽
<標(biāo)簽key>: <標(biāo)簽value>
三、二進(jìn)制部署Prometheus
3.1 初始化操作
systemctl stop firewalld
setenforce 0
3.2 下載Prometheus源碼包并解壓
上傳 prometheus-2.45.0.linux-amd64.tar.gz 到 /opt 目錄中,并解壓
#建立工作目錄
mkdir -p /opt/prometheus
#上傳源碼包
cd /opt/prometheus
tar xf prometheus-2.45.0.linux-amd64.tar.gz
#方便補(bǔ)全
mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus
Prometheus配置清單文件詳解
cat /usr/local/prometheus/prometheus.yml | grep -v "^#"
global: #用于prometheus的全局配置,比如采集間隔,抓取超時(shí)時(shí)間等
scrape_interval: 15s #采集目標(biāo)主機(jī)監(jiān)控?cái)?shù)據(jù)的時(shí)間間隔,默認(rèn)為1m
evaluation_interval: 15s #觸發(fā)告警生成alert的時(shí)間間隔,默認(rèn)是1m
# scrape_timeout is set to the global default (10s).
scrape_timeout: 10s #數(shù)據(jù)采集超時(shí)時(shí)間,默認(rèn)10s
alerting: #用于alertmanager實(shí)例的配置,支持靜態(tài)配置和動(dòng)態(tài)服務(wù)發(fā)現(xiàn)的機(jī)制
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files: #用于加載告警規(guī)則相關(guān)的文件路徑的配置,可以使用文件名通配機(jī)制
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs: #用于采集時(shí)序數(shù)據(jù)源的配置
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus" #每個(gè)被監(jiān)控實(shí)例的集合用job_name命名,支持靜態(tài)配置(static_configs)和動(dòng)態(tài)服務(wù)發(fā)現(xiàn)的機(jī)制(*_sd_configs)
# metrics_path defaults to '/metrics'
metrics_path: '/metrics' #指標(biāo)數(shù)據(jù)采集路徑,默認(rèn)為 /metrics
# scheme defaults to 'http'.
static_configs: #靜態(tài)目標(biāo)配置,固定從某個(gè)target拉取數(shù)據(jù)
- targets: ["localhost:9090"]
3.3 Prometheus添加到系統(tǒng)服務(wù)中
#配置系統(tǒng)啟動(dòng)文件
cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
啟動(dòng)
#啟動(dòng) Prometheust
systemctl enable prometheus --now
netstat -natp | grep :9090
3.4 訪問(wèn)測(cè)試
瀏覽器訪問(wèn):http://192.168.2.108:9090 ,訪問(wèn)到 Prometheus 的 Web UI 界面。
點(diǎn)擊頁(yè)面的 Status -> Targets;
如看到 Target 狀態(tài)都為 UP,說(shuō)明 Prometheus 能正常采集到數(shù)據(jù)。
瀏覽器訪問(wèn):http://192.168.2.108:9090/metrics ,可以看到 Prometheus 采集的指標(biāo)數(shù)據(jù)。
其中 Help 字段
用于解釋當(dāng)前指標(biāo)的含義,Type 字段
用于說(shuō)明數(shù)據(jù)的類型。
四、Exporters部署實(shí)例
4.1 實(shí)例一:部署 Node Exporter 監(jiān)控系統(tǒng)級(jí)指標(biāo)
Step1 準(zhǔn)備源代碼包
上傳 node_exporter-1.3.1.linux-amd64.tar.gz
到 /opt 目錄中,并解壓。
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
Step2 將node-expoter添加到系統(tǒng)服務(wù)中
配置啟動(dòng)文件
cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
啟動(dòng)
systemctl enable node_exporter --now
netstat -natp | grep :9100
瀏覽器訪問(wèn):http://192.168.2.108:9100/metrics ,可以看到 Node Exporter 采集到的指標(biāo)數(shù)據(jù)。
Step3 加入到 Prometheus 監(jiān)控中
修改Prometheus配置文件
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下內(nèi)容
- job_name: nodes
metrics_path: "/metrics"
static_configs:
- targets:
- 192.168.2.108:9100
- 192.168.2.100:9100
- 192.168.2.102:9100
labels:
service: kubernetes
重新載入配置
#方法一
systemctl reload prometheus
#方法二
curl -X POST http://192.168.2.108:9090/-/reload
測(cè)試
瀏覽器查看 Prometheus 頁(yè)面的 Status -> Targets
補(bǔ)充:常用的各指標(biāo)
●node_cpu_seconds_total
●node_memory_MemTotal_bytes
●node_filesystem_size_bytes{mount_point=PATH}
●node_system_unit_state{name=}
●node_vmstat_pswpin:系統(tǒng)每秒從磁盤讀到內(nèi)存的字節(jié)數(shù)
●node_vmstat_pswpout:系統(tǒng)每秒鐘從內(nèi)存寫到磁盤的字節(jié)數(shù)
更多指標(biāo)介紹:https://github.com/prometheus/node_exporter
4.2 實(shí)例二:通過(guò)mysql exporter監(jiān)控 MySQL
注:切換到Mysql服務(wù)器部署。
Step1 部署mysql exporter
解壓mysql exporter源碼包
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/
配置啟動(dòng)文件
cat > /usr/lib/systemd/system/mysqld_exporter.service <<'EOF'
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Step2 修改Mysql的配置
修改Mysql的配置文件
vim /etc/my.cnf
[client]
......
host=localhost
user=exporter
password=abc123
授權(quán) exporter 用戶
#登錄收據(jù)庫(kù)
mysql -uroot -p123123
#授權(quán)
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123';
#刷新
flush privillages
重啟mysqld服務(wù)
systemctl restart mysqld
Step3 啟動(dòng)mysqld_exporter服務(wù)
systemctl enable mysqld_exporter --now
netstat -natp | grep :9104
Step4 添加Mysql到Prometheus監(jiān)控中
切換到Prometheus 服務(wù)器上操作。
修改 prometheus 配置文件,加入到 prometheus 監(jiān)控中
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下內(nèi)容
- job_name: mysqld
metrics_path: "/metrics"
static_configs:
- targets:
- 192.168.2.106:9104
labels:
service: mysqld
重新載入配置
systemctl reload prometheus
Step5 查看Prometheus web界面
瀏覽器查看 Prometheus 頁(yè)面的 Status -> Targets
4.3 實(shí)例三:監(jiān)控Nginx
nginx-exporter下載地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
nginx 下載地址:http://nginx.org/download/
nginx 插件下載地址:https://github.com/vozlt/nginx-module-vts/tags
Step1 安裝nginx
下載并解壓nginx插件包
cd /opt
tar xf nginx-module-vts-0.1.18.tar.gz
mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts
安裝nignx
#安裝依賴
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#管理用戶
useradd -M -s /sbin/nologin nginx
#解壓代碼包
cd /opt
tar xf nginx-1.24.0.tar.gz
#編譯安裝
cd nginx-1.24.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=/usr/local/nginx-module-vts
make & make install
Step2 修改nginx的配置文件,啟動(dòng)nginx
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
vhost_traffic_status_zone; #添加
vhost_traffic_status_filter_by_host on; #添加,開啟此功能,在 Nginx 配置有多個(gè) server_name 的情況下,會(huì)根據(jù)不同的 server_name 進(jìn)行流量的統(tǒng)計(jì),否則默認(rèn)會(huì)把流量全部計(jì)算到第一個(gè) server_name 上
......
server {
......
}
server {
vhost_traffic_status off; #在不想統(tǒng)計(jì)流量的 server 區(qū)域,可禁用 vhost_traffic_status
listen 8080;
allow 127.0.0.1;
allow 192.168.2.108; #設(shè)置為 prometheus 的 ip 地址
location /nginx-status {
stub_status on;
access_log off;
}
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}
#假如 nginx 沒(méi)有規(guī)范配置 server_name 或者無(wú)需進(jìn)行監(jiān)控的 server 上,那么建議在此 vhost 上禁用統(tǒng)計(jì)監(jiān)控功能。否則會(huì)出現(xiàn) 127.0.0.1、hostname 等的域名監(jiān)控信息。
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t
將nginx添加到系統(tǒng)服務(wù)中
cat > /lib/systemd/system/nginx.service <<'EOF'
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
啟動(dòng)
systemctl enable nginx --now
瀏覽器訪問(wèn):http://192.168.2.107:8080/status
,可以看到 Nginx Vhost Traffic Status 的頁(yè)面信息
Step3 解壓 nginx-exporter并啟動(dòng)
源碼包
cd /opt/
tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/
添加到系統(tǒng)服務(wù)
cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF'
[Unit]
Description=nginx-exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/json
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
啟動(dòng)nginx-exporter服務(wù)
systemctl enable nginx-exporter --now
netstat -natp | grep :9913
Step4 將nginx加入到Prometheus監(jiān)控中
切換到 Prometheus 服務(wù)器。
修改 prometheus 配置文件
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下內(nèi)容
- job_name: nginx
metrics_path: "/metrics"
static_configs:
- targets:
- 192.168.2.107:9913
labels:
service: nginx
重新載入配置
systemctl reload prometheus
Step5 訪問(wèn)Prometheus web頁(yè)面
瀏覽器查看 Prometheus 頁(yè)面的 Status -> Targets
五、部署 Grafana平臺(tái)進(jìn)行展示
5.1 下載和安裝
#下載地址
https://grafana.com/grafana/download
https://mirrors.bfsu.edu.cn/grafana/yum/rpm/
yum install grafana-enterprise-8.5.9-1.x86_64.rpm
systemctl enable grafana-server --now
netstat -natp | grep :3000
瀏覽器訪問(wèn):http://192.168.2.108:3000
,默認(rèn)賬號(hào)和密碼為 admin/admin
5.2 配置數(shù)據(jù)源
Configuration -> Data Sources -> Add data source -> 選擇 Prometheus
HTTP -> URL 輸入 http://192.168.2.108:9090
點(diǎn)擊 Save & Test
點(diǎn)擊 上方菜單 Dashboards--->Import 所有默認(rèn)模板
Dashboards -> Manage ,選擇 Prometheus 2.0 Stats 或 Prometheus Stats 即可看到 Prometheus job 實(shí)例的監(jiān)控圖像
5.3 導(dǎo)入grafana監(jiān)控面板
瀏覽器訪問(wèn):https://grafana.com/grafana/dashboards
在頁(yè)面中搜索 node exporter ,選擇適合的面板,點(diǎn)擊 Copy ID 或者 Download JSON
在 grafana 頁(yè)面中,+ Create -> Import ,輸入面板 ID 號(hào)或者上傳 JSON 文件,點(diǎn)擊 Load,即可導(dǎo)入監(jiān)控面板
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-836358.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836358.html
到了這里,關(guān)于【云原生 Prometheus篇】Prometheus架構(gòu)詳解與核心組件的應(yīng)用實(shí)例(Exporters、Grafana...)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!