為什么網(wǎng)站有不同的擴(kuò)展名全國(guó)最新的疫情數(shù)據(jù)
一、設(shè)計(jì)背景
1.1項(xiàng)目簡(jiǎn)介
本項(xiàng)目旨在創(chuàng)建一個(gè)全面的容器化應(yīng)用程序監(jiān)控解決方案,基于Prometheus監(jiān)控Docker平臺(tái)上的各種服務(wù)。在當(dāng)今的軟件開發(fā)環(huán)境中,容器化技術(shù)已成為一種關(guān)鍵的工具,使應(yīng)用程序能夠更快速、可靠地交付和擴(kuò)展。然而,隨著容器數(shù)量的增加和復(fù)雜性的提高,監(jiān)控這些容器化服務(wù)的性能和健康狀態(tài)變得至關(guān)重要。通過這個(gè)項(xiàng)目,我們的目標(biāo)是提供一個(gè)完善的監(jiān)控解決方案,幫助開發(fā)人員、系統(tǒng)管理員和運(yùn)維團(tuán)隊(duì)更好地理解和管理他們的容器化應(yīng)用程序。這將有助于提高應(yīng)用程序的穩(wěn)定性、可用性和性能,從而促進(jìn)更快速、高效的軟件開發(fā)和部署。
1.2課題目標(biāo)
隨著信息技術(shù)的不斷發(fā)展,容器化技術(shù)已經(jīng)成為現(xiàn)代應(yīng)用程序開發(fā)和部署的主要趨勢(shì)之一。Docker等容器平臺(tái)的出現(xiàn)為應(yīng)用程序的快速交付和部署提供了便利,然而,隨之而來的挑戰(zhàn)是如何有效地監(jiān)控和管理這些容器化服務(wù)。在這個(gè)背景下,本畢業(yè)設(shè)計(jì)項(xiàng)目選擇了基于Prometheus監(jiān)控Docker平臺(tái)作為研究課題。Prometheus作為一種開源的監(jiān)控和警報(bào)工具,已經(jīng)在容器環(huán)境中得到廣泛應(yīng)用,但如何將其有效地集成到Docker平臺(tái)中,以確保容器化應(yīng)用的性能、可用性和可伸縮性,仍然是一個(gè)具有挑戰(zhàn)性的問題。因此,本項(xiàng)目旨在研究和實(shí)現(xiàn)一個(gè)可靠的監(jiān)控解決方案,以滿足容器化應(yīng)用的監(jiān)控需求。
二、設(shè)計(jì)思路
2.1 開發(fā)環(huán)境與工具
使用到的工具為:
VMware Workstation:VMware Workstation是一款虛擬機(jī)軟件,可以用于創(chuàng)建和管理虛擬機(jī)。它提供了一個(gè)可視化界面,使用戶可以在單個(gè)物理主機(jī)上同時(shí)運(yùn)行多個(gè)虛擬機(jī),以便在不同的操作系統(tǒng)環(huán)境中進(jìn)行開發(fā)、測(cè)試或演示。
Centos7.9.2009:Centos7.9.2009是一種基于Linux的操作系統(tǒng),它被廣泛用作服務(wù)器操作系統(tǒng)。Centos提供了穩(wěn)定、安全和可靠的基礎(chǔ)系統(tǒng),可以作為Docker平臺(tái)的基礎(chǔ)環(huán)境。
Docker:Docker是一種開源的容器化平臺(tái),它使得應(yīng)用程序和其依賴項(xiàng)可以打包成輕量級(jí)、可移植的容器。通過使用Docker,開發(fā)人員可以更方便地構(gòu)建、部署和管理應(yīng)用程序,實(shí)現(xiàn)快速交付和跨平臺(tái)運(yùn)行。
Grafana Enterprise:Grafana Enterprise是一款功能強(qiáng)大的數(shù)據(jù)可視化工具。它提供了豐富的圖表、面板和儀表盤,可以將來自各種數(shù)據(jù)源的指標(biāo)數(shù)據(jù)進(jìn)行可視化展示和交互式探索,幫助用戶更好地理解和分析數(shù)據(jù)。
Alertmanager:Alertmanager是一種用于處理和管理告警的服務(wù)。它可以接收來自監(jiān)控系統(tǒng)(如Prometheus)的告警通知,并根據(jù)預(yù)定義的規(guī)則進(jìn)行分組、去重、靜默或發(fā)送給相應(yīng)的接收者,以便及時(shí)響應(yīng)和解決問題。
Node Exporter:Node Exporter是用于收集主機(jī)指標(biāo)數(shù)據(jù)的一個(gè)Prometheus導(dǎo)出器。它可以在主機(jī)上運(yùn)行,定期采集主機(jī)的硬件和操作系統(tǒng)指標(biāo),并將其暴露給Prometheus進(jìn)行監(jiān)控和存儲(chǔ)。
Prometheus:Prometheus是一款開源的監(jiān)控和警報(bào)工具。它提供了強(qiáng)大的時(shí)間序列數(shù)據(jù)采集、存儲(chǔ)和查詢功能,能夠監(jiān)控多種數(shù)據(jù)源的指標(biāo),并支持設(shè)定靈活的告警規(guī)則。Prometheus還與Grafana等工具緊密集成,實(shí)現(xiàn)數(shù)據(jù)的可視化和分析。
表 2-1 開發(fā)環(huán)境
工具 | 作用 |
---|---|
VMware Workstation | 創(chuàng)建虛擬機(jī) |
Centos7.9.2009 | 作為平臺(tái)基礎(chǔ)系統(tǒng) |
Docker | 容器平臺(tái) |
grafana-enterprise | 數(shù)據(jù)可視化 |
alertmanager | 告警服務(wù) |
node_exporter | 收集數(shù)據(jù)服務(wù) |
prometheus | 監(jiān)控和警報(bào)工具 |
2.2 系統(tǒng)版本
以下是當(dāng)前工具和系統(tǒng)使用的版本信息。
表 2-2 系統(tǒng)版本
系統(tǒng) | 版本 |
---|---|
VMware Workstation pro | 16 |
Centos7 | 7.9.2009 |
docker | 18.06.3 |
grafana-enterprise | 9.4.3 |
alertmanager | 0.25. |
node_exporter | 1.5.0 |
prometheus | 2.37.6 |
2.3 系統(tǒng)設(shè)計(jì)
這個(gè)系統(tǒng)設(shè)計(jì)旨在實(shí)現(xiàn)全面的監(jiān)控,包括自身、Docker平臺(tái)、以及Docker上運(yùn)行的Nginx和MySQL,并將監(jiān)控?cái)?shù)據(jù)可視化通過Grafana展現(xiàn)。系統(tǒng)架構(gòu)包括Prometheus服務(wù)器作為核心組件,負(fù)責(zé)數(shù)據(jù)采集和存儲(chǔ),Node Exporter用于監(jiān)控宿主機(jī)系統(tǒng)性能,Docker監(jiān)控通過cAdvisor或Docker自身的指標(biāo)監(jiān)測(cè)容器,Nginx Exporter用于收集Nginx服務(wù)器的性能數(shù)據(jù),而MySQL Exporter則從MySQL數(shù)據(jù)庫(kù)中提取性能指標(biāo)。監(jiān)控?cái)?shù)據(jù)匯總后通過Grafana連接到Prometheus數(shù)據(jù)源,實(shí)現(xiàn)實(shí)時(shí)監(jiān)控和創(chuàng)建儀表板。監(jiān)控?cái)?shù)據(jù)的采集和存儲(chǔ)通過Prometheus進(jìn)行,它定期從各個(gè)目標(biāo)中收集性能數(shù)據(jù),并存儲(chǔ)在其內(nèi)部數(shù)據(jù)庫(kù)中,提供強(qiáng)大的查詢和檢索功能。最終,Grafana用于創(chuàng)建自定義儀表板,可視化展示監(jiān)控?cái)?shù)據(jù),幫助實(shí)時(shí)監(jiān)測(cè)系統(tǒng)和應(yīng)用程序的性能,以及分析歷史趨勢(shì)。整個(gè)系統(tǒng)設(shè)計(jì)旨在提供全面的監(jiān)控解決方案,以便有效地管理和優(yōu)化運(yùn)行中的自身、Docker平臺(tái)、Nginx和MySQL等組件。
三、需求分析
3.1 項(xiàng)目平臺(tái)要求
Docker平臺(tái)搭建和管理需求:用戶應(yīng)能夠輕松地搭建和管理Docker容器平臺(tái),包括容器編排和集群管理平臺(tái)應(yīng)支持多種操作系統(tǒng)和云環(huán)境,以滿足不同用戶的需求。
Prometheus集成和配置需求:用戶應(yīng)能夠方便地配置Prometheus以監(jiān)控Docker平臺(tái)上的容器和服務(wù),支持多個(gè)Prometheus實(shí)例的集成,以適應(yīng)不同的監(jiān)控需求。支持?jǐn)?shù)據(jù)收集和存儲(chǔ)的靈活性,以滿足各種監(jiān)控?cái)?shù)據(jù)的需求。
監(jiān)控規(guī)則和告警需求:用戶應(yīng)能夠定義自定義監(jiān)控規(guī)則,以檢測(cè)容器和服務(wù)的性能問題,應(yīng)支持告警規(guī)則的設(shè)置,以及多種告警通知渠道,如郵件、短信等。用戶應(yīng)能夠靈活地調(diào)整告警閾值和策略,以適應(yīng)不同應(yīng)用的需求。
可視化和儀表板需求:系統(tǒng)應(yīng)提供直觀的儀表板和可視化工具,以幫助用戶監(jiān)控容器化應(yīng)用程序的性能和狀態(tài)。儀表板應(yīng)支持自定義配置,以滿足不同用戶的可視化需求。用戶應(yīng)能夠生成和導(dǎo)出有用的監(jiān)控報(bào)告,以便進(jìn)行性能分析和決策支持。
安全性和權(quán)限需求:系統(tǒng)應(yīng)具有強(qiáng)大的安全性措施,包括身份驗(yàn)證、授權(quán)和數(shù)據(jù)加密,以保護(hù)監(jiān)控?cái)?shù)據(jù)的完整性和保密性,應(yīng)支持多級(jí)權(quán)限管理,以確保不同用戶具有適當(dāng)?shù)脑L問權(quán)限。
可擴(kuò)展性和性能需求:系統(tǒng)應(yīng)具備良好的可擴(kuò)展性,以適應(yīng)不斷增長(zhǎng)的容器數(shù)量和監(jiān)控需求,應(yīng)能夠高效處理大量的監(jiān)控?cái)?shù)據(jù),以保持系統(tǒng)的性能穩(wěn)定。
文檔和培訓(xùn)需求:系統(tǒng)應(yīng)提供清晰的文檔和培訓(xùn)材料,以幫助用戶快速上手和有效使用監(jiān)控工具。
3.2 監(jiān)控需求分析
節(jié)點(diǎn)監(jiān)控:監(jiān)控Docker主機(jī)的硬件資源利用率,包括CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)等指標(biāo)。這可以通過Prometheus的節(jié)點(diǎn)導(dǎo)出器(例如node_exporter)實(shí)現(xiàn)。
容器監(jiān)控:監(jiān)控Docker容器的運(yùn)行狀態(tài)和資源消耗情況,包括CPU使用率、內(nèi)存使用量、網(wǎng)絡(luò)流量和磁盤I/O等指標(biāo)??梢允褂胏Advisor或者Docker自身的監(jiān)控API獲取容器的指標(biāo),并由Prometheus進(jìn)行采集和存儲(chǔ)。
服務(wù)健康監(jiān)測(cè):監(jiān)控Docker中運(yùn)行的服務(wù)的可用性和性能??梢允褂肞rometheus的黑盒監(jiān)測(cè)(Blackbox Exporter)對(duì)服務(wù)進(jìn)行定期的HTTP或TCP健康檢查,并記錄響應(yīng)時(shí)間、狀態(tài)碼等指標(biāo)。
日志監(jiān)控:集成日志收集工具(如ELK/EFK)以監(jiān)控Docker容器的日志輸出??梢允褂肍ilebeat將容器日志發(fā)送到Logstash/Elasticsearch/Fluentd等進(jìn)行處理和存儲(chǔ),并通過Prometheus的日志導(dǎo)出器進(jìn)行查詢和分析。
告警與警報(bào):設(shè)置告警規(guī)則,當(dāng)某個(gè)指標(biāo)超過閾值或觸發(fā)特定條件時(shí),發(fā)送警報(bào)給運(yùn)維人員或團(tuán)隊(duì)。Prometheus具有靈活的告警管理機(jī)制,可以根據(jù)業(yè)務(wù)需求設(shè)置告警規(guī)則,并通過郵件、短信、Slack等方式發(fā)送警報(bào)。
可視化與報(bào)表:使用Grafana等工具構(gòu)建監(jiān)控儀表盤,將采集到的指標(biāo)進(jìn)行可視化展示,以便查看和分析。可以創(chuàng)建圖表、面板和報(bào)表來監(jiān)控Docker平臺(tái)的整體狀態(tài)和趨勢(shì)。
五、系統(tǒng)實(shí)現(xiàn)
5.1 部署prometheus
5.1.1 服務(wù)器物理配置規(guī)劃
服務(wù)器的硬件配置如下。
表 5-1 配置規(guī)劃
角色 | 系統(tǒng)架構(gòu) | 內(nèi)存大小 | 核心數(shù)量 |
---|---|---|---|
prometheus | Centos7.9.2009 | 4G | 4cpu |
docker | Centos7.9.2009 | 8G | 8cpu |
5.1.2 IP地址、主機(jī)名稱規(guī)劃
服務(wù)器的IP地址規(guī)劃如下。
表 5-2 主機(jī)ip地址
**IP **地址 | 主機(jī)名 | 角色 |
---|---|---|
網(wǎng)卡1:192.168.100.250 nat模式 | Prometheus | 監(jiān)控服務(wù)器 |
網(wǎng)卡1:192.168.100.251 nat模式 | Docker | 容器服務(wù)器 |
5.1.3 環(huán)境準(zhǔn)備
修改服務(wù)器名稱,關(guān)閉防火墻,并創(chuàng)建用于運(yùn)行Prometheus的用戶。
Prometheus節(jié)點(diǎn)
#修改服務(wù)器名稱
hostnamectl set-hostname Prometheus
#關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
#創(chuàng)建prometheus工作目錄
mkdir -p /opt/prometheus/
#創(chuàng)建運(yùn)行Prometheus服務(wù)的用戶
useradd -M -s /usr/sbin/nologin prometheus
5.1.4 軟件包下載
去各組件的官方網(wǎng)站下載項(xiàng)目對(duì)應(yīng)的軟件包。
Prometheus節(jié)點(diǎn)
#Prometheus下載
wget [https://ghproxy.com/https://github.com/prometheus/prometheus/releases/download/v2.37.6/prometheus-2.37.6.linux-amd64.tar.gz](https://ghproxy.com/https://github.com/prometheus/prometheus/releases/download/v2.37.6/prometheus-2.37.6.linux-amd64.tar.gz)
#alertmanager下載
wget [https://ghproxy.com/https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz](https://ghproxy.com/https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz)
#node_exporter下載
wget [https://ghproxy.com/https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz](https://ghproxy.com/https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz)
#grafana下載
wget [https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.3.linux-amd64.tar.gz](https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.3.linux-amd64.tar.gz)
5.1.5 解壓軟件包
解壓下載的軟件包。
#解壓所有軟件包
tar -zxvf alertmanager-0.25.0.linux-amd64.tar.gz -C /opt/prometheus/
tar -zxvf grafana-enterprise-9.4.3.linux-amd64.tar.gz -C /opt/prometheus/
tar -zxvf prometheus-2.37.6.linux-amd64.tar.gz -C /opt/prometheus/
tar -zxvf node_exporter-1.5.0.linux-amd64.tar.gz -C /opt/prometheus/
#重新命名軟件包
mv /opt/prometheus/node_exporter-1.5.0.linux-amd64/ /opt/prometheus/node_exporter
mv /opt/prometheus/alertmanager-0.25.0.linux-amd64/ /opt/prometheus/alertmanager
mv /opt/prometheus/grafana-9.4.3/ /opt/prometheus/grafana
mv /opt/prometheus/prometheus-2.37.6.linux-amd64/ /opt/prometheus/prometheus
5.1.6 部署node_exporter服務(wù)
開始部署node_exporter服務(wù),用于當(dāng)前服務(wù)器的數(shù)據(jù)采集。
Prometheus節(jié)點(diǎn)
#編寫systemd文件cat >> /usr/lib/systemd/system/node_exporter.service << EOF[Unit]Description=node_exporterDocumentation=https://prometheus.io/After=network.target[Service]User=prometheusGroup=prometheusExecStart=/opt/prometheus/node_exporter/node_exporterRestart=on-failure[Install]WantedBy=multi-user.targetEOF#遞歸的將用戶和組改為prometheuschown -R prometheus:prometheus /opt/prometheus#重載systemd配置,并啟動(dòng)node_exporter服務(wù)systemctl daemon-reloadsystemctl start node_exportersystemctl enable node_exporter
查看node_exporter狀態(tài),瀏覽器訪問http://prometheus_ip:9100/metrics查看node_exporter服務(wù)數(shù)據(jù)。
查看node_exporter狀態(tài)
2 查看node_exporter網(wǎng)頁(yè)數(shù)據(jù)
5.1.7 部署alertmanager服務(wù)
部署告警服務(wù)器。
Prometheus節(jié)點(diǎn)
#編寫systemd文件cat >> /usr/lib/systemd/system/alertmanager.service << EOF[Unit]Description=Alert ManagerWants=network-online.targetAfter=network-online.target[Service]Type=simpleUser=prometheusGroup=prometheusExecStart=/opt/prometheus/alertmanager/alertmanager \--config.file=/opt/prometheus/alertmanager/alertmanager.yml \--storage.path=/opt/prometheus/alertmanager/dataRestart=always[Install]WantedBy=multi-user.targetEOF#遞歸的將用戶和組改為prometheuschown -R prometheus:prometheus /opt/prometheus#重載systemd配置,并啟動(dòng)alertmanager服務(wù)systemctl daemon-reloadsystemctl start alertmanagersystemctl enable alertmanager
查看alertmanager狀態(tài),瀏覽器訪問http://prometheus_ip: 9093/#/status查看alertmanager服務(wù)狀態(tài)。
查看alertmanager狀態(tài)
圖5-4 alertmanager服務(wù)狀態(tài)
5.1.8 部署prometheus服務(wù)
部署普羅米修斯服務(wù),修改對(duì)應(yīng)的配置文件,正式啟動(dòng)監(jiān)控服務(wù)。
Prometheus節(jié)點(diǎn)
#編寫systemd文件cat >> /usr/lib/systemd/system/prometheus.service << EOF[Unit]Description=Prometheus ServerDocumentation=https://prometheus.io/docs/introduction/overview/After=network-online.target[Service]Type=simpleUser=prometheusGroup=prometheusRestart=on-failureExecStart=/opt/prometheus/prometheus/prometheus \--config.file=/opt/prometheus/prometheus/prometheus.yml \--storage.tsdb.path=/opt/prometheus/prometheus/data \--storage.tsdb.retention.time=60d \--web.enable-lifecycle[Install]WantedBy=multi-user.targetEOF#配置告警規(guī)則cat >> /opt/prometheus/prometheus/alert.yml << EOFgroups:- name: Prometheus alertrules:# 對(duì)任何實(shí)例超過30s無(wú)法聯(lián)系的情況發(fā)出警報(bào)- alert: 服務(wù)告警expr: up == 0for: 30slabels:severity: criticalannotations:instance: "{{ $labels.instance }}"description: "{{ $labels.job }} 服務(wù)已關(guān)閉"EOF#修改prometheus.yml配置cat > /opt/prometheus/prometheus/prometheus.yml << EOF# my global configglobal:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Alertmanager configurationalerting:alertmanagers:- static_configs:- targets:- localhost:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files:- "alert.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs:# The job name is added as a label to any timeseries scraped from this config.- job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]- job_name: 'alertmanager'scrape_interval: 15sstatic_configs:- targets: ['localhost:9093']- job_name: 'node-exporter'scrape_interval: 15sstatic_configs:- targets: ['localhost:9100']labels:instance: Prometheus服務(wù)器EOF#遞歸的將用戶和組改為prometheuschown -R prometheus:prometheus /opt/prometheus#重載systemd配置,并啟動(dòng)prometheus服務(wù)systemctl daemon-reloadsystemctl start prometheussystemctl enable prometheus
查看prometheus狀態(tài),瀏覽器訪問http://prometheus_ip: 9090查看三個(gè)服務(wù)狀態(tài)是否正常。
5 查看prometheus狀態(tài)
6查看三個(gè)服務(wù)狀態(tài)
5.1.9 部署grafana服務(wù)
部署grafana實(shí)現(xiàn)數(shù)據(jù)的可視化,對(duì)接普羅米修斯。
Prometheus節(jié)點(diǎn)
#編寫systemd文件cat >> /usr/lib/systemd/system/grafana-server.service << EOF[Unit]Description=Grafana serverDocumentation=http://docs.grafana.org[Service]Type=simpleUser=prometheusGroup=prometheusRestart=on-failureExecStart=/opt/prometheus/grafana/bin/grafana-server \--config=/opt/prometheus/grafana/conf/defaults.ini \--homepath=/opt/prometheus/grafana[Install]WantedBy=multi-user.targetEOF#遞歸的將用戶和組改為prometheuschown -R prometheus:prometheus /opt/prometheus#重載systemd配置,并啟動(dòng)grafana服務(wù)systemctl daemon-reloadsystemctl start grafana-serversystemctl enable grafana-server
查看grafana狀態(tài),瀏覽器訪問http://prometheus_ip:3000可以看到grafana的登錄頁(yè)面。
圖5-7 查看grafana狀態(tài)
圖5-8 grafana的登錄頁(yè)面
5.1.10 配置grafana對(duì)接Prometheus
瀏覽器訪問http://prometheus_ip:3000登錄grafana,賬號(hào)密碼默認(rèn)為admin/admin,登錄后提示修改密碼。
圖5-9 登錄配置
修改完密碼后,我們配置grafana的數(shù)據(jù)源為Prometheus,點(diǎn)擊左下角“設(shè)置圖標(biāo)”點(diǎn)擊Data sources 點(diǎn)擊Prometheus。
0 配置數(shù)據(jù)源
設(shè)置Prometheus服務(wù)地址,這里兩個(gè)服務(wù)都在同一臺(tái)主機(jī)可以直接使用localhost,點(diǎn)擊save&test保存測(cè)試能否成功。
1 配置Prometheus地址
2 保存測(cè)試數(shù)據(jù)源
設(shè)置好數(shù)據(jù)源后,我們需要設(shè)置node_exporter的dashboard方便我們觀察到監(jiān)控?cái)?shù)據(jù)。
3 進(jìn)入配置dashboard界面
4 配置dashboard-json
關(guān)于配置dashboard的方法有兩種,一種是上傳json文件,一種是以id的方式配置,獲取id和json文件的方式需要訪問https://grafana.com/grafana/dashboards/因?yàn)榫W(wǎng)絡(luò)原因,我們此次使用提前準(zhǔn)備的json文件配置。
5 node_exporter-dashboard配置
6 可以復(fù)制id或者下載json文件
上傳json文件后,進(jìn)行基本的設(shè)置,設(shè)置完成后點(diǎn)擊import,即可配置完畢,查看到本機(jī)linux服務(wù)器數(shù)據(jù)儀表盤。
基本配置
Linux服務(wù)器數(shù)據(jù)dashboard
5.2 部署docker
5.2.1 基本環(huán)境配置
配置docker主機(jī)的主機(jī)名,和基本的環(huán)境配置,關(guān)閉防火墻等。
#docker節(jié)點(diǎn)執(zhí)行#修改主機(jī)名hostnamectl set-hostname docker-server#關(guān)閉防火墻systemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
5.2.2 部署docker服務(wù)
使用docker提供的網(wǎng)絡(luò)源安裝docker服務(wù)器,并且配置阿里云鏡像加速器。
docker節(jié)點(diǎn)執(zhí)行
#安裝必要的一些系統(tǒng)工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo [http://download.docker.com/linux/centos/docker-ce.repo](http://download.docker.com/linux/centos/docker-ce.repo)#加載元數(shù)據(jù)sudo yum makecache fast#安裝dockeryum -y install docker-ce-18.06.3.ce-3.el7yum -y install docker-composemkdir -p /etc/dockercat >> /etc/docker/daemon.json <<EOF{"registry-mirrors":["https://fem5eo07.mirror.aliyuncs.com"]}EOF#啟動(dòng)dockersystemctl start dockersystemctl enable docker
5.2.3 部署cadvisor容器
部署docker的數(shù)據(jù)采集容器。
#docker節(jié)點(diǎn)執(zhí)行#拉取鏡像文件docker pull google/cadvisor#編寫docker-compose.yaml文件cat >> docker-compose.yaml << EOFversion: "3.0"services:monitor:container_name: cadvisorimage: google/cadvisorrestart: alwaysvolumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:roports:- 8080:8080EOF#啟動(dòng)容器docker-compose up -d#查看狀態(tài)[root@docker-server ~]# docker-compose psName Command State Ports--------------------------------------------------------------------------cadvisor /usr/bin/cadvisor -logtostderr Up 0.0.0.0:8080->8080/tcp.
使用瀏覽器訪問cadvisor服務(wù)http://192.168.100.251:8080/metrics,查看metrics數(shù)據(jù)。
metrics數(shù)據(jù)
5.2.4 配置Prometheus獲取cadvisor服務(wù)數(shù)據(jù)
Cadvisor容器獲取了docker容器平臺(tái)的大部分?jǐn)?shù)據(jù),并且數(shù)據(jù)格式符合Prometheus的規(guī)范,Prometheus可以直接獲取數(shù)據(jù)。
#Prometheus節(jié)點(diǎn)執(zhí)行cat >>/opt/prometheus/prometheus/prometheus.yml<< EOF- job_name: 'Docker'scrape_interval: 15sstatic_configs:- targets: ['192.168.100.251:8080']labels:instance: Docker服務(wù)器EOF#熱加載配置curl -X POST http://localhost:9090/-/reload
訪問http://192.168.100.250:9090/targets?search=查看Prometheus是否成功添加了docker平臺(tái)數(shù)據(jù),
0 查看狀態(tài)
5.2.5 配置docker監(jiān)控的dashboard
訪問grafana的dashboard-import,導(dǎo)入docker-dashboard的dashboard-ID號(hào)11600。
1添加docker-dashboard JSON文件
2 查看dashboard
5.2.6 配置docker的告警配置文件
修改普羅米修斯的配置文件,編寫一個(gè)告警規(guī)則。
#Prometheus節(jié)點(diǎn)執(zhí)行#創(chuàng)建文件夾mkdir -p /opt/prometheus/prometheus/rules/#編輯prometheus.ymlvi prometheus.yml#添加紅色配置rule_files:- "alert.yml"<font style="color:red;"> - "rules/*.yml"</font>#編寫告警配置文件cat >> /opt/prometheus/prometheus/rules/docker.yml << EOFgroups:- name: DockerContainersrules:- alert: Containerkilledexpr: time() - container_last_seen > 60for: 0mlabels:severity: warningannotations:isummary: "Docker容器被殺死 容器: $labels.instance"description: "{{ $value }}個(gè)容器消失了"- alert: ContainerAbsentexpr: absent(container_last_seen)for: 5mlabels:severity: warningannotations:summary: "無(wú)容器 容器: $labels.instance"description: "5分鐘檢查容器不存在,值為: {{ $value }}"EOF#重新加載配置chown -R prometheus:prometheus /opt/Prometheuscurl -X POST http://localhost:9090/-/reload
訪問Prometheus查看是否成功。
docker告警
5.3 監(jiān)控docker平臺(tái)服務(wù)
5.3.1 監(jiān)控docker-nginx容器
5.3.1.1部署nginx容器
部署用于測(cè)試的nginx容器。
#docker節(jié)點(diǎn)#創(chuàng)建目錄mkdir -p /root/nginx/conf.d#編寫nginx配置文件cat >> /root/nginx/conf.d/server.conf << EOFserver {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;
}
}
EOF#編寫nginx的docker-compose.yamlcat >>/root/nginx/docker-compose.yaml<< EOF
version: "3.0"
services:nginx:image: nginxcontainer_name: nginxports:- 80:80volumes:- /root/nginx/conf.d/:/etc/nginx/conf.d/- /root/nginx/html:/usr/share/nginx/html- /root/nginx/log:/var/log/nginx
EOF
#檢查是否安裝with-http_stub_status_module模塊
docker-compose exec nginx nginx -V |grep -o with-http_stub_status_module
with-http_stub_status_module
#開啟stub_status配置
cat > /root/nginx/conf.d/server.conf << EOF
server {listen 80;server_name localhost;location /stub_status {stub_status on;access_log off;#allow nginx_exporter的ip;allow 0.0.0.0/0;deny all;}location / {root /usr/share/nginx/html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;
}
}
EOF#nginx重新加載配置文件docker exec -it nginx nginx -s reload#檢查是否正常開啟[root@docker-server nginx]# curl 192.168.100.251/stub_statusActive connections: 1server accepts handled requests1 1 1Reading: 0 Writing: 1 Waiting: 0
5.3.1.2部署nginx-exporter
部署用于收集nginx數(shù)據(jù)的exporter
#docker節(jié)點(diǎn)#創(chuàng)建目錄mkdir -p /root/nginx/mon#編寫nginx-exporter的docker-compose.yamlcat >>/root/nginx/mon/docker-compose.yaml<< EOFversion: '3.0'services:nginx_exporter:image: nginx/nginx-prometheus-exporter:0.11container_name: nginx_exporterhostname: nginx_exportercommand:- '-nginx.scrape-uri=http://192.168.100.251/stub_status'restart: alwaysports:- "9113:9113"EOF#啟動(dòng)nginx_exporterdocker-compose up -d#檢查狀態(tài)[root@docker-server mon]# docker-compose psName Command State Ports--------------------------------------------------------------------------------nginx_exporter /usr/bin/nginx-prometheus- ... Up 0.0.0.0:9113->9113/tcp添加到prometheus配置。#prometheus節(jié)點(diǎn)#加入以下配置vi /opt/prometheus/prometheus/prometheus.yml- job_name: 'Docker-nginx'scrape_interval: 15sstatic_configs:- targets: ['192.168.100.251:9113']labels:instance: Docker服務(wù)器nginx#熱加載配置curl -X POST http://localhost:9090/-/reload
訪問grafana的dashboard-import,導(dǎo)入nginx-dashboard-ID號(hào)12708,即可添加nginx的dashboard。
4 nginx-dashboard
5.3.1.3配置nginx的告警設(shè)置
配置nginx的郵箱告警規(guī)則。
#prometheus節(jié)點(diǎn)#編寫告警配置文件cat >>/opt/prometheus/prometheus/rules/nginx.yml<< EOFgroups:- name: Nginxrules:- alert: NginxDownexpr: nginx_up == 0for: 30slabels:severity: criticalannotations:isummary: "nginx異常,實(shí)例:{{ $labels.instance }}"description: "{{ $labels.job }} nginx已關(guān)閉"EOF#重新加載配置chown -R prometheus:prometheus /opt/prometheuscurl -X POST http://localhost:9090/-/reload
訪問Prometheus查看是否成功。
mysql告警
5.3.2 監(jiān)控docker-mysql容器
5.3.2.1部署mysql容器
部署mysql測(cè)試容器。
#docker節(jié)點(diǎn)#創(chuàng)建目錄mkdir /root/mysql#編寫docker-compose.yamlcat >> docker-compose.yaml<< EOFversion: '3.0'services:db:image: mysqlrestart: alwayscontainer_name: mysqlports:- 3306:3306environment:MYSQL_DATABASE: prometheusMYSQL_USER: user1MYSQL_PASSWORD: '000000'MYSQL_RANDOM_ROOT_PASSWORD: '000000'EOF#部署mysqldocker-compose up -d#查看狀態(tài)docker-compose ps[root@docker-server mysql]# docker-compose psName Command State Ports-------------------------------------------------------------------------------mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
5.3.2.2部署mysqld-exporter‘
部署用于采集mysql容器數(shù)據(jù)的exporter。
#docker節(jié)點(diǎn)執(zhí)行#創(chuàng)建工作目錄mkdir /root/mysql/mon#編寫docker-compose.yamlcat >> docker-compose.yaml<< EOFversion: '3.0'services:mysql-exporter:image: prom/mysqld-exportercontainer_name: mysqld-exporterrestart: alwayscommand:- '--collect.info_schema.processlist'- '--collect.info_schema.innodb_metrics'- '--collect.info_schema.tablestats'- '--collect.info_schema.tables'- '--collect.info_schema.userstats'- '--collect.engine_innodb_status'environment:- DATA_SOURCE_NAME=prometheus:000000@(192.168.100.251:3306)/ports:- 9104:9104EOF#部署mysqld-exporterdocker-compose up -d#查看狀態(tài)[root@docker-server mon]# docker-compose psName Command State Ports---------------------------------------------------------------------------------mysqld-exporter /bin/mysqld_exporter --col ... Up 0.0.0.0:9104->9104/tcp添加到prometheus配置。#prometheus節(jié)點(diǎn)#加入以下配置vi /opt/prometheus/prometheus/prometheus.yml- job_name: 'Docker-mysql'scrape_interval: 15sstatic_configs:- targets: ['192.168.100.251:9104']labels:instance: Docker服務(wù)器mysql#熱加載配置
curl -X POST http://localhost:9090/-/reload
訪問grafana的dashboard-import,導(dǎo)入7362和9625,分別為mysql數(shù)據(jù)庫(kù),和mysql數(shù)據(jù)表的dashboard-ID號(hào)。
6 數(shù)據(jù)庫(kù)dashboard
27數(shù)據(jù)表dashboard
5.3.2.3配置mysql的告警設(shè)置
配置mysql的郵箱告警配置文件。
#prometheus節(jié)點(diǎn)#編寫告警配置文件cat >>/opt/prometheus/prometheus/rules/mysql.yml<< EOFgroups:- name: DockerContainersrules:- alert: Containerkilledexpr: time() - container_last_seen > 60for: 0mlabels:severity: warningannotations:isummary: "Docker容器被殺死 容器: {{ $labels.instance }}"description: "{{ $value }}個(gè)容器消失了"- alert: ContainerAbsentexpr: absent(container_last_seen)for: 5mlabels:severity: warningannotations:summary: "無(wú)容器 容器: {{ $labels.instance }}"description: "5分鐘檢查容器不存在,值為: {{ $value }}"EOF#重新加載配置chown -R prometheus:prometheus /opt/Prometheuscurl -X POST http://localhost:9090/-/reload
訪問Prometheus查看是否成功。
8 mysql告警
5.4 alertmanager配置163郵箱告警
5.4.1 配置163郵箱
登錄配置163郵箱開啟POP3/SMTP服務(wù)。
9配置開啟服務(wù)
0 開啟服務(wù)
開啟后會(huì)獲得一個(gè)授權(quán)碼,后續(xù)我們將使用這個(gè)授權(quán)碼配置alertmanager.yml文件對(duì)接我們的163郵箱。
5.4.2 修改alertmanager配置
修改alertmanager配置文件,將我們的郵箱添加到alertmanager。
#Prometheus節(jié)點(diǎn)執(zhí)行cat >>alertmanager.yml<< EOFglobal:
#配置告警郵箱smtp_smarthost: 'smtp.163.com:465'
#163服務(wù)器smtp_from: 'a351719672@163.com'
#發(fā)郵件的郵箱smtp_auth_username: 'a351719672@163.com'
#發(fā)郵件的郵箱用戶名smtp_auth_password: 'xxxxx'
#發(fā)郵件的郵箱密碼smtp_require_tls: false
#進(jìn)行tls驗(yàn)證
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'email'
#全局報(bào)警組,這個(gè)參數(shù)必選receivers:- name: 'email'email_configs:- to: '351719672@qq.com'#收郵件的郵箱inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']EOF#熱加載配置curl -X POST http://localhost:9093/-/reload
5.4.3 測(cè)試告警服務(wù)
測(cè)試各個(gè)告警配置是否能成功生效
5.4.3.1 Nginx告警測(cè)試
停止nginx,測(cè)試nginx存活檢測(cè)是否正常.
#docker節(jié)點(diǎn)執(zhí)行
#測(cè)試nginx存活檢測(cè)是否正常
[root@docker-server ~]# docker stop nginx
nginx
實(shí)例轉(zhuǎn)為pending,進(jìn)而變而FIRING。
nginx狀態(tài)pending
nginx狀態(tài)firing
可以看到郵箱正常接收到了nginx的告警。
郵箱nginx告警
5.4.3.2 Mysql告警測(cè)試
測(cè)試mysql存活檢測(cè)是否正常
#docker節(jié)點(diǎn)執(zhí)行
[root@docker-server ~]# docker stop mysql
Mysql
實(shí)例轉(zhuǎn)為pending,進(jìn)而變而FIRING。
4 mysql狀態(tài)pending
5 mysql狀態(tài)firing
可以看到郵箱正常接收到了mysql的告警。
郵箱mysql告警
5.4.3.3 docker容器告警測(cè)試
測(cè)試docker檢測(cè)是否正常
#docker節(jié)點(diǎn)執(zhí)行
#測(cè)試docker檢測(cè)是否正常
[root@docker-server cadvisor]# docker stop cadvisor
cadvisor
實(shí)例轉(zhuǎn)為pending進(jìn)而變而FIRING。
docker狀態(tài)pending
docker狀態(tài)firing
可以看到郵箱正常接收到了docker的告警。
郵箱docker告警