本文目录导读:

完整脚本
#!/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监控的配置,大大减少了手动配置的工作量,如果您需要其他特定功能,可以随时修改脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播