Linux云计算SRE-第二十一周

构建单节点prometheus,部署node exporter和mongo exporter。构建kibana大盘。包含主机PU使用率,主机MEM使用率,主机网络包速度。mongo db大盘,包含节点在线状态,读操作延迟等

一、实验环境准备
  • 节点信息:

  • node0 (10.0.0.100):Prometheus、Grafana、node exporter

  • node1 (10.0.0.110):node exporter

  • node2 (10.0.0.120):MongoDB、mongo exporter

二、
#1. 安装 Prometheus 和 Grafana
bash 复制代码
操作步骤:
#在 node0 上安装 Prometheus(官方二进制包)
wget https://github.com/prometheus/prometheus/releases/download/v2.53.3/prometheus-2.53.3.linux-amd64.tar.gz
tar -xvf prometheus-2.53.3.linux-amd64.tar.gz
mv prometheus-2.53.3.linux-amd64 /opt/prometheus
ln -s /opt/prometheus/prometheus /usr/local/bin/
ln -s /opt/prometheus/promtool /usr/local/bin/
#浏览器访问:
http://10.0.0.100:9090/
#创建service服务文件
tee /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/prometheus/prometheus \
  --config.file=/opt/prometheus/prometheus.yml \
  --storage.tsdb.path=/opt/prometheus/data
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

#重新加载 systemd 管理器配置
systemctl daemon-reload
#启动并设置开机自启
systemctl start prometheus
systemctl enable prometheus


#安装 Grafana(官方仓库)
curl -fsSL https://apt.grafana.com/gpg.key | gpg --dearmor -o /usr/share/keyrings/grafana.gpg
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list
apt update && apt install -y grafana
systemctl enable --now grafana-server
#2. 安装 node exporter

脚本 `install_node_exporter.sh`:

bash 复制代码
#!/bin/bash

NODE_EXPORTER_VERSION=1.9.0

NODE_EXPORTER_FILE="node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz"
NODE_EXPORTER_URL=https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/${NODE_EXPORTER_FILE}
INSTALL_DIR=/usr/local

HOST=`hostname -I|awk '{print $1}'`


. /etc/os-release

msg_error() {
  echo -e "\033[1;31m$1\033[0m"
}

msg_info() {
  echo -e "\033[1;32m$1\033[0m"
}

msg_warn() {
  echo -e "\033[1;33m$1\033[0m"
}


color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}


install_node_exporter () {
    if [ ! -f  ${NODE_EXPORTER_FILE} ] ;then
        wget ${NODE_EXPORTER_URL} ||  { color "下载失败!" 1 ; exit ; }
    fi
    [ -d $INSTALL_DIR ] || mkdir -p $INSTALL_DIR
    tar xf ${NODE_EXPORTER_FILE} -C $INSTALL_DIR
    cd $INSTALL_DIR &&  ln -s node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64 node_exporter
    mkdir -p $INSTALL_DIR/node_exporter/bin
    cd $INSTALL_DIR/node_exporter &&  mv node_exporter bin/ 
	id prometheus &> /dev/null || useradd -r -s /sbin/nologin prometheus
	chown -R prometheus.prometheus ${INSTALL_DIR}/node_exporter/
	
      
    cat >  /etc/profile.d/node_exporter.sh <<EOF
export NODE_EXPORTER_HOME=${INSTALL_DIR}/node_exporter
export PATH=\${NODE_EXPORTER_HOME}/bin:\$PATH
EOF

}


node_exporter_service () {
    cat > /lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
Type=simple
ExecStart=$INSTALL_DIR/node_exporter/bin/node_exporter
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
User=prometheus
Group=prometheus

[Install]
WantedBy=multi-user.target
EOF
    systemctl daemon-reload
    systemctl enable --now node_exporter.service
}


start_node_exporter() { 
    systemctl is-active node_exporter.service
    if [ $?  -eq 0 ];then  
        echo 
        color "node_exporter 安装完成!" 0
        echo "-------------------------------------------------------------------"
        echo -e "访问链接: \c"
        msg_info "http://$HOST:9100/metrics" 
    else
        color "node_exporter 安装失败!" 1
        exit
    fi 
}

install_node_exporter

node_exporter_service

start_node_exporter

部署命令:

bash 复制代码
#在 node0、node1、node2 上执行
bash install_node_exporter.sh
scp install_node_exporter.sh node1:/root
scp install_node_exporter.sh node2:/root
ssh node1 "bash install_node_exporter.sh"
ssh node2 "bash install_node_exporter.sh"
#3. 安装 MongoDB 和 mongo exporter

操作步骤:

bash 复制代码
#在 node2 上安装 MongoDB
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
echo "deb [ arch=amd64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list
apt update && apt install -y mongodb-org
systemctl enable --now mongod
#配置 MongoDB 认证
mongosh admin --eval 'db.createUser({ user: "admin", pwd: "123456", roles: [ { role: "root", db: "admin" } ] })'
sed -i '/^security:/a\  authorization: enabled' /etc/mongod.conf
systemctl restart mongod
#安装 mongo exporter
wget https://github.com/percona/mongodb_exporter/releases/download/v0.43.1/mongodb_exporter-0.43.1.linux-amd64.tar.gz
tar -xvf mongodb_exporter-0.43.1.linux-amd64.tar.gz
mv mongodb_exporter-0.43.1.linux-amd64 /opt/mongodb_exporter
chown -R prometheus.prometheus /opt/mongodb_exporter
#创建服务文件
cat > /lib/systemd/system/mongodb_exporter.service <<EOF
[Unit]
Description=MongoDB Exporter
After=network.target

[Service]
Type=simple
ExecStart=/opt/mongodb_exporter/mongodb_exporter --mongodb.uri=admin:123456@localhost:27017
User=prometheus
Group=prometheus
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now mongodb_exporter.service
#4. 配置 Prometheus 抓取规则
bash 复制代码
#修改 Prometheus 配置文件
vim /opt/prometheus/prometheus.yml

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['10.0.0.100:9100', '10.0.0.110:9100', '10.0.0.120:9100']
  - job_name: 'mongodb'
    static_configs:
      - targets: ['10.0.0.120:9216']
#检查配置文件语法
promtool check config /opt/prometheus/prometheus.yml
#重启 Prometheus
systemctl restart prometheus
#5. 配置 Grafana 仪表盘
  1. 登录 Grafana:

http://10.0.0.100:3000 (默认账号/密码:admin/admin)(新密码123456)

  1. 添加 Prometheus 数据源:
  1. 导入仪表盘:
  • Node Exporter 仪表盘(ID: 1860):

导入 ID 1860,包含 CPU、内存、网络指标。

  • MongoDB 仪表盘(ID: 13387):

导入 ID 13387,包含节点状态、读写延迟等指标。

  1. 自定义配置:
bash 复制代码
   - 网络包速度:
     rate(node_network_receive_bytes_total{device!~"lo|tun.*"}[5m])
     rate(node_network_transmit_bytes_total{device!~"lo|tun.*"}[5m])
     
   - MongoDB 读延迟:
     mongodb_cmd_duration_seconds_count{operation="find"}
三、验证与测试
  1. Prometheus 验证:

curl http://10.0.0.100:9090/targets

应显示所有 exporter 状态为 `UP`。

  1. Grafana 验证:
  • 检查仪表盘数据是否正常显示。

  • 确认 CPU、内存、网络、MongoDB 指标是否更新。

  • Node Exporter 仪表盘(ID 1860)显示 CPU、内存、网络指标。

  • MongoDB 仪表盘(ID 13387)显示节点状态、读写延迟等。

相关推荐
慧星云2 小时前
魔多 AI 支持 千问 lmage 模型:精准识别文字生成
人工智能·云计算·aigc
Clownseven12 小时前
云市场周报 (2025.08.06):腾讯云开学季、阿里云OSS降价及市场格局分析
阿里云·云计算·腾讯云
记得开心一点嘛12 小时前
实名认证 —— 腾讯云驾驶证识别接口
云计算·腾讯云
记得开心一点嘛12 小时前
实名认证 —— 腾讯云身份证认证接口
云计算·腾讯云
Johny_Zhao17 小时前
SeaTunnel的搭建部署以及测试
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·devops·seatunnel·系统运维
云和数据.ChenGuang21 小时前
envFrom 是一个 列表类型字段bug
大数据·云原生·容器·kubernetes·云计算·bug
Elastic 中国社区官方博客1 天前
升级 Elasticsearch 到新的 AWS Java SDK
java·大数据·elasticsearch·搜索引擎·云计算·全文检索·aws
AOwhisky1 天前
云计算一阶段Ⅱ——12. SELinux 加固 Linux 安全
linux·安全·云计算
记得开心一点嘛1 天前
实名认证 —— 腾讯云人脸识别接口
云计算·腾讯云
INFINI Labs2 天前
Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统
阿里云·云计算·openai·embedding·easysearch