诸暨市文章资讯

教你saltstack部署zabbix服务的方法

2026-04-03 21:00:01 浏览次数:2
详细信息

方案一:使用Salt States部署Zabbix(推荐)

1. 目录结构规划

/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

2. 核心State文件配置

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

3. Pillar配置

/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"

4. Top文件配置

/srv/salt/top.sls

base:
  'zabbix-server':
    - match: grain
    - zabbix.server
    - zabbix.web

  'zabbix-agent':
    - match: grain
    - zabbix.agent

  'db*':
    - match: glob
    - mariadb

方案二:使用Salt Formula(更规范)

1. 使用官方或社区Formula

安装Zabbix Formula:

# 使用GitFS或手动下载
cd /srv/formulas
git clone https://github.com/saltstack-formulas/zabbix-formula

2. 配置Pillar

/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

3. 应用部署

# 部署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"

最佳实践建议

环境分离:使用不同的Pillar文件区分dev/staging/prod环境 版本控制:将States和Pillar文件纳入Git版本控制 配置模板:使用Jinja模板动态生成配置文件 监控Salt自身:部署Zabbix监控Salt Master和Minion状态 自动化测试:使用Test Kitchen或Vagrant测试States

故障排查

# 查看详细输出
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监控系统,并且易于维护和扩展。

相关推荐