Prometheus和Grafana部署方案
本地化部署监控主机
1.1简介
prometheus:普罗米修斯适用于监控的对象有虚拟机、数据库、docker容器、队列等,通过prometheus.yml配置文件将主节点premetheus与应用节点关联起来。
1.2环境准备
| IP | 描述 | 系统 |
|---|---|---|
| 192.168.136.131 | Premetheus&grafana&blacbox主节点 | Centos7 |
| 192.168.136.129 | 应用node-exporter节点 | Centos7 |
1.3部署步骤
1.3.1基础组件部署
1.3.1.1安装docker
安装 Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动并验证
sudo systemctl start docker
sudo systemctl enable docker
sudo docker --version # 应显示 Docker 版本号

1.3.1.2安装prometheus主程序
(1)下载普罗米修斯镜像:
docker pull prom/prometheus
(2)创建普罗米修斯配置文件挂载目录及新建配置文件
mkdir /var/prometheus/data 授权 chmod 777 /var/prometheus
(3)修改配置文件
cd /var/prometheus
vim prometheus.yml

(4)创建并运行普罗米修斯容器
docker run -d --name=prometheus -p 9090:9090 --restart=always -v /var/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /var/prometheus/data:/prometheus prom/prometheus
(5)验证是否运行成功
1.3.1.3安装应用节点exporter
(1) 拉取镜像
docker pull prom/node-exporter
(2) 启动容器
docker run -d --name node-exporter --restart=always -p 9100:9100 prom/node-exporter
(3)验证node-exporter以及主节点是否正常


1.3.2Grafana监控界面部署
1.3.2.1主节点部署
(1)下载镜像
docker pull grafana/grafana
(2)创建并运行grafana容器
docker run -d --name=grafana --restart=always -p 3000:3000 grafana/grafana
(3)验证 首次登录账户密码admin admin

1.3.2.2Grafana界面配置
(1)修改中文


(2)增加仪表盘 centos主机监控推荐12633仪表ID 16098



更多仪表盘参考地址https://grafana.com/grafana/dashboards/
(3)配置数据源



(4)控制台展示

1.3.3Blackbox Exporter部署
1.3.3.1端口监控部署
docker pull prom/blackbox-exporter
docker run -d --name=blackbox-exporter --restart=always -p 9115:9115 prom/blackbox-exporter
1.3.3.2配置
vim /var/prometheus/prometheus.yml增加
`global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- rules/*.rules
scrape_configs:
-
job_name: 'prometheus'
scrape_interval: 10s
static_configs:- targets: ['localhost:9090']
-
job_name: 'node_exporter_remote'
scrape_interval: 10s
static_configs:- targets: ['192.168.136.136:9100','192.168.136.137:9100']
-
job_name: 'port_status'
metrics_path: /probe
params:
module: [tcp_connect]
static_configs:- targets: ['192.168.136.137:22']
labels:
instance: 'port_22端口检测'
group: '端口监控组'
tags: '192.168.136.137:22' - targets: ['192.168.136.137:8080']
labels:
instance: 'port_8080端口检测'
group: '端口监控组' - targets: ['192.168.136.137:80']
labels:
instance: 'port_80端口检测'
group: '端口监控组'
relabel_configs: - source_labels: [address]
target_label: __param_target - target_label: address
replacement: 192.168.136.136:9115
- targets: ['192.168.136.137:22']
-
job_name: 'http_status'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:- targets: ['http://www.baidu.com']
labels:
instance: '百度一下www.baodu.com'
group: 'web监控组' - targets: ['http://192.168.136.137:8080/']
labels:
instance: 'tomcat首页'
group: 'web监控组'
relabel_configs: - source_labels: [address]
target_label: __param_target - target_label: address
replacement: 192.168.136.136:9115
`
最终呈现

- targets: ['http://www.baidu.com']

2打包镜像移植
2.1镜像导出
docker save -o prometheus.tar.gz prom/prometheus
docker save -o node-exporter.tar.gz prom/node-exporter
docker save -o grafana.tar.gz grafana/grafana
docker save -o blackbox-exporter.tar.gz prom/blackbox-exporter
2.2导入镜像至新环境

2.3执行脚本部署--一键部署
2.3.1运行脚本1
``#!/bin/bash
DATA_DIR="/var/prometheus/data"
if [ -d "$DATA_DIR" ]; then
echo "错误:目录 $DATA_DIR 已存在!"
exit 1
fi
mkdir -p "$DATA_DIR" || { echo "创建目录失败!"; exit 1; }
chmod 777 "$DATA_DIR"
CONFIG_CONTENT=$(cat << EOF
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- rules/*.rules
scrape_configs:
-
job_name: 'prometheus'
scrape_interval: 10s
static_configs:- targets: ['localhost:9090']
-
job_name: 'node_exporter_remote'
scrape_interval: 10s
static_configs:- targets: ['0.0.0.0:9100','0.0.0.0:9100']
EOF
)
- targets: ['0.0.0.0:9100','0.0.0.0:9100']
echo "$CONFIG_CONTENT" > "/var/prometheus/prometheus.yml" || {
echo "写入配置文件失败!"
exit 1
}
chmod -R 777 /var/prometheus/
echo "配置文件已生成:/var/prometheus/prometheus.yml"``
2.3.2运行脚本2
`#!/bin/bash
CONFIG_FILE="/var/prometheus/prometheus.yml"
if grep -q '0.0.0.0' "$CONFIG_FILE"; then
echo "错误:检测到未修改node监控节点IP(存在0.0.0.0),请检查配置文件/var/prometheus/prometheus.yml后重试。"
exit 1
fi
declare -a PORTS=(9090 9100 3000 9115)
for PORT in "${PORTS[@]}"; do
if ss -tulnp | grep -q ":$PORT "; then
echo "错误:端口$PORT已被占用,请检查相关服务后重试。"
exit 1
fi
done
echo "正在检查本地镜像文件..."
LOCAL_IMAGES=(prometheus.tar.gz node-exporter.tar.gz grafana.tar.gz blackbox-exporter.tar.gz)
for IMG_FILE in "${LOCAL_IMAGES[@]}"; do
if [ ! -f "$IMG_FILE" ]; then
echo "错误:未找到镜像文件 $IMG_FILE"
exit 1
fi
done
echo "所有镜像文件检查通过!"
echo "正在加载Docker镜像..."
for IMG_FILE in "${LOCAL_IMAGES[@]}"; do
docker load -i "$IMG_FILE" &>/dev/null &&
echo "成功加载镜像 $(basename "$IMG_FILE")"
done
echo "正在创建Prometheus容器..."
docker run -d --name=prometheus
-p 9090:9090
--restart=always
-v /var/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
-v /var/prometheus/data:/prometheus
prom/prometheus &>/dev/null
echo "正在创建Node Exporter容器..."
docker run -d --name=node-exporter
-p 9100:9100
--restart=always
prom/node-exporter &>/dev/null
echo "正在创建Grafana容器..."
docker run -d --name=grafana
-p 3000:3000
--restart=always
grafana/grafana &>/dev/null
echo "正在创建Blackbox容器..."
docker run -d --name=blackbox-exporter
-p 9115:9115
--restart=always
prom/blackbox-exporter &>/dev/null
echo "正在验证容器运行状态..."
sleep 10
docker ps -a | grep -E "prometheus|node-exporter|grafana|blackbox-exporter" | while read -r line; do
CONTAINER_NAME=$(echo "$line" | awk '{print $NF}')
if [[ "$CONTAINER_NAME" == "Exited" ]]; then
echo "警告:容器$CONTAINER_NAME未正常运行!"
exit 1
fi
done
echo "所有容器已成功创建并运行。"`

浙公网安备 33010602011771号