通过ansible自动化部署zabbix应用

本文介绍了如何通过Ansible自动化部署zabbix应用,解决大规模环境中手动安装agent的难题。文章详细讲解了Ansible的安装、命令套件、架构原理以及Ad-hoc和playbook的使用,特别讨论了如何使用playbook实现zabbix agent的批量安装、配置和启动。此外,还展示了如何根据操作系统类型选择不同版本的agent,并动态配置主机信息。
摘要由CSDN通过智能技术生成

zabbix在实际的应用中,可能需要监控的主机非常多,而每个主机的操作系统类型、版本也都不尽相同,在这种环境下,通过手动安装zabbix的agent端已经不现实了,此时就需要借助自动化工具完成zabbix agent的安装和配置。

要对海量主机进行zabbix agent的部署,难点有几个方面,分别是:

1、要考虑每个主机的操作系统类型、版本
2、针对不同操作系统版本,需要安装不同类型的zabbix agent客户端版本
3、zabbix agent客户端安装完成后,还需要自动化的配置每个客户端
4、zabbix agent配置文件中有些配置参数可能和每个主机有关(例如IP地址),此时就需要将主机信息写入配置文件中,而每个主机的配置信息又各不相同。
5、每个主机上的配置文件自动配置后,最后还要启动主机上的zabbix agent服务。

针对上面的5个问题,如何来实现批量自动化部署和配置呢,这里我们介绍一款自动化工具ansible,通过此工具,就可以实现zabbix agent的批量自动化部署。下面我们将介绍ansible的入门与使用,最后介绍通过ansible-playbook自动化一键部署zabbix agent的方法。

一、 ansible介绍与安装使用
1.1、 ansible介绍与特点

ansible是一款自动化运维工具,基于Python开发,可以实现批量系统设置、批量程序部署、批量执行命令等功能。特点如下:

Ansible完全基于Python开发,要求python的版本为2.6以上。
Ansible丰富的内置模块,近600个模块完全满足日常功能所需
Ansible默认通过SSH协议管理机器,因此,客户端无需任何配置,管理端配置好后即可使用。
Ansible目前属于Redhat公司,最新版本为Ansible2.7。

ansible的在企业中的应用环境主要有如下几个方面:

应用代码自动化部署
系统管理配置自动化
支持持续交付自动化
支持云计算,大数据平台环境
批量任务执行可以写成脚本,不用分发到远程就可以执行
支持非root用户管理操作,支持sudo
使用python编写,维护更简单。

1.2、 ansible的安装

这里的安装环境是centos7.5版本操作系统,首先需要安装第三方epel源:

[root@ACA8D5EF ~]# yum install epel-release

Ansible依赖python环境,同时,Ansible已经是RHEL/Centos的一个组成部分,因此推荐通过yum安装ansible:

[root@ACA8D5EF ~]# yum install ansible

1.3、 ansible的命令套件

安装完ansible后,ansible一共提供了七个指令,分别是:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。

(1)、ansible

ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。

(2)、ansible-doc

该指令用于查看模块信息,常用参数有两个-l 和 -s ,具体如下:
例如,列出所有已安装的模块:

# ansible-doc  -l

查看具体某模块的用法,这里如查看command模块

# ansible-doc  -s command

(3)、ansible-galaxy

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。

(4)、ansible-lint

ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 。

(5)、ansible-playbook

该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作,这个后面会做为一个重点来讲。

(6)、ansible-pull

该指令使用需要谈到ansible的另一种模式:pull 模式,这和平常经常用的push模式刚好相反,其适用于以下场景:
有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间
要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

(7)、ansible-vault

ansible-vault主要应用于配置文件中含有敏感信息,又不希望被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。

注:上面七个指令,用的最多的只有两个ansible 和ansible-playbook ,这两个一定要掌握,其它五个属于拓展或高级部分。

二、 ansible架构与运行原理
2.1、 ansible基本架构

下图是ansible的基本架构:

下面介绍下每个组成部分的含义:

核心:ansible

核心模块(Core Modules):是ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。

扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块。

插件(Plugins):完成较小型的任务。辅助模块来完成某个功能。

剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行。例如安装一个nginx服务,那么我们可以把这拆分为几个任务放到一个playbook中。例如:第一步需要下载nginx的安装包。第二步我可能考虑需要做的就是将我事先写好的nginx.conf的配置文件下发的目标服务器上。第三步,我们需要把服务启动起来。第四步,我们可能需要检查端口是否正常开启。那么这些步骤可以通过playbook来进行整合,然后通过inventory来下发到想要执行剧本的主机上。

连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,默认是基于SSH连接到目标机器上执行操作的,但是它还支持其他的连接方法,所以需要有连接插件,管理端支持local 、ssh、 paramiko三种方式连接被管理端。

主机清单(Host Inventory):定义ansible管理主机的策略,一般小型环境下只需要在host文件中写入主机的IP地址即可,但是到了中大型环境就需要使用静态inventory或者动态主机清单来生所需要执行的目标主机。

2.2、 ansible任务执行模式

ansible执行自动化任务,分为两种执行模式:

1、ad-hoc:单个模块,单条命令的批量执行,称之为ad-hoc
2、playbook:这个可以理解成为面向对象的编程,就像上面举例那样可以把多个想要执行的任务放到一个playbook中,当然多个任务在事物逻辑上最好是有上下联系的。通过多个任务可以完成一个总体的目标,这就是playbook。

三、 ansible主机和组的配置
3.1、简单的主机和组

ansible的配置文件位于/etc/ansible目录下,主要有ansible.cfg、hosts文件。本节重点介绍主机与组定义文件/etc/ansible/hosts.

/etc/ansible/hosts最简单的格式如下:

www.ixdba.net [webservers] ixdba1.net ixdba2.net [dbservers] db.ixdba1.net db.ixdba2.net

中括号中的名字代表组名,可以根据需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;

主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;

未分组的机器需保留在hosts的顶部。

3.2、指定主机范围

可在/etc/ansible/hosts文件中,指定主机的范围,示例如下:

[web]
www[01:50].ixdba.net [db] db[a:f].ixdba.net

3.3、主机变量

以下是Hosts部分中经常用到的变量部分:

ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名
ansible_ssh_pass #ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type #目标系统的shell的类型,默认sh
ansible_connection #SSH 连接的类型:local , ssh , paramiko

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值