MST
星途 面试题库

面试题:基于Bash脚本的分布式监控系统协调

假设有一个分布式系统,由多台服务器组成,需要使用Bash脚本来构建一个监控系统。要求实现主从架构,主服务器负责收集各从服务器的监控数据(如内存使用率、网络流量等),从服务器定期将监控数据推送给主服务器。主服务器对收集到的数据进行分析,当某个从服务器的某项指标异常时,主服务器要能及时通知相关人员。请描述实现这个监控系统的整体思路,并给出关键部分的Bash代码示例。
29.1万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

整体思路

  1. 从服务器端
    • 编写脚本定期收集本地监控数据,如使用 free 命令获取内存使用率,sar 等命令获取网络流量。
    • 将收集到的数据推送给主服务器,可使用 curl 等工具通过网络发送数据到主服务器的指定接口。
  2. 主服务器端
    • 搭建接收数据的接口,可借助 httpd 等 Web 服务器或简单的 nc 监听端口来接收从服务器推送的数据。
    • 对接收的数据进行分析,设定各项指标的正常范围,判断从服务器指标是否异常。
    • 当指标异常时,通过邮件(如 mail 命令)或其他方式通知相关人员。

关键部分Bash代码示例

从服务器收集并推送数据脚本(以内存使用率为例)

#!/bin/bash

# 获取内存使用率
memory_usage=$(free -h | awk 'NR==2{printf "%.2f%%", ($3/$2)*100}')

# 推送数据到主服务器(假设主服务器IP为192.168.1.100,端口为8080)
curl -X POST -d "server=$(hostname)&memory_usage=$memory_usage" http://192.168.1.100:8080/receive_data

主服务器接收数据脚本(简单使用 nc 监听端口示例)

#!/bin/bash

# 监听端口8080接收数据
nc -l 8080 | while read data; do
    # 解析数据,假设数据格式为 server=xxx&memory_usage=xx.xx%
    IFS='=&' read -r -a parts <<< "$data"
    server=${parts[1]}
    memory_usage=${parts[3]}

    # 分析数据,假设内存使用率超过80%为异常
    if (( $(echo "$memory_usage > 80" | bc -l) )); then
        echo "Server $server has high memory usage: $memory_usage" | mail -s "Memory Alert" admin@example.com
    fi
done

上述代码仅为示例,实际应用中需要根据具体需求进行完善,如网络安全、数据格式校验等。