本文目录导读:

完整脚本
#!/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 |
显示帮助 |
脚本功能
自动完成的操作
-
系统检测
- 自动识别操作系统(CentOS、Ubuntu、Debian)
- 自动识别系统版本
-
仓库配置
- 自动添加Zabbix官方仓库
- 配置GPG密钥
-
Agent安装
- 安装zabbix-agent
- 安装zabbix-sender
- 安装zabbix-get
-
自动配置
- 配置服务器连接
- 设置主动注册
- 添加主机元数据
-
防火墙配置
- 自动开放10050/10051端口
- 支持firewalld、ufw、iptables
-
SELinux配置
- 自动设置SELinux策略
- 允许Zabbix网络访问
-
自定义监控项
- 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
注意事项
-
网络要求
- 确保服务器能够访问Zabbix仓库
- 确保监控主机能够访问Zabbix Server
-
安全建议
- 使用强密码
- 配置防火墙规则
- 限制Agent访问权限
- 使用TLS加密通信
-
性能优化
- 根据主机配置调整监控间隔
- 合理设置日志大小
- 监控项数量控制
常见问题
安装失败
# 检查日志 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监控的配置,大大减少了手动配置的工作量,如果您需要其他特定功能,可以随时修改脚本。