/srv/salt/
├── top.sls
├── zabbix/
│ ├── init.sls
│ ├── server.sls
│ ├── agent.sls
│ ├── web.sls
│ ├── files/
│ │ ├── zabbix_server.conf
│ │ ├── zabbix_agentd.conf
│ │ ├── apache.conf
│ │ └── zabbix.conf.php
│ └── templates/
│ └── zabbix_agentd.conf.jinja
zabbix/init.sls - 基础组件安装:
# 安装基础依赖
zabbix-deps:
pkg.installed:
- pkgs:
- wget
- gcc
- make
- mysql-devel
- net-snmp-devel
- curl-devel
- libxml2-devel
# 添加Zabbix仓库
zabbix-repo:
pkgrepo.managed:
- humanname: Zabbix Repository
- name: zabbix
- baseurl: http://repo.zabbix.com/zabbix/5.0/rhel/{{ grains['osmajorrelease'] }}/x86_64/
- gpgcheck: 1
- gpgkey: http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591
- enabled: 1
zabbix/server.sls - Zabbix服务器:
include:
- zabbix
# 安装Zabbix Server
zabbix-server-pkg:
pkg.installed:
- name: zabbix-server-mysql
- refresh: True
# 安装Zabbix前端
zabbix-web-pkg:
pkg.installed:
- name: zabbix-web-mysql
- refresh: True
# 配置Zabbix Server
zabbix-server-config:
file.managed:
- name: /etc/zabbix/zabbix_server.conf
- source: salt://zabbix/files/zabbix_server.conf
- template: jinja
- defaults:
db_host: {{ salt['pillar.get']('zabbix:db:host', 'localhost') }}
db_name: {{ salt['pillar.get']('zabbix:db:name', 'zabbix') }}
db_user: {{ salt['pillar.get']('zabbix:db:user', 'zabbix') }}
db_password: {{ salt['pillar.get']('zabbix:db:password', '') }}
- require:
- pkg: zabbix-server-pkg
# 初始化数据库
zabbix-db-init:
cmd.run:
- name: |
mysql -h {{ pillar['zabbix']['db']['host'] }} -u {{ pillar['zabbix']['db']['user'] }} -p{{ pillar['zabbix']['db']['password'] }} -e "CREATE DATABASE IF NOT EXISTS {{ pillar['zabbix']['db']['name'] }} CHARACTER SET utf8 COLLATE utf8_bin;"
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -h {{ pillar['zabbix']['db']['host'] }} -u {{ pillar['zabbix']['db']['user'] }} -p{{ pillar['zabbix']['db']['password'] }} {{ pillar['zabbix']['db']['name'] }}
- creates: /var/lib/mysql/zabbix/.db_initialized
- require:
- pkg: zabbix-server-pkg
- pkg: mariadb-server
# 启动服务
zabbix-server-service:
service.running:
- name: zabbix-server
- enable: True
- watch:
- file: zabbix-server-config
zabbix/agent.sls - Zabbix Agent:
include:
- zabbix
# 安装Agent
zabbix-agent-pkg:
pkg.installed:
- name: zabbix-agent
- refresh: True
# 配置Agent
zabbix-agent-config:
file.managed:
- name: /etc/zabbix/zabbix_agentd.conf
- source: salt://zabbix/templates/zabbix_agentd.conf.jinja
- template: jinja
- defaults:
server: {{ salt['pillar.get']('zabbix:server:ip', '127.0.0.1') }}
server_active: {{ salt['pillar.get']('zabbix:server:ip', '127.0.0.1') }}
hostname: {{ grains['id'] }}
- require:
- pkg: zabbix-agent-pkg
# 启动Agent服务
zabbix-agent-service:
service.running:
- name: zabbix-agent
- enable: True
- watch:
- file: zabbix-agent-config
/srv/pillar/zabbix.sls:
zabbix:
version: "5.0"
server:
ip: "192.168.1.100"
port: "10051"
db:
host: "localhost"
name: "zabbix"
user: "zabbix"
password: "secure_password"
web:
timezone: "Asia/Shanghai"
admin_pass: "admin123"
/srv/salt/top.sls:
base:
'zabbix-server':
- match: grain
- zabbix.server
- zabbix.web
'zabbix-agent':
- match: grain
- zabbix.agent
'db*':
- match: glob
- mariadb
安装Zabbix Formula:
# 使用GitFS或手动下载
cd /srv/formulas
git clone https://github.com/saltstack-formulas/zabbix-formula
/srv/pillar/zabbix/init.sls:
zabbix:
agent:
enabled: true
server: 192.168.1.100
serveractive: 192.168.1.100
hostname: {{ grains['id'] }}
listenport: 10050
server:
enabled: true
dbhost: localhost
dbname: zabbix
dbuser: zabbix
dbpassword: secure_password
listenport: 10051
web:
enabled: true
dbhost: localhost
dbname: zabbix
dbuser: zabbix
dbpassword: secure_password
timezone: Asia/Shanghai
# 部署Zabbix Server
salt 'zabbix-server' state.apply zabbix.server
# 部署Zabbix Agent到所有主机
salt '*' state.apply zabbix.agent
# 部署完整环境
salt 'zabbix-server' state.apply zabbix
# 测试连接
salt '*' test.ping
# 检查状态
salt 'zabbix-server' state.show_sls zabbix.server
# 仅安装软件包
salt 'zabbix-agent*' pkg.install zabbix-agent
# 重启服务
salt 'zabbix-server' service.restart zabbix-server
salt 'zabbix-agent*' service.restart zabbix-agent
# 查看日志
salt 'zabbix-server' cmd.run "tail -f /var/log/zabbix/zabbix_server.log"
# 查看详细输出
salt-call state.apply zabbix.agent -l debug
# 检查配置文件
salt 'zabbix-agent' file.search /etc/zabbix/zabbix_agentd.conf "Server="
# 验证服务状态
salt 'zabbix-server' cmd.run "systemctl status zabbix-server"
这种部署方式可以快速、一致地部署Zabbix监控系统,并且易于维护和扩展。