Zabbix_Proxy自动化安装脚本

Zabbix Proxy Shell 安装脚本

脚本说明

  • 机器必须要能上网,这样仓库才能下载Zabbix proxy等组件
  • 我的Linux版本是CentOS8 Stream
  • 数据库我用的是mysql8.0版本
  • Zabbix Server的版本是6.0LTS
  • 需要提前下载并上传到服务器上的mysql8.0 tar包到/opt目录下,文件命令为mysql8.0.3.tar即可,脚本会自动解压并安装MySQL
  • 欢迎各位大佬批评指正!!!
#!/usr/bin/env bash

#-------------------------------------------------------
# This script is used to install the Proxy
# @ By Eleven
# @ Date 2024-06-16
#-------------------------------------------------------

# Zabbix Databse Name
zabbix_db_name=zabbix_proxy

# Zabbix user password
zabbix_password=zabbix_py3

# Zabbix username
zabbix_username=zabbix_py3

# MySQL Databse Password
mysql_password=mysqlwx_123


# Function about install http server
InstallHttpServer(){
  yum -y install httpd &>> /dev/null
  systemctl start httpd.service &>> /dev/null
  http_status=$(systemctl is-active httpd.service)
  if [ $http_status = "active" ];then
     systemctl enable httpd.service &>> /dev/null
  else
	 echo -e "\033[31mError: Http Server is starting fail!\033[0m"
	 exit
  fi
  
  echo -e "\033[32mMsg: Http Server installed success!\033[0m"
}

# Function about install database of MySQL
InstallMySQL(){
  # temporarily closed Selinux 0 
  setenforce 0 
  # tar mysql file and rpm install
  install_status=0
  if test -f "/opt/mysql8.0.3.tar";then
    tar -xvf /opt/mysql8.0.3.tar &>> /dev/null
	cd /opt/mysql8.0.3/
	
	# 1.Install mysql-community-common-8.3.0-1.el8.x86_64
	one_mark=$(rpm -q "mysql-community-common-8.3.0-1.el8.x86_64" | awk '{print($NF)}')
	if [ $one_mark != 'installed' ];then
	  echo -e "\033[32mMsg: [mysql-community-common] package already install\033[0m"
	else
	  rpm -ivh mysql-community-common-8.3.0-1.el8.x86_64.rpm &>> /dev/null
	  if [ $? -eq 0 ];then
	    echo -e "\033[32mMsg: [mysql-community-common] package installed success!\033[0m"
	  else
	    install_status=1
	    echo -e "\033[31mError: [mysql-community-common] package installed fail!\033[0m" 
	  fi
	fi
	
	# 2.Install mysql-community-client-plugins-8.3.0-1.el8.x86_64
	tow_mark=$(rpm -q "mysql-community-client-plugins-8.3.0-1.el8.x86_64" | awk '{print($NF)}')
	if [ $tow_mark != 'installed' ];then
	  echo -e "\033[32mMsg: [mysql-community-client-plugins] package already install\033[0m"
	else
	  rpm -ivh mysql-community-client-plugins-8.3.0-1.el8.x86_64.rpm &>> /dev/null
	  if [ $? -eq 0 ];then
	     echo -e "\033[32mMsg: [mysql-community-client-plugins] package installed success!\033[0m"
	  else
	    install_status=1
	    echo -e "\033[31mError: [mysql-community-client-plugins] package installed fail!\033[0m" 
	  fi
	fi  
	  
	# 3.Install mysql-community-libs-8.3.0-1.el8.x86_64 
	three_mark=$(rpm -q "mysql-community-libs-8.3.0-1.el8.x86_64" | awk '{print($NF)}')
	if [ $three_mark != 'installed' ];then
	  echo -e "\033[32mMsg: [mysql-community-libs] package already install\033[0m"
	else
	  rpm -ivh mysql-community-libs-8.3.0-1.el8.x86_64.rpm &>> /dev/null
	  if [ $? -eq 0 ];then
	     echo -e "\033[32mMsg: [mysql-community-libs] package installed success!\033[0m"
	  else
	    install_status=1
	    echo -e "\033[31mError: [mysql-community-libs] package installed fail!\033[0m" 
	  fi
	fi
	
	# 4.Install mysql-community-client-8.3.0-1.el8.x86_64
	four_mark=$(rpm -q "mysql-community-client-8.3.0-1.el8.x86_64" | awk '{print($NF)}')
	if [ $four_mark != 'installed' ];then
	  echo -e "\033[32mMsg: [mysql-community-client] package already install\033[0m"
	else
	  rpm -ivh mysql-community-client-8.3.0-1.el8.x86_64.rpm &>> /dev/null
	  if [ $? -eq 0 ];then
	     echo -e "\033[32mMsg: [mysql-community-client] package installed success!\033[0m"
	  else
	    install_status=1
	    echo -e "\033[31mError: [mysql-community-client] package installed fail!\033[0m" 
	  fi
	fi
	
	# 5.Install mysql-community-icu-data-files-8.3.0-1.el8.x86_64
	five_mark=$(rpm -q "mysql-community-icu-data-files-8.3.0-1.el8.x86_64" | awk '{print($NF)}')
	if [ $five_mark != 'installed' ];then
	  echo -e "\033[32mMsg: [mysql-community-icu-data-files] package already install\033[0m"
	else
	  rpm -ivh mysql-community-icu-data-files-8.3.0-1.el8.x86_64.rpm &>> /dev/null
	  if [ $? -eq 0 ];then
	     echo -e "\033[32mMsg: [mysql-community-icu-data-files] package installed success!\033[0m"
	  else
	    install_status=1
	    echo -e "\033[31mError: [mysql-community-icu-data-files] package installed fail!\033[0m" 
	  fi
	fi
	
    # 6.Install mysql-community-server-8.3.0-1.el8.x86_64
	six_mark=$(rpm -q "mysql-community-server-8.3.0-1.el8.x86_64" | awk '{print($NF)}')
	if [ $six_mark != 'installed' ];then
	  echo -e "\033[32mMsg: [mysql-community-server] package already install\033[0m"
	else
	  rpm -ivh mysql-community-server-8.3.0-1.el8.x86_64.rpm &>> /dev/null
	  if [ $? -eq 0 ];then
	     echo -e "\033[32mMsg: [mysql-community-server] package installed success!\033[0m"
	  else
	    install_status=1
	    echo -e "\033[31mError: [mysql-community-server] package installed fail!\033[0m" 
	  fi
	fi
  else
     echo -e "\033[31mError: MySQL installation package not found!\033[0m"
	 echo -e "\033[31mError: Please Put the MySQL installation package in the 【/opt】 directory\033[0m"
     exit
  fi
  
  if [ $install_status -eq 1 ];then
	echo -e "\033[31mMsg: MySQL Database installed fail!\033[0m"
	exit
  else
	echo -e "\033[32mMsg: MySQL Database installed success!\033[0m" 
  fi
  
}


# Function about init Database of MySQL
InitMySQL(){
  pwd_status=0
  mysqld --initialize &>> /dev/null
  sleep 10  
  chown -R mysql:mysql /var/lib/mysql &>> /dev/null 
  chmod -R 755 /var/lib/mysql &>> /dev/null			
  systemctl start mysqld.service &>> /dev/null		
  mysql_status=$(systemctl is-active mysqld.service)
  if [ $mysql_status = "active" ];then
	 systemctl enable mysqld.service &>> /dev/null
	 echo -e "\033[32mMsg: MySQL Server is starting success!\033[0m"
  else
	 echo -e "\033[31mError: MySQL Server is starting fail!\033[0m"
	 exit
  fi
  
  temporarily_password=$(cat /var/log/mysqld.log | grep root@localhost | awk '{print($NF)}')
  
  mysql -uroot -p"$temporarily_password" -e "quit"
  mysql --connect-expired-password -uroot -p"$temporarily_password" <<EOF
ALTER USER 'root'@'localhost' identified by '$mysql_password';
quit;
EOF
  if [ $? -eq 0 ];then
    echo -e "\033[32mMsg: MySQL password changed success!\033[0m"
  else
    echo -e "\033[31mMsg: MySQL password changed fail!\033[0m"
	pwd_status=1
	exit
  fi
  
  if [ $pwd_status -eq 0 ];then
    echo -e "\033[32mMsg: Init MySQL Server is success!\033[0m"
  else
	echo -e "\033[31mMsg: Init MySQL Server is fail!\033[0m"
	exit
  fi
  
}

# Function about install Proxy
InstallProxy() {

  yum -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy &>> /dev/null
  if [ $? -eq 0 ];then
    echo -e "\033[32mMsg: Zabbix Proxy install success!\033[0m"
  else
	echo -e "\033[31mMsg: Zabbix Proxy install fail!\033[0m"
  fi

mysql -uroot -p$mysql_password <<EOF
create database $zabbix_db_name character set utf8mb4 collate utf8mb4_bin;
create user '$zabbix_username'@'localhost' identified with mysql_native_password by '$zabbix_password';
grant all privileges on $zabbix_db_name.* to $zabbix_username@localhost;
set global log_bin_trust_function_creators = 1;
quit;
EOF

  cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -u$zabbix_username -p$zabbix_password $zabbix_db_name
  if [ $? -eq 0 ];then
    echo -e "\033[32mMsg: zabbix mysql upload success\033[0m"
  else
    echo -e "\033[31mMsg: zabbix mysql upload fail\033[0m"  
  fi
  
mysql -uroot -p$mysql_password <<EOF
set global log_bin_trust_function_creators = 0;
quit;
EOF
  
  # set proxy service
  systemctl restart zabbix-proxy &>> /dev/null
  proxy_status=$(systemctl is-active zabbix-proxy)
  if [ $proxy_status = "active" ];then
	systemctl enable zabbix-proxy &>> /dev/null
	echo -e "\033[32mMsg: Zabbix Proxy status is starting success!\033[0m"
  else
	echo -e "\033[31mError: Zabbix Proxy status is starting fail!\033[0m"
	Proxy_start_status=1
    exit
  fi
   
}


# Function about open firewalld port and service
OpenPort(){
  # open 10051 161 http
  firewall-cmd --zone=public --add-port=10050/tcp --permanent &>> /dev/null
  firewall-cmd --zone=public --add-port=10051/tcp --permanent &>> /dev/null
  firewall-cmd --zone=public --add-port=161/tcp --permanent &>> /dev/null
  firewall-cmd --zone=public --add-service=http  --permanen &>> /dev/null
  firewall-cmd --reload &>> /dev/null
  echo -e "\033[32mMsg: Firewalld Port is opening!\033[0m"
}


# Function about set Unified time zone
Time_synchronization(){
	#judgment chrony install? 
	Complete=$(yum -y install chrony | grep Complete!)
	if [ $Complete = "Complete!" ];then
	  echo -e "\033[32mMsg: chrony is already install!\033[0m"
    else
	  echo ">>>>>> start install chrony!"
	  yum -y install chrony
	  if [ $? -eq 0 ];then
		echo -e "\033[32mMsg: chrony install success\033[0m"
		systemctl enable chronyd --now 
	  else
		echo -e "\033[31mMsg: chrony install fail\033[0m" 
	  fi
	fi
   
   echo ">>>>>> start synchronization time"
   sed -i '/pool 2.centos.pool.ntp.org iburst/a\server 192.168.95.8 iburst' /etc/chrony.conf
   systemctl restart chronyd
   echo -e "\033[32mMsg: synchronization time success\033[0m" 
}




echo ">>>>>> Check the local repository configuration"
yum -y install vim &>>/dev/null
if [ $? -ne 0 ];then
  echo -e "\033[31mError: Please check the configuration of your local repository\033[0m"
  exit
else
    echo -e "\033[32mMsg: Local repository check success!\033[0m"
fi


echo ">>>>>> Install the necessary components"
tools_status=$( rpm -q net-tools | awk '{print($NF)}')
if [ $tools_status = "installed" ];then
  yum -y install net-tools &>> /dev/null
fi

perl_status=$( rpm -q perl | awk '{print($NF)}')
if [ $perl_status = "installed" ];then
  yum -y install perl &>> /dev/null
fi
echo -e "\033[32mMsg: Check components success!\033[0m"

echo ">>>>>> Starting install http service"
InstallHttpServer

echo ">>>>>> Starting install MySQL server"
InstallMySQL

echo ">>>>>> Starting init MySQL server"
InitMySQL

echo ">>>>>> Starting install zabbix proxy server "
InstallProxy

echo ">>>>>> Starting open firewalld port"
OpenPort

echo ">>>>>> Set Time synchronization"
Time_synchronization

echo -e "\033[32mExecuted Success! Over\033[0m"

Zabbix是一款开源的监控工具,可以用于实时监控各种IT资源的状态和性能,并提供报警功能以及自动化的处理机制。Zabbix支持多种数据收集方法,包括主动式监控、被动式监控及事件触发式监控。 ### Zabbix内网安装部署步骤: #### 1. 准备工作 - **操作系统选择**:通常推荐Ubuntu作为服务器操作系统的安装基础,因为其稳定性较高且有丰富的软件包源。 - **服务器硬件需求**:根据需要监控的对象规模和复杂度,确定服务器的CPU、内存和磁盘空间大小。 - **网络配置**:确保服务器能够访问Internet以便下载安装包和其他依赖项。 #### 2. 安装基础环境 通过SSH登录到服务器并运行以下命令以更新系统并安装必要的基础软件: ```bash sudo apt-get update sudo apt-get install -y curl openssh-server python3-software-properties ``` #### 3. 添加Zabbix Repository Key 为了从Zabbix官方仓库获取最新版本的安装脚本,运行以下命令添加Repository Key: ```bash curl https://www.zabbix.com/zabbix/download.php?item=zabbix-repo.key | sudo apt-key add - echo "deb http://repo.zabbix.com/zabbix/5.0/ubuntu bionic main" | sudo tee /etc/apt/sources.list.d/zabbix.list ``` #### 4. 更新并安装Zabbix Server 和 Proxy ```bash sudo apt-get update && sudo apt-get install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-proxy ``` #### 5. 初始化MySQL数据库 首次启动Zabbix Server前,需要初始化MySQL数据库。执行以下命令创建数据库和用户: ```bash sudo systemctl start mysql sudo mysql_secure_installation ``` 然后安装Zabbix数据库: ```sql zcat zabbix_server.sql.gz | mysql -uzabbix -p$ZABBIX_PASSWORD zabbix ``` 替换 `$ZABBIX_PASSWORD` 为你自选的密码。 #### 6. 配置Zabbix组件 对于每个组件(Server、Web、Agent、Proxy),都需要相应的配置文件来指定服务端口、监听地址等信息。通常在 `/etc/zabbix` 目录下。 例如,编辑 `zabbix_agentd.conf` 文件设置监听端口和守护进程名: ```ini # Configuration file for the Zabbix Agent daemon (zabbix_agentd) Include = $ZABBIX_AGENTD_INCLUDE_DIR/*.conf PidFile = /var/run/zabbix/zabbix_agentd.pid LogFile = /var/log/zabbix/zabbix_agentd.log LogFileMaxSize = 10MB LogFileCount = 5 DebugLevel = 0 Server = <your-server-ip-or-hostname> RrdPollerPath = $ZABBIX_ROOT/libexec/rrdpoller ``` 修改 `<your-server-ip-or-hostname>` 为Zabbix Server的IP或主机名。 #### 7. 启动和验证服务 启动所有Zabbix服务: ```bash sudo systemctl enable zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-proxy sudo systemctl start zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-proxy ``` 验证安装是否成功: - 访问 Web 界面:`http://<server-ip>:8090` - 使用命令行检查代理状态:`service zabbix-agent status` #### 8. 设置报警通知 在Zabbix管理界面中设置报警规则、接收人、通知策略等,以确保在监测到异常时能够及时收到警报。 #### 相关问题: 1. **如何调整Zabbix的性能优化建议?** 2. **Zabbix与其它监控工具有哪些区别?** 3. **初次接触Zabbix应该注意哪些细节?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值