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 版本号

image

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
image
(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以及主节点是否正常
image
image

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
image

1.3.2.2Grafana界面配置

(1)修改中文
image
image
(2)增加仪表盘 centos主机监控推荐12633仪表ID 16098
image

image

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

image

image

(4)控制台展示
image

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
  • 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
      `
      最终呈现

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导入镜像至新环境

image

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
      )

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 "所有容器已成功创建并运行。"`

posted @ 2025-03-27 14:43  17岁AD想打职业呢  阅读(204)  评论(0)    收藏  举报