[背景]
(1)OS版本:CentOS7
(2)zabbix版本:3.0.4(当前最新版本)
(3)数据库:Mysql
(4)网络环境:无法连接外网
我的安装脚本都是按照之前博客的步骤来写的,链接:
这里主要是server端的代码解释,agent端比较简单,就不解释了。
执行方式:先ansible-playbook main.yml,然后在http://ip/zabbix上进行GUI安装,然后执行ansible-playbook after-setup.yml。
[模块详细]
一开始写脚本的时候,我几乎都使用的shell模块,然后用creates避免重复执行shell;
后期使用的模块主要有:
(1)shell:使用&&相当于管道符,执行多个shell命令
(2)lineinfile:确认文件中是否包含某行
(3)mysql_db:需要依赖MySQL-python包,用于创建数据库
(4)mysql_user:需要依赖MySQL-python包,用于创建数据库user
(5)service:用于服务重启
(6)file:可以用于创建文件、文件夹、创建软链接之类的
我觉得模块虽好,但是使用的功能范围较小,我比较懒,大多数还是使用的shell。
另外tags这个属性也不错,在跑playbook时,可以使用tags,控制需要跑的task。用法:ansible-playbook main.yml --tags="setup1"
[ansible tips]
ansible的官方文档非常全面,但是我觉得直接看文档还是很boring的,可以先看看别人写的代码,然后相应的去文档中查找不理解的地方。
(1)使用yum install ansible安装,若不成功则可能需要配置epel 源。安装完毕,可使用ansible --version命令,查看安装的版本。
(2)hosts文件的默认路径是/etc/ansible/,在hosts中定义机器的别名、ip等,分配机器在不同的[group]中,常用的参数有ansible_ssh_host、ansible_ssh_private_key_file、ansible_ssh_port、ansible_ssh_user。这些参数也可以在ansible.cfg中定义,参数大同小异。
(3)ssh公钥登录或者密钥文件配置完后,使用ansible -m ping 机器别名或群组名,eg:
# ansible -m ping zabbix
vagrant4 | success >> {
"changed": false,
"ping": "pong"
}
输出"ping": "pong",即代表连接成功。
(4)运行playbook的命令是ansible-playbook test.yml,编写playbook时要注意缩进空格,"-",":"等字符。另外,playbook对于双引号好像没有严格要求使用,转义字符\建议不要使用,其实也没必要使用。
(5)ansible具有幂等性,若执行playbook过程中报错,不会回滚。再次执行playbook时,已执行成功的task一般也不会重复操作。(这里的不会重复操作的task是指使用ansible模块的task,如果使用shell命令,可以使用creates关键字避免重复操作。)
[代码地址]
我写的脚本放在github上,可能还会有修改。
zabbix安装的链接:https://github.com/hello-wn/ansible_zabbix
另外github上也有写的很好的源码,是dj-wasabi的,对系统和数据库兼容性都非常好,而且直接跳过了web的GUI安装,安装成功后可以直接登陆。我在CentOS7上跑下来,基本上只有缺一两个安装包和mysql没启动的一些小bug,但是需要网络,从zabbix官网上下载rpm包;在ubuntu14.04上跑下来,全程没有报错,但是server的log里面报错了,可能也是缺包的问题。
dj-wasabi的github链接:https://github.com/dj-wasabi/ansible-zabbix-server
最近需要使用ansible自动化部署zabbix的server端和agent端,所以研究了一下。去年的时候,曾经接触过ansible,尝试用来部署openstack,但是那时候刚刚开始实习,啥也没鼓捣出来,后期会继续鼓捣。
(1)OS版本:CentOS7
(2)zabbix版本:3.0.4(当前最新版本)
(3)数据库:Mysql
(4)网络环境:无法连接外网
(5)zabbix安装方式:由于没网,采用源码包编译安装。
我的安装脚本都是按照之前博客的步骤来写的,链接:
zabbix server:http://blog.csdn.net/wn_hello/article/details/52121826
zabbix agent:http://blog.csdn.net/wn_hello/article/details/52121888
这里主要是server端的代码解释,agent端比较简单,就不解释了。
执行方式:先ansible-playbook main.yml,然后在http://ip/zabbix上进行GUI安装,然后执行ansible-playbook after-setup.yml。
(1)mian.yml是各种playbook的集合,使用include让playbook的执行顺序更加明显,代码如下:
---
- hosts: zabbix
become: yes
vars_files:
- default_vars.yml
tasks:
- name: install many packages
include: prepare.yml
tags:
- setup1
- name: set environment parameters
include: set-env.yml
tags:
- setup2
- name: import tables to zabbix database
include: set-zabbix.yml
tags:
- setup3
- name: install zabbix && modify config
include: install-zabbix.yml
tags:
- setup4
handlers:
- include: handlers.yml
(2)default_vars.yml是变量文件,可以在其中修改参数。
(3)prepare.yml主要是安装一堆package,主要是basic、mysql、php和apache的package。因为我的虚拟机是裸机,一开始安装zabbix以及后期报错缺了不少包,所以我决定一股脑都安装起来。
(4)set-env.yml是防火墙端口设置、selinux设置、数据库创建等。
(5)set-zabbix.yml是复制源码包、导入数据库表。
(6)install-zabbix.yml是编译安装zabbix、php配置和系统配置等。
(7)after-setup.yml的代码如下:
---
#Step5: after GUI setup
- hosts: zabbix
remote_user: root
vars_files:
- default_vars.yml
tasks:
- name: copy zabbix.conf.php
template: src=zabbix.conf.php.j2 dest={{html_dir}}/conf/zabbix.conf.php
tags:
- zabbix-conf-php
- others
notify:
- restart zabbix_server
handlers:
include: handlers.yml
主要功能是,在gui安装完后,配置zabbix.conf.php文件,这一步不能提前做,否则无法登陆zabbix。
[模块详细]
一开始写脚本的时候,我几乎都使用的shell模块,然后用creates避免重复执行shell;
后期使用的模块主要有:
(1)shell:使用&&相当于管道符,执行多个shell命令
(2)lineinfile:确认文件中是否包含某行
(3)mysql_db:需要依赖MySQL-python包,用于创建数据库
(4)mysql_user:需要依赖MySQL-python包,用于创建数据库user
(5)service:用于服务重启
(6)file:可以用于创建文件、文件夹、创建软链接之类的
我觉得模块虽好,但是使用的功能范围较小,我比较懒,大多数还是使用的shell。
另外tags这个属性也不错,在跑playbook时,可以使用tags,控制需要跑的task。用法:ansible-playbook main.yml --tags="setup1"
[ansible tips]
ansible的官方文档非常全面,但是我觉得直接看文档还是很boring的,可以先看看别人写的代码,然后相应的去文档中查找不理解的地方。
(1)使用yum install ansible安装,若不成功则可能需要配置epel 源。安装完毕,可使用ansible --version命令,查看安装的版本。
(2)hosts文件的默认路径是/etc/ansible/,在hosts中定义机器的别名、ip等,分配机器在不同的[group]中,常用的参数有ansible_ssh_host、ansible_ssh_private_key_file、ansible_ssh_port、ansible_ssh_user。这些参数也可以在ansible.cfg中定义,参数大同小异。
(3)ssh公钥登录或者密钥文件配置完后,使用ansible -m ping 机器别名或群组名,eg:
# ansible -m ping zabbix
vagrant4 | success >> {
"changed": false,
"ping": "pong"
}
输出"ping": "pong",即代表连接成功。
(4)运行playbook的命令是ansible-playbook test.yml,编写playbook时要注意缩进空格,"-",":"等字符。另外,playbook对于双引号好像没有严格要求使用,转义字符\建议不要使用,其实也没必要使用。
(5)ansible具有幂等性,若执行playbook过程中报错,不会回滚。再次执行playbook时,已执行成功的task一般也不会重复操作。(这里的不会重复操作的task是指使用ansible模块的task,如果使用shell命令,可以使用creates关键字避免重复操作。)
[代码地址]
我写的脚本放在github上,可能还会有修改。
zabbix安装的链接:https://github.com/hello-wn/ansible_zabbix
另外github上也有写的很好的源码,是dj-wasabi的,对系统和数据库兼容性都非常好,而且直接跳过了web的GUI安装,安装成功后可以直接登陆。我在CentOS7上跑下来,基本上只有缺一两个安装包和mysql没启动的一些小bug,但是需要网络,从zabbix官网上下载rpm包;在ubuntu14.04上跑下来,全程没有报错,但是server的log里面报错了,可能也是缺包的问题。
dj-wasabi的github链接:https://github.com/dj-wasabi/ansible-zabbix-server