Instalador do Zabbix Agent Automático
Script interativo (CLI) projetado para simplificar e padronizar o deploy de monitoramento em servidores Linux. Ele automatiza a adição de repositórios oficiais, instalação do pacote e configuração do arquivo .conf em poucos passos.
Pré-requisitos
Para que o script faça a comunicação externa e baixe os pacotes necessários, os seguintes binários devem estar presentes no sistema:
curlwget
Nota: A execução deve ser feita obrigatoriamente com usuário root ou permissão de sudo integral.
Como Funciona
O assistente guiará a instalação em etapas lógicas para evitar configurações incorretas:
- Checagem de Privilégios: Bloqueia a execução imediatamente se não for
root. - Versão do Zabbix: Seleção da versão do repositório oficial (5.0, 6.0, 6.4, 7.0 ou 7.2).
- Distribuição do SO: Suporte mapeado para Ubuntu, Debian, RHEL (CentOS/Rocky/Alma) e SUSE/SLES.
- Versão do SO: Opções filtradas de acordo com a distribuição escolhida no passo anterior.
- Tipo de Agente: Escolha entre Zabbix Agent Clássico (em C) ou Zabbix Agent 2 (em Go).
- Confirmação: Apresenta o resumo das variáveis escolhidas antes de realizar qualquer alteração no sistema.
- Instalação: Download silencioso do
zabbix-release(curl+dpkgourpm -Uvh), atualização dos índices e instalação do agente. - Configuração do .conf: Solicita interativamente os parâmetros
Server,ServerActiveeHostname. Faz backup automático do arquivo original e injeta as novas configurações. - Gerenciamento de Serviço: Executa o
systemctl enable --nowpara garantir que o agente suba com o boot do sistema e exibe o status final (systemctl status).
#!/usr/bin/env bash
#
# install-zabbix-agent.sh
# Menu-driven installer for Zabbix Agent / Zabbix Agent 2 on Linux.
# Supports Debian, Ubuntu, RHEL/CentOS/Rocky/AlmaLinux and SLES.
set -euo pipefail
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[ OK ]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[FAIL]${NC} $*" >&2; }
require_root() {
if [[ "${EUID}" -ne 0 ]]; then
error "Este script precisa ser executado como root (use sudo)."
exit 1
fi
}
pause() {
read -rp "Pressione ENTER para continuar..." _
}
# ---------------------------------------------------------------------------
# Menu: Versao do Zabbix
# ---------------------------------------------------------------------------
choose_zabbix_version() {
local options=("5.0 (LTS)" "6.0 (LTS)" "6.4" "7.0 (LTS)" "7.2")
local values=("5.0" "6.0" "6.4" "7.0" "7.2")
echo ""
echo "=== Selecione a versao do Zabbix ==="
local i
for i in "${!options[@]}"; do
printf " %d) %s\n" "$((i + 1))" "${options[$i]}"
done
read -rp "Opcao: " choice
if [[ ! "${choice}" =~ ^[0-9]+$ ]] || (( choice < 1 || choice > ${#values[@]} )); then
error "Opcao invalida."
exit 1
fi
ZBX_VERSION="${values[$((choice - 1))]}"
}
# ---------------------------------------------------------------------------
# Menu: Distribuicao
# ---------------------------------------------------------------------------
choose_distro() {
local options=("Ubuntu" "Debian" "RHEL / CentOS / Rocky / AlmaLinux" "SUSE / SLES")
local values=("ubuntu" "debian" "rhel" "sles")
echo ""
echo "=== Selecione a distribuicao ==="
local i
for i in "${!options[@]}"; do
printf " %d) %s\n" "$((i + 1))" "${options[$i]}"
done
read -rp "Opcao: " choice
if [[ ! "${choice}" =~ ^[0-9]+$ ]] || (( choice < 1 || choice > ${#values[@]} )); then
error "Opcao invalida."
exit 1
fi
DISTRO="${values[$((choice - 1))]}"
}
# ---------------------------------------------------------------------------
# Menu: Versao do SO (depende da distro escolhida)
# ---------------------------------------------------------------------------
choose_os_version() {
local options=()
local values=()
case "${DISTRO}" in
ubuntu)
options=("20.04 (Focal)" "22.04 (Jammy)" "24.04 (Noble)")
values=("20.04" "22.04" "24.04")
;;
debian)
options=("10 (Buster)" "11 (Bullseye)" "12 (Bookworm)" "13 (Trixie)")
values=("10" "11" "12" "13")
;;
rhel)
options=("7" "8" "9")
values=("7" "8" "9")
;;
sles)
options=("15")
values=("15")
;;
esac
echo ""
echo "=== Selecione a versao do SO ==="
local i
for i in "${!options[@]}"; do
printf " %d) %s\n" "$((i + 1))" "${options[$i]}"
done
read -rp "Opcao: " choice
if [[ ! "${choice}" =~ ^[0-9]+$ ]] || (( choice < 1 || choice > ${#values[@]} )); then
error "Opcao invalida."
exit 1
fi
OS_VERSION="${values[$((choice - 1))]}"
}
# ---------------------------------------------------------------------------
# Menu: Agent ou Agent2
# ---------------------------------------------------------------------------
choose_agent_type() {
echo ""
echo "=== Selecione o pacote a instalar ==="
echo " 1) Zabbix Agent (classico)"
echo " 2) Zabbix Agent 2"
read -rp "Opcao: " choice
case "${choice}" in
1) AGENT_PKG_BASENAME="zabbix-agent" ;;
2) AGENT_PKG_BASENAME="zabbix-agent2" ;;
*) error "Opcao invalida."; exit 1 ;;
esac
}
# ---------------------------------------------------------------------------
# Instalacao do repositorio oficial Zabbix
# ---------------------------------------------------------------------------
install_repo_deb() {
local os_tag="$1" # ubuntu | debian
local release_deb="zabbix-release_latest+${os_tag}${OS_VERSION}_all.deb"
local url="https://repo.zabbix.com/zabbix/${ZBX_VERSION}/${os_tag}/pool/main/z/zabbix-release/${release_deb}"
info "Baixando repositorio Zabbix: ${url}"
wget -O "/tmp/${release_deb}" "${url}"
dpkg -i "/tmp/${release_deb}"
apt-get update -y
}
install_repo_rhel() {
local el_ver="${OS_VERSION}"
local rpm_name="zabbix-release-${ZBX_VERSION}-1.el${el_ver}.noarch.rpm"
local url="https://repo.zabbix.com/zabbix/${ZBX_VERSION}/rhel/${el_ver}/x86_64/${rpm_name}"
info "Baixando repositorio Zabbix: ${url}"
rpm -Uvh "${url}"
if command -v dnf >/dev/null 2>&1; then
dnf clean all
else
yum clean all
fi
}
install_repo_sles() {
local url="https://repo.zabbix.com/zabbix/${ZBX_VERSION}/sles/${OS_VERSION}/x86_64/zabbix-release-${ZBX_VERSION}-1.sles${OS_VERSION}.noarch.rpm"
info "Baixando repositorio Zabbix: ${url}"
rpm -Uvh "${url}"
zypper --gpg-auto-import-keys refresh
}
# ---------------------------------------------------------------------------
# Instalacao do pacote do agente
# ---------------------------------------------------------------------------
install_agent_package() {
case "${DISTRO}" in
ubuntu|debian)
apt-get install -y "${AGENT_PKG_BASENAME}"
;;
rhel)
if command -v dnf >/dev/null 2>&1; then
dnf install -y "${AGENT_PKG_BASENAME}"
else
yum install -y "${AGENT_PKG_BASENAME}"
fi
;;
sles)
zypper install -y "${AGENT_PKG_BASENAME}"
;;
esac
}
# ---------------------------------------------------------------------------
# Configuracao basica (Server / Hostname) e start do servico
# ---------------------------------------------------------------------------
configure_agent() {
local conf_file="/etc/zabbix/${AGENT_PKG_BASENAME}.conf"
if [[ ! -f "${conf_file}" ]]; then
warn "Arquivo de configuracao ${conf_file} nao encontrado, pulando configuracao automatica."
return
fi
echo ""
read -rp "IP/Hostname do Zabbix Server (Server=): " ZBX_SERVER
read -rp "IP/Hostname do Zabbix Server para ativo (ServerActive=) [ENTER = mesmo valor acima]: " ZBX_SERVER_ACTIVE
read -rp "Hostname deste agente (Hostname=) [ENTER = $(hostname)]: " ZBX_HOSTNAME
ZBX_SERVER_ACTIVE="${ZBX_SERVER_ACTIVE:-${ZBX_SERVER}}"
ZBX_HOSTNAME="${ZBX_HOSTNAME:-$(hostname)}"
cp "${conf_file}" "${conf_file}.bak.$(date +%s)"
sed -i \
-e "s/^Server=.*/Server=${ZBX_SERVER}/" \
-e "s/^ServerActive=.*/ServerActive=${ZBX_SERVER_ACTIVE}/" \
-e "s/^Hostname=.*/Hostname=${ZBX_HOSTNAME}/" \
"${conf_file}"
ok "Configuracao aplicada em ${conf_file} (backup salvo ao lado)."
}
enable_and_start_service() {
systemctl enable "${AGENT_PKG_BASENAME}"
systemctl restart "${AGENT_PKG_BASENAME}"
systemctl --no-pager status "${AGENT_PKG_BASENAME}" || true
}
# ---------------------------------------------------------------------------
# Main
# ---------------------------------------------------------------------------
main() {
require_root
echo "======================================="
echo " Instalador Zabbix Agent / Agent 2"
echo "======================================="
choose_zabbix_version
choose_distro
choose_os_version
choose_agent_type
echo ""
echo "Resumo:"
echo " Zabbix versao : ${ZBX_VERSION}"
echo " Distribuicao : ${DISTRO}"
echo " Versao do SO : ${OS_VERSION}"
echo " Pacote : ${AGENT_PKG_BASENAME}"
echo ""
read -rp "Confirmar instalacao? [s/N] " confirm
if [[ ! "${confirm}" =~ ^[sSyY]$ ]]; then
warn "Instalacao cancelada pelo usuario."
exit 0
fi
case "${DISTRO}" in
ubuntu) install_repo_deb "ubuntu" ;;
debian) install_repo_deb "debian" ;;
rhel) install_repo_rhel ;;
sles) install_repo_sles ;;
esac
install_agent_package
configure_agent
enable_and_start_service
ok "Instalacao do ${AGENT_PKG_BASENAME} concluida com sucesso."
}
main "$@"