2025年总结zabbix手动部署过程!
1.下载软件包。
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_6.0+ubuntu22.04_all.deb
dpkg -i zabbix-release_latest_6.0+ubuntu22.04_all.deb
apt update
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
2 准备数据库和用户
mysql -uroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
3 初绐化数据库的表
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 zabbix
修改Zabbix Server 连接MySQL
vim /etc/zabbix/zabbix_server.conf
DBPassword=123456
4 修改PHP配置
vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai
systemctl restart zabbix-server zabbix-agent apache2
浏览器访问
http://10.0.0.102/zabbix
5.总结zabbix主动模式和被动模式简介及实现
被动模式(Passive Mode):
由 Zabbix Server 向 Agent 请求监控数据。
特点:服务端主动请求,适用于网络稳定的环境。
主动模式(Active Mode):
Zabbix Agent 主动向 Zabbix Server 推送监控数据。
特点:减少服务端负载,适用于客户端频繁离线的环境。
6 总结zabbix proxy主动及被动案例
7 .总结自定义监控,监控win, nginx, 并基于短信/微信报警。
8.完成1键安装zabbix agent脚本,可以用于ubuntu系统。
#!/bin/bash
ZABBIX_SERVER=zabbix.yu.org
ZABBIX_MAJOR_VER=6.0
ZABBIX_VER=${ZABBIX_MAJOR_VER}-4
URL="mirror.tuna.tsinghua.edu.cn/zabbix"
ZABBIX_HOSTNAME=web-`hostname -I`
. /etc/os-release
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
install_zabbix_agent () {
if [ $ID = "centos" -o $ID = "rocky" ];then
VERSION_ID=`echo $VERSION_ID|awk -F. '{print $1}'`
wget https://$URL/zabbix/${ZABBIX_MAJOR_VER}/rhel/${VERSION_ID}/x86_64/zabbix-release-${ZABBIX_VER}.el${VERSION_ID}.noarch.rpm
rpm -Uvh zabbix-release-${ZABBIX_VER}.el${VERSION_ID}.noarch.rpm
if [ $? -eq 0 ];then
color "YUM仓库准备完成" 0
else
color "YUM仓库配置失败,退出" 1
exit
fi
sed -i "s#repo.zabbix.com#${URL}#" /etc/yum.repos.d/zabbix.repo
yum -y install zabbix-agent || { color "YUM安装失败,退出" 1; exit; }
else
wget https://$URL/zabbix/${ZABBIX_MAJOR_VER}/ubuntu/pool/main/z/zabbix-release/zabbix-release_${ZABBIX_VER}+ubuntu${VERSION_ID}_all.deb
if [ $? -eq 0 ];then
color "APT仓库准备完成" 0
else
color "APT仓库配置失败,退出" 1
exit
fi
dpkg -i zabbix-release_${ZABBIX_VER}+ubuntu${VERSION_ID}_all.deb
sed -i "s#repo.zabbix.com#${URL}#" /etc/apt/sources.list.d/zabbix.list
apt update
apt -y install zabbix-agent
fi
}
config_zabbix_agent (){
sed -i "/^Server=127.0.0.1/c Server=$ZABBIX_SERVER" /etc/zabbix/zabbix_agentd.conf
#sed -i -e "/^Server=127.0.0.1/c Server=$ZABBIX_SERVER" -e "/^Hostname=Zabbix server/c Hostname=${ZABBIX_HOSTNAME}" /etc/zabbix/zabbix_agentd.conf
}
start_zabbix_agent () {
systemctl enable zabbix-agent.service
systemctl restart zabbix-agent.service
systemctl is-active zabbix-agent.service
if [ $? -eq 0 ];then
echo "-------------------------------------------------------------------"
color "Zabbix Agent 安装完成!" 0
else
color "Zabbix Agent 安装失败" 1
exit
fi
}
install_zabbix_agent
config_zabbix_agent
start_zabbix_agent
6.完成1键脚本,可以基于zabbix api添加zabbix agent到zabbix web。
#!/bin/bash
# 配置 Zabbix API 连接信息
ZABBIX_URL="http://zabbix.example.com/zabbix/api_jsonrpc.php"
ZABBIX_USER="Admin"
ZABBIX_PASSWORD="zabbix"
# 配置主机信息
HOSTNAME="zabbix-agent-host"
HOST_IP="192.168.0.100"
GROUP_NAME="Linux servers"
TEMPLATE_NAME="Template OS Linux by Zabbix agent"
# 检查依赖
if ! command -v jq &>/dev/null; then
echo "[ERROR] jq 未安装,请安装后重试。"
exit 1
fi
# 登录获取 Token
get_auth_token() {
local payload
payload=$(cat <<EOF
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "$ZABBIX_USER",
"password": "$ZABBIX_PASSWORD"
},
"id": 1
}
EOF
)
curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result'
}
# 获取主机组 ID,如果不存在则创建
get_group_id() {
local group_name=$1
local auth_token=$2
local payload
payload=$(cat <<EOF
{
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"filter": {
"name": "$group_name"
}
},
"auth": "$auth_token",
"id": 1
}
EOF
)
local group_id
group_id=$(curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result[0].groupid')
if [ "$group_id" = "null" ]; then
payload=$(cat <<EOF
{
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": "$group_name"
},
"auth": "$auth_token",
"id": 1
}
EOF
)
group_id=$(curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result.groupids[0]')
fi
echo "$group_id"
}
# 获取模板 ID
get_template_id() {
local template_name=$1
local auth_token=$2
local payload
payload=$(cat <<EOF
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"filter": {
"host": "$template_name"
}
},
"auth": "$auth_token",
"id": 1
}
EOF
)
curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result[0].templateid'
}
# 添加主机
create_host() {
local hostname=$1
local host_ip=$2
local group_id=$3
local template_id=$4
local auth_token=$5
local payload
payload=$(cat <<EOF
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "$hostname",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "$host_ip",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "$group_id"
}
],
"templates": [
{
"templateid": "$template_id"
}
]
},
"auth": "$auth_token",
"id": 1
}
EOF
)
curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result.hostids[0]'
}
# 主程序
main() {
echo "[INFO] 获取 Token..."
AUTH_TOKEN=$(get_auth_token)
if [ -z "$AUTH_TOKEN" ]; then
echo "[ERROR] 获取 Token 失败,请检查用户或密码。"
exit 1
fi
echo "[INFO] Token 获取成功。"
echo "[INFO] 获取主机组 ID..."
GROUP_ID=$(get_group_id "$GROUP_NAME" "$AUTH_TOKEN")
if [ -z "$GROUP_ID" ]; then
echo "[ERROR] 获取主机组 ID 失败。"
exit 1
fi
echo "[INFO] 主机组 ID: $GROUP_ID"
echo "[INFO] 获取模板 ID..."
TEMPLATE_ID=$(get_template_id "$TEMPLATE_NAME" "$AUTH_TOKEN")
if [ -z "$TEMPLATE_ID" ]; then
echo "[ERROR] 模板 '$TEMPLATE_NAME' 不存在。"
exit 1
fi
echo "[INFO] 模板 ID: $TEMPLATE_ID"
echo "[INFO] 创建主机..."
HOST_ID=$(create_host "$HOSTNAME" "$HOST_IP" "$GROUP_ID" "$TEMPLATE_ID" "$AUTH_TOKEN")
if [ -z "$HOST_ID" ]; then
echo "[ERROR] 主机创建失败。"
exit 1
fi
echo "[INFO] 主机创建成功,ID: $HOST_ID"
}
main