为了快速安装配置zabbix_agent,特地写了此shell脚本,脚本实现功能如下:
1、自动检测操作系统类型,目前支持Ubuntu/Centos/Redhat
2、自动获取安装agent主机IP地址
3、交互判断主机IP是否可用,用户输入正确IP地址
4、输出信息友好性:输出带颜色提示信息
5、脚本健壮性:自动判断zabbix_agent配置文件路径
#!/bin/bash# 输出绿色文本函数
echo_green() {echo -e "\e[32m$1\e[0m"
}# 输出红色文本函数
echo_red() {echo -e "\e[31m$1\e[0m"
}# 获取主机非本地回环IP地址
detected_ip=$(hostname -I | awk '{print $1}') # 获取第一个非本地回环IP地址
echo_green "检测到的IP地址是: $detected_ip"# 询问用户是否要使用检测到的IP地址
read -p "您要使用这个IP地址吗?(Y/n): " use_detected_ip
if [[ $use_detected_ip =~ ^([nN][oO]|[nN])$ ]]
thenread -p "请输入您要使用的IP地址: " user_ipzabbix_server_ip=$user_ip
elsezabbix_server_ip=$detected_ip
fi# 检测操作系统并安装Zabbix Agent
echo_green "正在检测操作系统..."
if [ -f /etc/debian_version ]; thenecho_green "检测到Debian/Ubuntu系统,正在使用apt安装Zabbix Agent..."sudo apt install -y zabbix-agent
elif [ -f /etc/redhat-release ]; thenecho_green "检测到RedHat/CentOS系统,正在使用yum安装Zabbix Agent..."sudo yum install -y zabbix-agent
elseecho_red "不支持的操作系统"exit 1
fi# 寻找Zabbix Agent配置文件
zabbix_conf=$(find / -name zabbix_agentd.conf 2>/dev/null | head -n 1)
if [ -z "$zabbix_conf" ]; thenecho_red "未找到Zabbix Agent配置文件。"exit 1
fi
echo_green "找到Zabbix Agent配置文件: $zabbix_conf"# 获取本机主机名
hostname=$(hostname)# 更新zabbix_agentd.conf文件
echo_green "正在更新Zabbix Agent配置..."
sudo sed -i "s/^Server=.*$/Server=$zabbix_server_ip/" $zabbix_conf
sudo sed -i "s/^ServerActive=.*$/ServerActive=$zabbix_server_ip/" $zabbix_conf
sudo sed -i "s/^Hostname=.*$/Hostname=$hostname/" $zabbix_conf# 重启Zabbix Agent服务并设置开机自启动
echo_green "正在重启Zabbix Agent并设置开机自启..."
sudo systemctl restart zabbix-agent
sudo systemctl enable zabbix-agent# 输出修改的配置和端口信息
echo_green "Zabbix Agent配置已更新:"
echo_green "Server: $zabbix_server_ip"
echo_green "ServerActive: $zabbix_server_ip"
echo_green "Hostname: $hostname"
echo_green "Zabbix Agent使用的端口:10050" # 默认端口echo_green "Zabbix Agent安装和配置完成。"
使用方法:
保存脚本为install_zabbix_agent.sh。
赋予脚本执行权限:chmod +x install_zabbix_agent.sh。
以root用户或使用sudo运行脚本:./install_zabbix_agent.sh。
脚本转换为Ansible playbook的基本框架
---
- name: Install Zabbix Agenthosts: allbecome: yesvars_prompt:- name: zabbix_server_ipprompt: "Enter the Zabbix server IP"private: no- name: user_defined_ipprompt: "Do you want to use the detected IP or enter a new one? (detected/enter)"private: notasks:- name: Detect IP addressshell: hostname -I | awk '{print $1}'register: detected_ipwhen: user_defined_ip == "detected"- name: Set IP to user definedset_fact:zabbix_server_ip: "{{ hostvars[inventory_hostname]['detected_ip'].stdout }}"when: user_defined_ip == "detected"- name: Install Zabbix agent on Debian/Ubuntuapt:name: zabbix-agentstate: presentwhen: ansible_os_family == "Debian"- name: Install Zabbix agent on RedHat/CentOSyum:name: zabbix-agentstate: presentwhen: ansible_os_family == "RedHat"- name: Find Zabbix Agent configuration filefind:paths: "/"patterns: "zabbix_agentd.conf"recurse: trueregister: zabbix_conf- name: Update Zabbix Agent configurationlineinfile:path: "{{ zabbix_conf.files[0].path }}"regexp: "^{{ item.param }}=.*$"line: "{{ item.param }}={{ item.value }}"with_items:- { param: 'Server', value: "{{ zabbix_server_ip }}" }- { param: 'ServerActive', value: "{{ zabbix_server_ip }}" }- { param: 'Hostname', value: "{{ ansible_hostname }}" }- name: Restart and enable Zabbix Agentsystemd:name: zabbix-agentstate: restartedenabled: yes
说明:
变量提示:
使用vars_prompt来在playbook运行前收集用户输入。你可以根据实际情况调整它来收集IP地址等信息。
任务执行条件:
使用when语句来根据操作系统执行相应的安装任务。
配置文件搜索和编辑:
使用find模块来查找配置文件,然后用lineinfile模块更新文件内容。
运行Playbook:
要运行这个playbook,你需要先安装Ansible,然后保存上面的内容到一个文件中(例如install_zabbix_agent.yml),之后可以使用以下命令来运行它:
ansible-playbook install_zabbix_agent.yml -i inventory_file
这里的inventory_file是你的Ansible inventory文件,其中包含了你想要管理的主机列表。