当前位置: 首页 > news >正文

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
操作步骤:
#在 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`:

#!/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

部署命令:

#在 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

操作步骤:

#在 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 抓取规则
#修改 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)

2. 添加 Prometheus 数据源:
   - 名称:Prometheus
   - URL:`http://10.0.0.100:9090`

3. 导入仪表盘:
   - Node Exporter 仪表盘(ID: 1860):
     导入 ID 1860,包含 CPU、内存、网络指标。
     
   - MongoDB 仪表盘(ID: 13387):
     导入 ID 13387,包含节点状态、读写延迟等指标。    

4. 自定义配置:

   - 网络包速度:
     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`。

2. Grafana 验证:
   - 检查仪表盘数据是否正常显示。
   - 确认 CPU、内存、网络、MongoDB 指标是否更新。
   - Node Exporter 仪表盘(ID 1860)显示 CPU、内存、网络指标。
   - MongoDB 仪表盘(ID 13387)显示节点状态、读写延迟等。

相关文章:

  • Java课程设计(双人对战游戏)持续更新......
  • 方法指南:利用边缘计算实现低延迟直播流媒体服务
  • 【STM32】GPIO
  • GMII 接口
  • 泛目录程序,无极泛目录是如何搭建强大站群的?
  • mac部署CAT监控服务
  • 构建可扩展、可靠的网络抓取、监控和自动化应用程序的终极指南
  • Go常用的设计模式
  • C++:动态内存管理(含五大内存分区区分)详解
  • F.binary_cross_entropy与sklearn.metric.log_loss的比较
  • 排序算法(插入,希尔,选择,冒泡,堆,快排,归并)
  • 智慧养老时代:老年人慢性病预防与生活方式优化
  • vscode在使用 alt + tab 切换程序窗口时,输入法总是自动变为中文模式
  • 并查集(Union-Find)数据结构详解
  • Realsense-D400 系列手动曝光控制
  • 【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置
  • 质量工程:数字化转型时代的质量体系重构
  • 分布式锁,rediss,redisson,看门狗,可重入,可重试
  • ArcGIS 10.8.1之后发布栅格数据的MapServer 动态工作空间 替换数据源渲染问题
  • 基于Spring AI开发本地Jenkins MCP Server服务
  • 国内多景区实行一票游多日:从门票经济向多元化“链式经济”转型
  • 中国海警局新闻发言人就日民用飞机侵闯我钓鱼岛领空发表谈话
  • 中虎跳峡封闭仍有游客逆行打卡,景区:专人值守防意外
  • 江西望仙谷回应“游客凌晨等不到接驳车”:已限流,接驳车运行时间延长
  • 国羽3比0横扫日本晋级苏迪曼杯决赛,将战韩国与印尼胜者
  • 亚马逊一季度利润增超六成:云业务增速放缓,警告关税政策或影响业绩指引