为了快速安装配置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])$ ]]
then
read -p "请输入您要使用的IP地址: " user_ip
zabbix_server_ip=$user_ip
else
zabbix_server_ip=$detected_ip
fi
# 检测操作系统并安装Zabbix Agent
echo_green "正在检测操作系统..."
if [ -f /etc/debian_version ]; then
echo_green "检测到Debian/Ubuntu系统,正在使用apt安装Zabbix Agent..."
sudo apt install -y zabbix-agent
elif [ -f /etc/redhat-release ]; then
echo_green "检测到RedHat/CentOS系统,正在使用yum安装Zabbix Agent..."
sudo yum install -y zabbix-agent
else
echo_red "不支持的操作系统"
exit 1
fi
# 寻找Zabbix Agent配置文件
zabbix_conf=$(find / -name zabbix_agentd.conf 2>/dev/null | head -n 1)
if [ -z "$zabbix_conf" ]; then
echo_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 Agent
hosts: all
become: yes
vars_prompt:
- name: zabbix_server_ip
prompt: "Enter the Zabbix server IP"
private: no
- name: user_defined_ip
prompt: "Do you want to use the detected IP or enter a new one? (detected/enter)"
private: no
tasks:
- name: Detect IP address
shell: hostname -I | awk '{
print $1}'
register: detected_ip
when: user_defined_ip == "detected"
- name: Set IP to user defined
set_fact:
zabbix_server_ip: "{
{ hostvars[inventory_hostname]['detected_ip'].stdout }}"
when: user_defined_ip == "detected"
- name: Install Zabbix agent on Debian/Ubuntu
apt:
name: zabbix-agent
state: present
when: ansible_os_family == "Debian"
- name: Install Zabbix agent on RedHat/CentOS
yum:
name: zabbix-agent
state: present
when: ansible_os_family == "RedHat"
- name: Find Zabbix Agent configuration file
find:
paths: "/"
patterns: "zabbix_agentd.conf"
recurse: true
register: zabbix_conf
- name: Update Zabbix Agent configuration
lineinfile:
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 Agent
systemd:
name: zabbix-agent
state: restarted
enabled: 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文件,其中包含了你想要管理的主机列表。