zabbix4.4监控案例之自动化监控(重点)

这一节我们开始学习如何通过zabbix4.4实现自动化监控。在开始之前我们先来看看有这样两种场景:

新采购服务器

假设现在有新采购的服务器100台、那么我们的监控流程如下:服务器上架之后我们首先需要给服务器安装操作系统(当然、我们这里目前只是针对Unix类操作系统、如CentOS7)、然后初始化操作系统、安装zabbix agent。客户端安装完成之后我们就可以把100台服务器进行分组纳入监控,然后关联监控模板,为主机添加监控项、图形(有基础模板、数据库模板、Nginx模板等等,JMX模板等)。上面我们安装的操作服务器型号、操作系统版本、基础环境的版本支持是不是都是一样的?那如果是已有服务器呢?

已有服务器

如果现在有100台已有服务器、那么他们肯定是不同的批次、不同的操作系统、不同的版本。因为安装zabbix agent要求Python2版本的支持,那么服务器是不是支持Python,如果不是Python2、版本是不是支持升级;比如如果还有centos5操作系统、不支持python2、怎么办?

那么,有没有一种更快捷,自动化效率更高的方案来部署安装zabbix agent客户端、关联模板、然后自动把服务器纳入监控的管理方式呢?有的、这就是我们接下来要讲的。通常部署zabbix agent客户端有三种方式:手动部署、脚本部署和Ansible部署。如果是新采购100台服务器、我们是不是可以通过Ansible自动把服务器按照业务进行分组纳入zabbix监控,检测到服务器上线以后通过zabbix动作让服务器自动关联相关监控模板,是不是就可以实现自动监控了呢?。如果是不同批次、不同操作系统、不同版本的已有服务器、那我们就需要通过脚本来部署了、然后通过shell下发配置文件。

zabbix目前有两种方案实现监控自动化:网络发现和自动注册。所谓网络发现就是通过IP扫描的方式发现被监控主机;zabbix网络发现基于以下信息:IP范围(IP扫描)、可用的外部服务(FTP、SSH、WEB、POP3、IMAP、TCP等),通过端口检查(类似nmap扫描);扫描端口进行添加来自zabbix agent的信息(仅支持未加密模式)和来自snmp agent的信息。网络发现的好处是可以加快zabbix部署、简化管理、无需过多管理就能在快速变化的环境中使用zabbix。

而自动注册的方式就是Agent主动向zabbix server发送注册信息。他们的流程都是类似的,首先指定网络发现规则,执行具体动作;然后添加主机、添加主机到组;最后再关联模板即可。还有一种方式:那就是通过Zabbix API的方式进行监控、这里就不再详细讲解,有兴趣的同学可以自动百度了解。

1、什么是Ansible?

在开始之前我们先来看看什么是Ansible?

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。但其实Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,Ansible只是提供一种框架。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

  • Ansible 是与 Puppet, SaltStack, Chef 并驾齐驱的组态设定 (Infrastructure as Code) 工具,其简单易用的特性让人爱不释手,在 DevOps 界更佔有一席之地。
  • Ansible 提供一种最简单的方式用于发布、管理和编排计算机系统的工具,你可在数分钟内搞定。
  • Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。

Ansible特点

  • 拥有模块化的设计,Ansible能够调用特定的模块来完成特定任务 ,本身是核心组件,短小精悍 ;
  • Ansible是基于Python语言实现的,由Paramiko (python 的一个可并发连接 ssh 主机功能库 ) , PyYAML和Jinja2 ( 模板化 ) 三个关键模块实现;
  • Ansible的部署比较简单,agentless 无客户端工具;
  • 以主从模式工作;
  • 支持自定义模块功能;
  • 支持playbook剧本,连续任务按先后设置顺序完成;
  • 期望每个命令具有幂等性

Ansible架构图

img

Ansible主要功能模块

Ansible:Ansible核心程序。
Host Inventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。 定义ansible管理主机的策略,一般小型环境下只需要在host文件中写入主机的IP地址即可,但是到了中大型环境就需要使用静态inventory或者动态主机清单来生所需要执行的目标主机。
Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行。例如安装一个nginx服务,那么我们可以把这拆分为几个任务放到一个playbook中。例如:第一步需要下载nginx的安装包。第二步我可能考虑需要做的就是将我事先写好的nginx.conf的配置文件下发的目标服务器上。第三步,我们需要把服务启动起来。第四步,我们可能需要检查端口是否正常开启。那么这些步骤可以通过playbook来进行整合,然后通过inventory来下发到想要执行剧本的主机上。
Core Modules:核心模块,主要操作是通过调用核心模块来完成管理任务;是ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。
Custom Modules:自定义模块,完成核心模块无法完成的功能,支持多种语言。 
Connection Plugins:连接插件,Ansible和Host通信使用。ansible基于连接插件连接到各个主机上,默认是基于SSH连接到目标机器上执行操作的,但是它还支持其他的连接方法,所以需要有连接插件,管理端支持local 、ssh、 paramiko三种方式连接被管理端。
Plugins:完成较小型的任务。辅助模块来完成某个功能。

2、通过Ansible部署zabbix_agent

配置ssh互信

在开始之前我们需要在监控主机和被监控主机之间配置SSH互信,首先通过 ssh-keygen 命令生成ssh公钥和私钥,然后通过 ssh-copy-id root@172.16.200.4 命令把 id_rsa.pub 公钥发送到被监控端即可(如果有多台机器且密码不一致、可以通过脚本的方式把密码写入脚本里面,让脚本自动运行发送公钥):

img

img

执行完成以后我们就可以通过 ssh 172.16.200.4 直接登录主机、不需要输入密码:

img

安装Ansible

了解了Ansible的基础知识以后、我们就来看看如何通过Ansible实现监控自动化。首先去zabbix服务器上安装ansible。

yum install ansible -y

目录结构

这里我们定义一下Ansible的目录结构如下:

files目录放我们需要下发到被监控主机的各种安装包、这里我们放了两个版本的安装包、如果是CentOS6我们就安装zabbix-agent-3.5.6;反之如果是CentOS7我们就安装zabbix-agent-4.4.6;当然、各位小伙伴也可以根据自己的环境进行判判定;

hanlers目录放一些常用脚本、这里我们暂时用不到、也可以不配置;

tasks目录放ansible的任务主配置文件;

templates目录放zabbix_agent.conf的配置文件模板;

vars目录放变量文件,例如服务器的IP地址、不同主机的hostname变量等。

img

查找hosts

安装完成以后在 /etc/ansible/hosts 里面添加配置被监控主机:

img

然后我们通过 ansible -i hosts webservers -m ping 命令检测一下主机之间的互信状态和hosts配置,返回SUCCESS就代表我们已经具备了ansible 批量部署zabbix的条件了:

img

注:我这里有一个 [WARNING]: Skipping plugin (/usr/lib/python2.7/site-packages/ansible/plugins/callback/foreman.py) as it seems to be invalid: from_buffer() cannot return the address of the raw string within a str or unicode or bytearray object 错误的问题、找了好多文章都没找到答案、有知道的小伙伴联系我一下。

vars变量文件

zabbix_serverip: 172.16.200.105
zabbix_activeip: 172.16.200.105
agent_hostname: '{{ ansible_hostname }}'

img

注:agent_hostname是通过ansible抓取到的。

任务文件

在 tasks 目录下面创建main.yaml 文件,并插入如下内容(注意yaml文件的格式):

- name: copy zabbix_agentd
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "6"
  copy: src=/etc/ansible/roles/zabbix_agent/files/zabbix-agent-3.5.6-1.el7.x86_64.rpm dest=/usr/local/src/zabbix-agent-3.5.6-1.el7.x86_64.rpm
- name: copy zabbix_agentd
  when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
  copy: src=/etc/ansible/roles/zabbix_agent/files/zabbix-agent-4.4.6-1.el7.x86_64.rpm dest=/usr/local/src/zabbix-agent-4.4.6-1.el7.x86_64.rpm
- name: install zabbix-agend
  shell: rpm -ivh /usr/local/src/zabbix-agent-*
- name: up zabbix-agent file client
  template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
- name: enabled service zabbix-agent
  service: name=zabbix-agent enabled=yes
- name: start  service zabbix-agent
  service: name=zabbix-agent state=started

img

注:我们首先通过去定义tasks任务、在任务里面我们去判断操作系统的版本;如果是CentOS6、我们就把zabbix-agent-3.5.6-1.el7.x86_64.rpm 文件下发到被监控端;如果是CentOS7,我们就把zabbix-agent-4.4.6-1.el7.x86_64.rpm下发到被监控端,文件下发完成以后我们通过rpm -ivh 命令进行安装。安装完成以后开始下发zabbix_agent.conf.j2配置文件到被监控主机的/etc/zabbix/zabbix_agentd.conf里面。最后启动zabbix_agent客户端并把客户端设置为开机启动。

Ansible启动文件

我们还要去创建ansible启动文件、hosts指的是上面hosts文件里面的[webservers](必须要和hosts文件对应),roles里面的zabbix_agent指的是roles文件目录下面的zabbix_agent目录:

- hosts: webservers
  user: root
  roles:
    - zabbix_agent

img

执行安装

下面我们进入 /etc/ansible 目录,通过ansible-playbook zabbix_agent.yaml 命令开始安装被监控端的zabbix_agent了,安装过程如下:

img

注:我们可以看到ansible首先去做了操作系统检测、检测到不是CentOS6操作系统后、直接跳过;检测到是CentOS7操作系统后开始拷贝安装包、安装zabbix_agent客户端、下发配置文件、把zabbix_agent客户端设置为开机启动、启动zabbix_agent客户端。

节点验证

我们同样也可以去172.16.200.4节点查看一下zabbix_agent的服务状态、发现10500端口已经正常监听;查看配置文件,我们发现配置文件也已经正常下发:

img

img

客户端自动安装完成以后我们就可以去zabbix里面配置网络发现-执行动作-发现主机了。

3、zabbix自动发现

现在我们就可以去zabbix里面通过配置-自动发现-创建发现规则(也可以用默认的)来创建一个自动发现规则了;我们可以定义IP地址范围、更新间隔时间(默认时间为1h,这里为了快速展示手动修改为1m)、设备唯一性准则、主机名称等信息:

img

定义完成之后稍等1分钟、我们就可以到监测-自动发现里面看到我们刚才配置的172.16.200.4主机已经被zabbix发现了:

img

4、zabbix自动发现动作

我们去配置-动作-自动发现-创建动作里面去创建一个执行动作(当然这里也可以采用系统默认的动作),填写具体的动作信息,满足动作的条件也可以根据自己的需求进行添加;这里我们添加了接收到的值为Linux、自动发现状态为UP、服务类型为zabbix客户端三个条件;在操作里面关联主机模板、并添加主机;然后就可以启用了:

img

img

img

静静等待1分钟、我们就可以看到、Ansible主机(172.16.200.4)已经被zabbix自动发现并添加到主机里面去了,同时也关联了我们指定的模板;各项监控数据也正常显示了:

img

img

好了、zabbix4.4监控案例之自动化监控的内容到这里就完成了 、自动注册的功能这里就不再详细讲解了、网络发现是zabbix主动去扫描、而自动注册是zabbix_agent主动上报数据;执行动作和过程都是一样的、感兴趣的小伙伴可以自动去百度。到这里、zabbix的全部内容都已经结束了、后面有空我会把zabbix对接grafana的内容补上的。

推荐文章