1.添加一台服务器192.168.1.19上安装zabbix和ansible,利用ansible批量安装zabbix-agent客户端以及自定义监控项的配置文件 2.在zabbix上监控mysql server 1.14和1.15,监控nginx1和nginx2,监控haproxy以及高可用
时间: 2025-08-04 19:57:44 AIGC 浏览: 36
<think>嗯,用户想要实现通过Ansible自动化部署Zabbix监控系统,涉及服务端安装、批量客户端部署、自定义监控项配置,以及三个重要组件(MySQL、Nginx、HAProxy)的监控集成。这是个典型的自动化运维场景,用户应该是个中级运维工程师,希望建立企业级监控体系。用户引用了5篇关于Ansible部署Zabbix-agent的文章,说明已经做过基础调研。其中引用[3]提到的免密配置和Playbook结构、引用[2]的模板文件处理方式都比较关键。不过用户需求明显比引用更复杂,需要整合server端安装、多种应用监控和高可用配置。核心要解决四个层面的问题:1)基础环境搭建(Zabbix-server+Ansible);2)客户端批量部署(Ansible+Agent);3)应用监控项配置(MySQL/Nginx/HAProxy);4)高可用架构。用户特别强调自定义监控项和高可用,这需要重点处理。在技术实现上,Ansible的role结构是最佳选择,准备把部署拆成三个role:zabbix-server用于主服务,zabbix-agent用于客户端,zabbix-mysql等用于应用监控模板。高可用方面采用HAProxy监控方案配合浮动VIP更可靠。用户要求包含具体操作步骤,因此需要提供可执行的代码片段。比如Ansible主机文件配置要示范格式,zabbix_agent.conf.j2模板必须包含ServerActive等关键参数。MySQL监控的复杂点在多版本兼容,解决方案是分条件生成不同配置。对初学者可能容易忽视的点:1)zabbix-server配置文件要开启自动注册;2)HAProxy监控需要配置状态页;3)每个监控项对应的zabbix账号权限。在回复中需要重点标注这些细节。考虑最后补充优化建议,包括启用Active模式、TLS加密,并设置高可用VIP检测机制,这些是企业环境必备的安全和稳定性措施。</think>
下面是根据您需求整理的完整操作步骤(基于Ansible自动化实现):
---
### **一、在192.168.1.19部署Zabbix-Server和Ansible**
#### **1. 安装Zabbix-Server(Ubuntu为例)**
```bash
# 添加Zabbix仓库
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu$(lsb_release -rs)_all.deb
sudo dpkg -i zabbix-release_*.deb
sudo apt update
# 安装服务端组件
sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts
# 初始化MySQL数据库
sudo mysql -uroot -p -e "CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin"
sudo mysql -uroot -p -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'YourPassword'"
sudo mysql -uroot -p -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'"
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
# 修改Zabbix配置
sudo vim /etc/zabbix/zabbix_server.conf
DBPassword=YourPassword
# 启动服务
sudo systemctl restart zabbix-server apache2
```
#### **2. 安装Ansible**
```bash
sudo apt install -y ansible
```
---
### **二、Ansible批量部署Zabbix-Agent**
#### **1. 准备Ansible环境**
```bash
mkdir -p /etc/ansible/roles/zabbix-agent/{tasks,templates,files}
touch /etc/ansible/roles/zabbix-agent/tasks/main.yml
```
#### **2. 创建主机清单(`/etc/ansible/hosts`)**
```ini
[zabbix_agents]
192.168.1.20 agent_name=node1 # 被控端1
192.168.1.21 agent_name=node2 # 被控端2
mysql_server[0] ansible_host=192.168.1.14 # MySQL实例1
mysql_server[1] ansible_host=192.168.1.15 # MySQL实例2
nginx_group ansible_host=192.168.1.[22:23] # Nginx节点
haproxy_group ansible_host=192.168.1.24,192.168.1.25
```
#### **3. 配置Zabbix-Agent角色**
`roles/zabbix-agent/tasks/main.yml`:
```yaml
- name: 配置YUM源 (CentOS)
template: src=zabbix.repo.j2 dest=/etc/yum.repos.d/zabbix.repo
when: ansible_os_family == 'RedHat'
- name: 安装zabbix-agent
package: name=zabbix-agent state=latest
- name: 配置zabbix-agent
template:
src: zabbix_agentd.conf.j2
dest: /etc/zabbix/zabbix_agentd.conf
notify: restart zabbix-agent
- name: 放置自定义监控脚本
copy:
src: scripts/
dest: /etc/zabbix/zabbix_agentd.d/scripts/
mode: 0755
- name: 启用并启动服务
service:
name: zabbix-agent
enabled: yes
state: restarted
```
`roles/zabbix-agent/templates/zabbix_agentd.conf.j2`:
```ini
# 关键配置项
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ agent_name | default(ansible_hostname) }}
# 开启自定义监控目录
Include=/etc/zabbix/zabbix_agentd.d/*.conf
# 自定义监控项模板
UserParameter=custom.nginx.status,/etc/zabbix/zabbix_agentd.d/scripts/nginx_status.sh
```
#### **4. 创建Playbook(`deploy_agent.yml`)**
```yaml
- hosts: zabbix_agents,mysql_server,nginx_group,haproxy_group
vars:
zabbix_server_ip: 192.168.1.19
roles:
- zabbix-agent
```
#### **5. 执行部署**
```bash
ansible-playbook deploy_agent.yml
```
---
### **三、配置自定义监控项**
#### **1. MySQL监控(以MySQL 8.0为例)**
创建监控脚本 `files/scripts/mysql_monitor.sh`:
```bash
#!/bin/bash
mysql -uzabbix -p'MySQLPassword' -e "SHOW GLOBAL STATUS" | grep -c "$1"
```
在Agent配置中添加:
```ini
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/scripts/mysql_monitor.sh $1
UserParameter=mysql.ping,mysqladmin -uzabbix -p'MySQLPassword' ping | grep -c alive
```
#### **2. Nginx状态监控**
创建脚本 `files/scripts/nginx_status.sh`:
```bash
#!/bin/bash
curl -s http://localhost/nginx_status | awk '/Active/{print $3}'
```
在Zabbix-Server上导入模板:使用官方 [Nginx by Zabbix agent](https://www.zabbix.com/integrations/nginx) 模板
#### **3. HAProxy监控**
```ini
UserParameter=haproxy.stats[*],echo "show stat" | sudo socat stdio unix-connect:/run/haproxy/admin.sock | awk -F, '{ if($1=="${1}") print $$18 }' | head -1
```
---
### **四、配置高可用性**
#### **1. Zabbix-Server高可用**
- **主备架构**:使用Keepalived + VIP
- **数据库高可用**:MySQL主从复制或Galera集群
- **前端负载均衡**:Nginx反向代理多个Zabbix-Web实例
#### **2. 监控项高可用配置**
在Zabbix-Web:
1. **自动发现规则**:配置对MySQL实例组的自动发现
2. **触发器依赖**:对Nginx设置主备依赖关系(例如:当主节点故障时再告警备节点)
3. **HAProxy监控**:绑定浮动VIP地址到模板
---
### **验证步骤**
```bash
# 测试Agent连通性
zabbix_get -s 192.168.1.14 -k mysql.ping
# 输出应为1
# 检查自动注册(需在Zabbix-Web配置自动发现规则)
```
[^1]
---
### **优化建议**
1. **加密通信**:在`zabbix_agentd.conf`中启用`TLSParameters`
2. **主动模式**:高负载环境使用Agent主动模式
3. **模板化配置**:在Ansible中为不同服务预置变量组(如MySQL版本差异配置)
---
阅读全文