自动配置Zabbix监控的脚本

wen 实用脚本 2

本文目录导读:

自动配置Zabbix监控的脚本

  1. 完整脚本
  2. 使用方法
  3. 脚本功能
  4. 验证安装
  5. 日志文件
  6. 注意事项
  7. 常见问题

完整脚本

#!/bin/bash
# Zabbix自动配置脚本
# 支持 CentOS 7/8, Ubuntu 18.04/20.04, Debian 10/11
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 默认配置
ZABBIX_VERSION="6.0"
ZABBIX_SERVER="127.0.0.1"
ZABBIX_SERVER_ACTIVE="127.0.0.1:10051"
HOST_NAME=$(hostname)
METADATA="Linux"
# 日志文件
LOG_FILE="/var/log/zabbix_auto_config.log"
# 打印带颜色的信息
info() {
    echo -e "${GREEN}[INFO]${NC} $1"
    echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
    echo "[WARN] $(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
error() {
    echo -e "${RED}[ERROR]${NC} $1"
    echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
    exit 1
}
# 检查是否为root用户
check_root() {
    if [[ $EUID -ne 0 ]]; then
        error "此脚本必须以root用户运行"
    fi
}
# 检测操作系统
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        VERSION=$VERSION_ID
    else
        error "无法检测操作系统类型"
    fi
    info "检测到操作系统: $OS $VERSION"
}
# 安装Zabbix仓库
install_repo() {
    info "正在配置Zabbix仓库..."
    case $OS in
        centos|rhel)
            rpm -Uvh "https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/rhel/${VERSION}/x86_64/zabbix-release-${ZABBIX_VERSION}-1.el${VERSION}.noarch.rpm" 2>/dev/null || true
            yum clean all 2>/dev/null
            ;;
        ubuntu)
            wget -q "https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/ubuntu/pool/main/z/zabbix-release/zabbix-release_${ZABBIX_VERSION}-1+ubuntu${VERSION}_all.deb" -O /tmp/zabbix-release.deb
            dpkg -i /tmp/zabbix-release.deb 2>/dev/null || true
            apt-get update -qq
            ;;
        debian)
            wget -q "https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/debian/pool/main/z/zabbix-release/zabbix-release_${ZABBIX_VERSION}-1+debian${VERSION}_all.deb" -O /tmp/zabbix-release.deb
            dpkg -i /tmp/zabbix-release.deb 2>/dev/null || true
            apt-get update -qq
            ;;
        *)
            error "不支持的操作系统: $OS"
            ;;
    esac
    info "Zabbix仓库配置完成"
}
# 安装Zabbix Agent
install_agent() {
    info "正在安装Zabbix Agent..."
    case $OS in
        centos|rhel)
            yum install -y zabbix-agent zabbix-sender zabbix-get 2>&1 >> "$LOG_FILE"
            ;;
        ubuntu|debian)
            apt-get install -y zabbix-agent zabbix-sender zabbix-get 2>&1 >> "$LOG_FILE"
            ;;
    esac
    if [ $? -eq 0 ]; then
        info "Zabbix Agent安装完成"
    else
        error "Zabbix Agent安装失败,请检查日志"
    fi
}
# 配置Zabbix Agent
configure_agent() {
    info "正在配置Zabbix Agent..."
    CONF_FILE="/etc/zabbix/zabbix_agentd.conf"
    # 备份原配置文件
    if [ -f "$CONF_FILE" ]; then
        cp "$CONF_FILE" "${CONF_FILE}.bak.$(date +%Y%m%d%H%M%S)"
    fi
    # 配置基本参数
    cat > "$CONF_FILE" << EOF
# Zabbix Agent 自动配置
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
# 服务器配置
Server=${ZABBIX_SERVER}
ServerActive=${ZABBIX_SERVER_ACTIVE}
Hostname=${HOST_NAME}
# 主动注册配置
HostMetadata=${METADATA}
HostMetadataItem=system.uname
# 刷新配置
RefreshActiveChecks=120
# 启用远程命令
EnableRemoteCommands=1
LogRemoteCommands=1
# 用户参数
UnsafeUserParameters=1
# 包含自定义配置
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF
    info "Zabbix Agent配置完成"
}
# 配置防火墙
configure_firewall() {
    info "正在配置防火墙规则..."
    if command -v firewall-cmd &> /dev/null; then
        # CentOS/RHEL 7+
        firewall-cmd --permanent --add-port=10050/tcp 2>/dev/null || true
        firewall-cmd --permanent --add-port=10051/tcp 2>/dev/null || true
        firewall-cmd --reload 2>/dev/null || true
        info "Firewalld规则已配置"
    elif command -v ufw &> /dev/null; then
        # Ubuntu
        ufw allow 10050/tcp
        ufw allow 10051/tcp
        info "UFW规则已配置"
    elif command -v iptables &> /dev/null; then
        # 通用iptables
        iptables -A INPUT -p tcp --dport 10050 -j ACCEPT
        iptables -A INPUT -p tcp --dport 10051 -j ACCEPT
        info "iptables规则已配置"
    fi
}
# 配置SELinux
configure_selinux() {
    if command -v getenforce &> /dev/null; then
        SELINUX_STATUS=$(getenforce)
        if [ "$SELINUX_STATUS" = "Enforcing" ]; then
            warn "SELinux为强制模式,正在设置SELinux策略..."
            setsebool -P zabbix_can_network on 2>/dev/null || true
            semanage port -a -t zabbix_port_t -p tcp 10050 2>/dev/null || true
            semanage port -a -t zabbix_port_t -p tcp 10051 2>/dev/null || true
            info "SELinux策略已配置"
        fi
    fi
}
# 创建自定义监控项
create_custom_items() {
    info "创建自定义监控项..."
    # 创建监控配置文件
    cat > /etc/zabbix/zabbix_agentd.d/user_monitor.conf << 'EOF'
UserParameter=cpu.usage,top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
UserParameter=memory.usage,free | grep Mem | awk '{print $3/$2 * 100.0}'
UserParameter=disk.usage[*],df $1 | tail -1 | awk '{print $5}' | sed 's/%//'
UserParameter=process.count,ps aux | wc -l
UserParameter=network.connections,netstat -ant | wc -l
UserParameter=swap.usage,free | grep Swap | awk '{if ($2 == 0) print 0; else print $3/$2 * 100.0}'
UserParameter=system.uptime,uptime | awk '{print $3}' | sed 's/,//'
UserParameter=disk.io[*],iostat -d | grep $1 | awk '{print $2}'
UserParameter=disk.read.speed[*],iostat -d | grep $1 | awk '{print $3}'
UserParameter=disk.write.speed[*],iostat -d | grep $1 | awk '{print $4}'
EOF
    # 安装sysstat(用于iostat)
    case $OS in
        centos|rhel)
            yum install -y sysstat 2>&1 >> "$LOG_FILE"
            ;;
        ubuntu|debian)
            apt-get install -y sysstat 2>&1 >> "$LOG_FILE"
            ;;
    esac
    info "自定义监控项创建完成"
}
# 启动Zabbix Agent
start_agent() {
    info "正在启动Zabbix Agent..."
    case $OS in
        centos|rhel)
            systemctl enable zabbix-agent
            systemctl restart zabbix-agent
            ;;
        ubuntu|debian)
            systemctl enable zabbix-agent
            systemctl restart zabbix-agent
            ;;
    esac
    if systemctl is-active --quiet zabbix-agent; then
        info "Zabbix Agent已成功启动"
    else
        error "Zabbix Agent启动失败,请检查配置"
    fi
}
# 验证安装
verify_installation() {
    info "正在验证Zabbix Agent安装..."
    # 检查进程
    if pgrep -x "zabbix_agentd" > /dev/null; then
        info "✓ Zabbix Agent进程运行正常"
    else
        warn "✗ Zabbix Agent进程未运行"
    fi
    # 检查端口
    if ss -tlnp | grep -q ":10050"; then
        info "✓ Zabbix Agent端口监听正常"
    else
        warn "✗ Zabbix Agent端口未监听"
    fi
    # 测试与服务器的连接
    if command -v zabbix_get &> /dev/null; then
        TEST_RESULT=$(zabbix_get -s "127.0.0.1" -k "agent.ping" 2>/dev/null)
        if [ "$TEST_RESULT" = "1" ]; then
            info "✓ Zabbix Agent与服务器连接正常"
        else
            warn "✗ Zabbix Agent与服务器连接测试失败"
        fi
    fi
}
# 显示配置摘要
show_summary() {
    echo ""
    echo -e "${GREEN}========================================${NC}"
    echo -e "${GREEN}    Zabbix Agent 自动配置完成${NC}"
    echo -e "${GREEN}========================================${NC}"
    echo ""
    echo "配置摘要:"
    echo "  Zabbix版本: $ZABBIX_VERSION"
    echo "  主机名: $HOST_NAME"
    echo "  Zabbix服务器: $ZABBIX_SERVER"
    echo "  主动注册服务器: $ZABBIX_SERVER_ACTIVE"
    echo "  主机元数据: $METADATA"
    echo ""
    echo "关键文件位置:"
    echo "  配置文件: /etc/zabbix/zabbix_agentd.conf"
    echo "  日志文件: /var/log/zabbix/zabbix_agentd.log"
    echo "  自定义配置: /etc/zabbix/zabbix_agentd.d/"
    echo ""
    echo "后续步骤:"
    echo "  1. 在Zabbix前端添加此主机"
    echo "  2. 配置自动注册规则(如果需要)"
    echo "  3. 检查监控项是否正常获取数据"
    echo ""
    echo -e "${YELLOW}提示: 为了安全,请修改默认配置中的密码和权限${NC}"
    echo ""
}
# 主函数
main() {
    echo ""
    echo -e "${GREEN}========================================${NC}"
    echo -e "${GREEN}   Zabbix Agent 自动配置脚本${NC}"
    echo -e "${GREEN}========================================${NC}"
    echo ""
    # 检查root权限
    check_root
    # 检测操作系统
    detect_os
    # 处理命令行参数
    while [[ $# -gt 0 ]]; do
        case $1 in
            -s|--server)
                ZABBIX_SERVER="$2"
                shift 2
                ;;
            -a|--active-server)
                ZABBIX_SERVER_ACTIVE="$2"
                shift 2
                ;;
            -n|--hostname)
                HOST_NAME="$2"
                shift 2
                ;;
            -m|--metadata)
                METADATA="$2"
                shift 2
                ;;
            -v|--version)
                ZABBIX_VERSION="$2"
                shift 2
                ;;
            -h|--help)
                echo "用法: $0 [选项]"
                echo "选项:"
                echo "  -s, --server <IP>         Zabbix服务器IP地址 (默认: 127.0.0.1)"
                echo "  -a, --active-server <IP>  主动注册服务器 (默认: 127.0.0.1:10051)"
                echo "  -n, --hostname <NAME>      主机名 (默认: 当前主机名)"
                echo "  -m, --metadata <VALUE>     主机元数据 (默认: Linux)"
                echo "  -v, --version <VERSION>    Zabbix版本 (默认: 6.0)"
                echo "  -h, --help                 显示帮助信息"
                exit 0
                ;;
            *)
                error "未知参数: $1"
                ;;
        esac
    done
    # 执行安装步骤
    install_repo
    install_agent
    configure_agent
    configure_firewall
    configure_selinux
    create_custom_items
    start_agent
    verify_installation
    show_summary
    info "Zabbix Agent自动配置完成!"
}
# 运行主函数
main "$@"

使用方法

下载脚本

wget -O zabbix_auto_config.sh https://your-server.com/zabbix_auto_config.sh
# 或者直接创建文件并粘贴脚本内容

添加执行权限

chmod +x zabbix_auto_config.sh

基本用法

# 使用默认配置安装
./zabbix_auto_config.sh
# 指定Zabbix服务器
./zabbix_auto_config.sh -s 192.168.1.100
# 完整参数示例
./zabbix_auto_config.sh \
    -s 192.168.1.100 \
    -a 192.168.1.100:10051 \
    -n web-server-01 \
    -m "Linux,WebServer" \
    -v 6.0

参数说明

参数 缩写 说明 默认值
--server -s Zabbix服务器IP 0.0.1
--active-server -a 主动注册服务器 0.0.1:10051
--hostname -n 主机名 当前主机名
--metadata -m 主机元数据 Linux
--version -v Zabbix版本 0
--help -h 显示帮助

脚本功能

自动完成的操作

  1. 系统检测

    • 自动识别操作系统(CentOS、Ubuntu、Debian)
    • 自动识别系统版本
  2. 仓库配置

    • 自动添加Zabbix官方仓库
    • 配置GPG密钥
  3. Agent安装

    • 安装zabbix-agent
    • 安装zabbix-sender
    • 安装zabbix-get
  4. 自动配置

    • 配置服务器连接
    • 设置主动注册
    • 添加主机元数据
  5. 防火墙配置

    • 自动开放10050/10051端口
    • 支持firewalld、ufw、iptables
  6. SELinux配置

    • 自动设置SELinux策略
    • 允许Zabbix网络访问
  7. 自定义监控项

    • CPU使用率
    • 内存使用率
    • 磁盘使用率
    • 进程数量
    • 网络连接数
    • 系统运行时间
    • 磁盘IO统计

验证安装

检查Agent状态

# 检查进程
ps aux | grep zabbix_agent
# 检查端口
ss -tlnp | grep 10050
# 检查服务状态
systemctl status zabbix-agent

测试监控项

# 测试基础监控项
zabbix_get -s 127.0.0.1 -k "system.hostname"
zabbix_get -s 127.0.0.1 -k "system.uname"
zabbix_get -s 127.0.0.1 -k "agent.ping"
# 测试自定义监控项
zabbix_get -s 127.0.0.1 -k "cpu.usage"
zabbix_get -s 127.0.0.1 -k "memory.usage"
zabbix_get -s 127.0.0.1 -k "disk.usage[/]"

日志文件

脚本操作日志保存在:/var/log/zabbix_auto_config.log

注意事项

  1. 网络要求

    • 确保服务器能够访问Zabbix仓库
    • 确保监控主机能够访问Zabbix Server
  2. 安全建议

    • 使用强密码
    • 配置防火墙规则
    • 限制Agent访问权限
    • 使用TLS加密通信
  3. 性能优化

    • 根据主机配置调整监控间隔
    • 合理设置日志大小
    • 监控项数量控制

常见问题

安装失败

# 检查日志
tail -f /var/log/zabbix_auto_config.log
tail -f /var/log/zabbix/zabbix_agentd.log

连接问题

# 测试网络连接
telnet zabbix-server 10051
# 检查防火墙
iptables -L -n | grep 10050

权限问题

# 检查SELinux
getenforce
# 临时禁用SELinux
setenforce 0

这个脚本会根据您的实际环境自动完成Zabbix监控的配置,大大减少了手动配置的工作量,如果您需要其他特定功能,可以随时修改脚本。

抱歉,评论功能暂时关闭!