Last active 3 weeks ago

zabbix_agent.sh Raw
1#!/bin/sh
2# zbx-agent2-bootstrap.sh
3# Installs and configures Zabbix Agent2 on Debian/Ubuntu with ACTIVE checks (no inbound port needed).
4# Usage:
5# sudo sh zbx-agent2-bootstrap.sh --server 192.168.1.10 [--branch 7.0] [--hostname myvm] [--metadata "linux,docker"] [--docker]
6set -eu
7
8SERVER=""
9BRANCH="7.0"
10HOSTNAME_OVERRIDE=""
11METADATA="linux"
12ENABLE_DOCKER=0
13
14die() { echo "ERROR: $*" >&2; exit 1; }
15
16while [ $# -gt 0 ]; do
17 case "$1" in
18 --server) SERVER="${2:-}"; shift 2 ;;
19 --branch) BRANCH="${2:-}"; shift 2 ;;
20 --hostname) HOSTNAME_OVERRIDE="${2:-}"; shift 2 ;;
21 --metadata) METADATA="${2:-}"; shift 2 ;;
22 --docker) ENABLE_DOCKER=1; shift 1 ;;
23 -h|--help)
24 cat <<EOF
25Usage: sudo sh $0 --server <zabbix_server_ip_or_dns> [options]
26Options:
27 --branch <7.0|6.0|6.4> Zabbix repo branch (default: 7.0)
28 --hostname <name> Hostname shown in Zabbix (default: system hostname)
29 --metadata <string> HostMetadata for auto-registration (default: linux)
30 --docker Add user 'zabbix' to docker group (optional)
31EOF
32 exit 0
33 ;;
34 *) die "Unknown argument: $1" ;;
35 esac
36done
37
38[ -n "$SERVER" ] || die "--server is required"
39
40# Must be root
41if [ "$(id -u)" != "0" ]; then
42 die "Run as root (use sudo)"
43fi
44
45# Detect OS
46[ -r /etc/os-release ] || die "/etc/os-release not found"
47# shellcheck disable=SC1091
48. /etc/os-release
49
50CODENAME="${VERSION_CODENAME:-}"
51[ -n "$CODENAME" ] || die "VERSION_CODENAME is empty (unsupported OS?)"
52
53case "${ID:-}" in
54 debian) REPO_BASE="https://repo.zabbix.com/zabbix/${BRANCH}/debian" ;;
55 ubuntu) REPO_BASE="https://repo.zabbix.com/zabbix/${BRANCH}/ubuntu" ;;
56 *)
57 echo "${ID_LIKE:-}" | grep -qi debian || die "Only Debian/Ubuntu are supported (ID=${ID:-unknown})"
58 REPO_BASE="https://repo.zabbix.com/zabbix/${BRANCH}/debian"
59 ;;
60esac
61
62# Determine hostname for Zabbix
63if [ -n "$HOSTNAME_OVERRIDE" ]; then
64 ZBX_HOSTNAME="$HOSTNAME_OVERRIDE"
65else
66 ZBX_HOSTNAME="$(hostname -s 2>/dev/null || hostname || echo "unknown-host")"
67fi
68
69echo "[*] Installing prerequisites..."
70export DEBIAN_FRONTEND=noninteractive
71apt-get update -y
72apt-get install -y --no-install-recommends ca-certificates curl gnupg
73
74echo "[*] Adding Zabbix repo key..."
75install -d -m 0755 /usr/share/keyrings
76curl -fsSL "https://repo.zabbix.com/zabbix-official-repo.key" | gpg --dearmor -o /usr/share/keyrings/zabbix.gpg
77
78echo "[*] Adding Zabbix repo list..."
79cat >/etc/apt/sources.list.d/zabbix.list <<EOF
80deb [signed-by=/usr/share/keyrings/zabbix.gpg] ${REPO_BASE} ${CODENAME} main
81EOF
82
83apt-get update -y
84
85echo "[*] Installing zabbix-agent2..."
86apt-get install -y zabbix-agent2
87
88echo "[*] Writing Agent2 config (active-only)..."
89install -d -m 0755 /etc/zabbix/zabbix_agent2.d
90cat >/etc/zabbix/zabbix_agent2.d/99-bootstrap.conf <<EOF
91### Managed by zbx-agent2-bootstrap.sh
92Server=${SERVER}
93ServerActive=${SERVER}
94Hostname=${ZBX_HOSTNAME}
95HostMetadata=${METADATA}
96EOF
97
98echo "[*] Enabling and restarting zabbix-agent2..."
99systemctl enable --now zabbix-agent2
100systemctl restart zabbix-agent2
101
102if [ "$ENABLE_DOCKER" -eq 1 ]; then
103 if getent group docker >/dev/null 2>&1; then
104 echo "[*] Adding user 'zabbix' to docker group..."
105 usermod -aG docker zabbix || true
106 echo "[!] NOTE: docker.sock access is powerful. Prefer docker-socket-proxy if you want safer Docker monitoring."
107 else
108 echo "[!] docker group not found; skipping --docker"
109 fi
110fi
111
112echo "[*] Agent status (first lines):"
113systemctl --no-pager --full status zabbix-agent2 | sed -n '1,12p'
114
115echo
116echo "[OK] Installed and configured Zabbix Agent2 (active-only)."
117echo " Hostname: ${ZBX_HOSTNAME}"
118echo " ServerActive: ${SERVER}"
119echo " HostMetadata: ${METADATA}"
120echo
121echo "Next step on Zabbix Server: create an Autoregistration Action that matches HostMetadata='${METADATA}'"
122echo "and links the appropriate template (e.g., 'Linux by Zabbix agent active')."
123