Zabbix_Agent一键安装脚本(包含ansible-playbook批量执行脚本)

为了快速安装配置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文件,其中包含了你想要管理的主机列表。

猜你喜欢

转载自blog.csdn.net/weixin_43938093/article/details/137710305