云计算自动化运维—Saltstack多节点推送实现zabbix监控的自动安装部署及优化

前面我们讲了手动安装部署zabbix,ansible-playbook自动安装部署zabbix,ansible-roles自动安装部署zabbix。本次实验我要用saltstack实现zabbix的自动安装部署。本次实验是在云计算自动化运维——SaltStack详解基础上进行的,已经配置好master-minion端。

附相应链接:
云计算自动化运维——编写Playbook实现Zabbix自动安装部署
云计算自动化运维——Ansible使用角色编写zabbix自动安装部署

一、Saltstack多节点推送实现zabbix监控的自动安装部署

实验环境:

主机名 ip 服务
server1 172.25.1.1 salt-master、salt-minion、mariadb数据库
server2 172.25.1.2 salt-minion、zabbix-server服务端、zabbix-agent客户端
server3 172.25.1.3 salt-minion、zabbix-web前端

思路:server1做数据库,server2做zabbix服务端与客户端,server3做前端。创建三个目录及一个top.sls文件:
三个目录

  • zabbix-server目录里边含有server2上要部署的zabbix-server服务与zabbix-agent服务所需安装包的安装步骤及服务配置步骤.sls文件,及files目录。files目录里边包含.sls写到的各服务配置文件。
  • zabbix-web目录里边含有server3上要部署的zabbix-web服务的所需安装包的安装步骤及服务配置步骤.sls文件,及files目录。files目录里边包含.sls写到的各服务配置文件。
  • mariadb目录里边含有server1上要部署的mariadb服务的所需安装包的安装步骤及服务配置步骤.sls文件,及files目录。files目录里边包含.sls写到的各服务配置文件。

一个top.sls文件

  • 指定要给哪个节点推送什么服务。

实验
步骤一:在/srv/salt目录下创建三个目录zabbix-server、zabbix-web、mariadb。
在这里插入图片描述
步骤二:在zabbix-server目录中编写服务安装配置文件并传入相应配置文件
(1)编写服务安装文件install.sls

zabbix-server-install:
  pkg.installed:
    - pkgs:
      - zabbix-server-mysql
      - zabbix-agent

  cmd.run:   #此模块的调用是为了配置阿里云仓库,为了下载所需安装包及依赖项
    - name: cd /etc/yum.repos.d/ && echo -e "[zabbix]\nname= zabbix\nbaseurl= https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ \ngpgcheck= no " > 4.0.repo && echo -e "[update] \nname= update \nbaseurl= https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/ \ngpgcheck= no" > update.repo && yum clean all > /dev/null
    - creates: /etc/yum.repos.d/update.repo

  file.managed:
    - name: /etc/zabbix/zabbix_server.conf
    - source: salt://zabbix-server/files/zabbix_server.conf
    - template: jinja  #调用jinja模板
    - context: 
      dbhost: {{ pillar['dbhost'] }}
      dbuser: {{ pillar['dbuser'] }}
      dbpass: {{ pillar['dbpass'] }}

  service.running:  #服务重启
    - name: zabbix-server
    - reload: true
    - watch:   #监控zabbix-server-install模块是否有变动
      - file: zabbix-server-install

zabbix-agent:  
  service.running

(2)在/srv/pillar目录下定义pillar数据变量并将文件关联到top.sls文件
pillar变量:

{% if grains['fqdn'] == 'server2' %} #如果匹配到server2主机,则可使用以下变量
dbhost: 172.25.1.1  #我在这里定义好数据库主机
dbuser: zabbix
dbpass: zabbix
{% elif grains['fqdn'] == 'server3' %}
dbhost: 172.25.1.1
dbuser: zabbix
dbpass: zabbix
{% endif %}

关联到top.sls文件

base:
  '*':
    - zabbix

在这里插入图片描述(3)在/srv/salt/zabbix-server/files目录下导入服务配置文件

做法:提前在某台主机上安装zabbix-server-mysql服务,将生成的配置文件/etc/zabbix/zabbix_server.conf拷贝到/srv/salt/zabbix-server/files目录下。并做如下配置:

 91 DBHost={{ dbhost }}
100 DBName=zabbix
116 DBUser={{ dbuser }}
124 DBPassword={{ dbpass }}

install.sls文件中使用了模板,调用了pillar模板变量,通过context参数,传递给source中定义的此文件中。

步骤二:在zabbix-web目录中编写服务安装配置文件并传入相应配置文件

(1)编写服务安装文件install.sls

zabbix-web-install:
  pkg.installed:   #要下载的包
    - pkgs:
      - httpd
      - zabbix-web-mysql

  cmd.run:  #配置yum源
    - name: cd /etc/yum.repos.d/ && echo -e "[centos] \nname=centos \nbaseurl= https://mirrors.aliyun.com/centos/7/os/x86_64/ \ngpgcheck=0" > centos.repo  && echo -e "[zabbix]\nname= zabbix\nbaseurl= https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ \ngpgcheck= no " > 4.0.repo && echo -e "[update] \nname= update \nbaseurl= https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/ \ngpgcheck= no" > update.repo && yum clean all > /dev/null
    - creates: /etc/yum.repos.d/update.repo

  file.managed:  #传送配置文件
    - name: /etc/httpd/conf.d/zabbix.conf
    - source: salt://zabbix-web/files/zabbix.conf

  service.running:  #重启httpd服务
    - name: httpd
    - reload: true
    - watch:
      - file: zabbix-web-install

(2)在/srv/salt/zabbix-server/files目录下导入服务配置文件

做法:提前在某台主机上安装zabbix-web-mysql及httpd服务,将生成的配置文件/etc/httpd/conf.d/zabbix.conf拷贝到/srv/salt/zabbix-web/files目录下。并做如下配置:

php_value date.timezone Asia/Shanghai

在这里插入图片描述
步骤三:在mariadb目录中编写服务安装配置文件并传入相应配置文件

(1)编写服务安装文件install.sls

mariadb-install:
  pkg.installed:
    - pkgs:
      - mariadb-server
      - MySQL-python

  file.managed:
    - name: /etc/my.cnf
    - source: salt://mariadb/files/my.cnf

  service.running:
    - name: mariadb
    - watch:
      - file: mariadb-install

(2)编写服务配置文件service.sls文件

include:
  - mariadb.install

database-init:  
  cmd.run:   #1】数据库安全初始化
    - name: mysql -e "DELETE FROM mysql.user WHERE User='';" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');" -e "DROP DATABASE IF EXISTS test;" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" -e "create database zabbix;" -e "UPDATE mysql.user SET Password=PASSWORD('westos') WHERE User='root';" -e "FLUSH PRIVILEGES;" && touch /var/lib/mysql/init.lock
    - creates: /var/lib/mysql/init.lock

zabbix-init:
  file.managed:
    - name: /mnt/create.sql.gz  #zabbix数据库初始化
    - source: salt://mariadb/files/create.sql.gz

  cmd.run:   
    - name: zcat /mnt/create.sql.gz | mysql -uroot -pwestos zabbix && touch /var/lib/mysql/zabbix-init.lock
    - creates: /var/lib/mysql/zabbix-init.lock
  
  mysql_user.present:   #创建远程登陆用户zabbix
    - host: '%'
    - name: zabbix
    - password: zabbix
 
  mysql_grants.present:  #对zabbix用户授于zabbix数据库所有权限
    - grant: all privileges
    - database: zabbix.*
    - user: zabbix
    - host: '%'

【1】数据库安全初始化及创建数据库zabbix

在某台主机上安装mariadb-server后,手动安全初始化,会生成文件/usr/bin/mysql_secure_installation文件,里边含有数据库安全初始化的 SQL操作语句,可将其复制粘贴过来。

(3)在/srv/salt/mariadb/files目录下导入服务配置文件

在某台主机上安装mariadb-server,拷贝配置文件/etc/my.cnf到此目录下,并做如下修改:
在这里插入图片描述
在某台主机上安装zabbix-server-mysql,将/usr/share/doc/zabbix-server-mysql-4.0.15/create.sql.gz zabbix数据库初始化信息拷贝到server1主机/srv/salt/mariadb/files/目录下

在这里插入图片描述(4)在你要作为数据库的minion主机上,将minion端与数据库连接
在配置文件/etc/salt/minion后面追加:

mysql.host: 'localhost'
mysql.port: 3306
mysql.user: 'root'
mysql.pass: 'westos'
mysql.db: 'zabbix'
mysql.unix_socket: '/var/lib/mysql/mysql.sock'
mysql.charset: 'utf8'

在这里插入图片描述
注意:如果你之前在mariadb主机上安装过mariadb-server,则需要删除数据。

rm -fr /var/lib/mysql

步骤四:编写多节点推送文件/srv/salt/top.sls文件并推送

base:
  'server1':
    - mariadb.service
  'server2':  
    - zabbix-server.install
  'server3':
    - zabbix-web.install

在这里插入图片描述
推送:

salt '*' state.highstate

成功标志:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述步骤五:在网页上搜索zabbix-web所在主机
http://172.25.1.3/status
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

二、改进

1、在/srv/salt目录下编写zabbix-agent目录,若要监控哪个节点直接在多节点推送文件top.sls中写进去即可。

步骤一:创建/srv/salt/zabbix-agent目录
在这里插入图片描述步骤二:编辑install.sls文件,服务安装配置步骤

zabbix-agent-install:
  pkg.installed:
      - name: zabbix-agent

  cmd.run:
    - name: cd /etc/yum.repos.d/ && echo -e "[zabbix]\nname= zabbix\nbaseurl= https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ \ngpgcheck= no " > 4.0.repo && yum clean all > /dev/null
    - creates: /etc/yum.repos.d/update.repo

  file.managed:
    - name: /etc/zabbix/zabbix_agentd.conf
    - source: salt://zabbix-agent/files/zabbix_agentd.conf.j2
    - template: jinja
    - context:
      Server: {{ pillar['zabbixserver'] }}
      ServerActive: {{ pillar['zabbixserver'] }}
      Hostname: {{ grains['fqdn'][-1] }}
      
  service.running:
    - name: zabbix-agent
    - reload: true
    - watch: 
      - file: zabbix-agent-install

步骤三:创建files目录,存放配置文件zabbix_agentd.conf

提前在某台主机上安装zabbix-agent,将配置文件拷贝到files目录下,并做如下配置:

 98 Server= {{ Server }}
139 ServerActive= {{ ServerActive }}
150 Hostname= {{ Hostname }}

步骤四:在pillar变量文件中定义变量

{% if grains['fqdn'] == 'server2' %}
dbhost: 172.25.1.1  
dbuser: zabbix
dbpass: zabbix
{% elif grains['fqdn'] == 'server3' %}
dbhost: 172.25.1.1
dbuser: zabbix
dbpass: zabbix
{% endif %}

zabbixserver: 172.25.1.2  #全局变量

步骤五:编写多节点推送文件top.sls

base:
  'server1':
    - mariadb.service
    - zabbix-agent.install
  'server2':  
    - zabbix-server.install
  'server3':
    - zabbix-web.install

步骤六:推送
在这里插入图片描述步骤七:浏览器搜索http://172.25.1.3/status
配置自动注册
在这里插入图片描述刷新:
在这里插入图片描述2、实现zabbix界面自动登陆
web界面一次登陆后,会在zabbix-web主机上生成/etc/zabbix/web/zabbix.conf.php文件

在这里插入图片描述将/etc/zabbix/web/zabbix.conf.php文件拷贝到server1主机上zabbix-web/files/目录下

在这里插入图片描述
并作如下配置:

<?php
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = '{{ dbhost }}';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = '{{ dbuser }}';
$DB['PASSWORD'] = '{{ dbpass }}';

// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';

$ZBX_SERVER      = '{{ zabbixserver }}';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'zabbix_server';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

编写zabbix-web/install.sls文件

zabbix-web-install:
  pkg.installed:
    - pkgs:
      - httpd
      - zabbix-web-mysql

  cmd.run:
    - name: cd /etc/yum.repos.d/ && echo -e "[centos] \nname=centos \nbaseurl= https://mirrors.aliyun.com/centos/7/os/x86_64/ \ngpgcheck=0" > centos.repo  && echo -e "[zabbix]\nname= zabbix\nbaseurl= https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ \ngpgcheck= no " > 4.0.repo && echo -e "[update] \nname= update \nbaseurl= https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/ \ngpgcheck= no" > update.repo && yum clean all > /dev/null
    - creates: /etc/yum.repos.d/update.repo

  file.managed:
    - name: /etc/httpd/conf.d/zabbix.conf
    - source: salt://zabbix-web/files/zabbix.conf

/etc/zabbix/web/zabbix.conf.php:
  file.managed:
    - source: salt://zabbix-web/files/zabbix.conf.php
    - template: jinja
    - context:
      dbhost: {{ pillar['dbhost'] }}
      dbuser: {{ pillar['dbuser'] }}
      dbpass: {{ pillar['dbpass'] }}
      zabbixserver: {{ pillar['zabbixserver']}}

  service.running:
    - name: httpd
    - reload: true
    - watch:
      - file: zabbix-web-install

做完这些配置后推送top.sls文件,会实现在浏览器搜索http://172.25.1.3/status时直接登陆成功,无之前的选项。

发布了170 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CapejasmineY/article/details/103555077