前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ansible 批量部署 zabbix-agent

Ansible 批量部署 zabbix-agent

作者头像
Kevin song
发布于 2020-02-19 06:51:49
发布于 2020-02-19 06:51:49
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

Ansible简介

ansible基于python开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并进行管理,使得管理主机更加便捷。主版本大概每2个月发布一次。

核心组件说明

Ansible core :核心引擎

Host inventory :用来定义Ansible 所管理的主机,默认是在Ansible的host配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其他配置文件的位置。

Connection plugins:负责和被管理主机实现通信。除支持使用ssh连接被管理主机外, Ansible还支持其他的连接方式,所以需要有连接插件将各个主机用连接插件连接到 Ansible。

Playbooks:用来集中定义 Ansible任务的配置文件,即将多个任务定义在一个剧本中由 Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务。

Core modules:是 Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态。

Custom modules:用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能。

ansible功能特性

应用代码自动化部署

系统管理配置自动化

支持持续交付自动化

支持云计算大数据平台环境

轻量级,无需在客户端安装agent,更新时只需在控制机上进行更改即可

批量任务执行可以写成脚本,不用分发到远程就可以执行

支持非root用户管理操作,支持sudo

使用python编写,维护更简单

Ansible 工作模型

部署Ansible

Ansible 自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议进行通信的,所以控制主机安装Ansible软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#确保host上安装python
Python –V
#查看yum仓库中是否存在ansible 的rpm包
yum list |grep ansible
#安装ansible服务
yum install ansible  -y
#查看ansible 版本
ansible --version

Linux zabbix-agent 批量部署

环境

hostname

ip

des

zabbix-server

192.168.99.200

zabbix-server ansible

zabbix-proxy1

192.168.99.209

zabbix-agent

zabbix-db2

192.168.99.210

zabbix-agent

将所有主机ip加入到/etc/ansible/hosts文件中:

定义linux主机组和主机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server ~]# egrep -v "*#|^$" /etc/ansible/hosts 
[zabbix-agent-linux]
192.168.99.209
192.168.99.210

默认ssh的端口为22端口,如果为其他端口号,可在主机名后面加上端口号,如 192.168.159.131:9604,也可以修改配置文件中的remote_port变量值/etc/ansible/hosts也可以定义一个主机范围,如192.168.99.[100:200] ,表示192.168.99.100 - 192.168.99.200 的主机。

免密登录

生成密钥对并将公钥推送给被管理端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~
cd .ssh 
#将公钥推送至被管理端
ssh-copy-id root@192.168.99.209
ssh-copy-id root@192.168.99.210

查看linux被管理端是否已经连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server ~]# ansible -i /etc/ansible/hosts  zabbix-agent-linux  -m ping 
192.168.99.209 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.99.210 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[root@zabbix-server ~]# ansible -i /etc/ansible/hosts  zabbix-agent-linux  -a date
192.168.99.209 | SUCCESS | rc=0 >>
Wed Jan  1 09:35:03 CST 2020
192.168.99.210 | SUCCESS | rc=0 >>
Wed Jan  1 09:35:05 CST 2020
[root@zabbix-server ~]# ansible -i /etc/ansible/hosts  zabbix-agent-linux -m command -a  "free   -m"
192.168.99.209 | SUCCESS | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           3771         184        3320          19         266        3306
Swap:          3967           0        3967
192.168.99.210 | SUCCESS | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1819         171        1445          22         202        1445
Swap:          4091           0        4091

至此 ansible 安装以及主机清单配置完成。(注:如果连接失败请检查ansibleserver和被管理端是否能ping通,如能ping通,可以删除.ssh下的密钥,重新生成并下发)

ansible 批量下发文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ansible -i /etc/ansible/hosts  zabbix-agent-linux -m copy -a "src=/opt/system.sh des=/opt/"

实现步骤

1.安装zabbix-agent4.2的rpm包

2.使用yum安装zabbix-agent

3.修改agent配置文件的一些变量,将模板文件覆盖到agent配置文件

4.重启zabbix-agent

定义agent模板

创建模板文件,里面包含agent中可变的变量,如:主机名和server地址等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server opt]# cat  /etc/ansible/zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=50
EnableRemoteCommands=1
LogRemoteCommands=1
Server={{server}}
ServerActive={{server}}
Hostname={{hostname}}
HostMetadata=Linux
Timeout=10
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1

添加linux 的 playbook文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server opt]# cat  /etc/ansible/linux-agent.yml
- hosts: zabbix-agent-linux
  remote_user: root
  vars:
    server: 192.168.99.200
    hostname: "{{ ansible_hostname }}"
  tasks:
  - name: install rpm
    command: rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm

  - name: install agent
    command: yum install zabbix-agent -y
  - name: cp templates zabbix_agentd.conf to zabbix agentd
    template: src=/etc/ansible/zabbix_agentd.conf dest=/etc/zabbix/zabbix_agentd.conf

  - name: restart zabbix-agent
    command: systemctl restart zabbix-agent

执行playbook文件进行批量部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ansible-playbook -i /etc/ansible/hosts /etc/ansible/linux-agent.yml

Windows zabbix-agent 批量部署

环境

hostname

ip

des

zabbix-server

192.168.99.200

zabbix-server ansible

windows server 2016

192.168.99.234

zabbix-agent

Ansible依赖

pywinrm>=0.3.0

pywinrm可以使用pip来进行安装,执行以下命令

pip install pywinrm>=0.3.0

Windows依赖

PowerShell 3.0

NET Framework 4.0+

这里使用的是2016,上面的环境是不需要做配置的,如果是使用的server2008或更低版本需要进行升级之后才能使用,获取升级的详细信息可以访问ansible官方文档查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html#host-requirements

防火墙上开启winrm服务端口和agent服务端口

可以在powershell上执行下面的命令查看winrm当前的监听端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
winrm enumerate winrm/config/Listenerwinrm

服务默认是5985端口,zabbix-agent使用的是10050端口,因此需要在防火墙上开启5985和10050端口或直接关闭防火墙

下载Windows-agent压缩包

首先需要下载Windows-agent的压缩包并解压到ansible主机/etc/ansible/windows下

下载地址:https://www.zabbix.com/download_agents

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install  -y  unzip    zip
unzip zabbix_agents-4.2.8-win-amd64.zip  -d zabbix_agents

在ansible/hosts中添加主机信息

需要在hosts中指定与Windows连接的配置信息,默认情况下使用ntlm认证,如果想要获取关于winrm认证的详细信息,

访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html

定义linux主机组和主机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/etc/ansible/hosts
[zabbix-agent-windows]
172.18.51.122  ansible_python_interpreter=/usr/bin/python ansible_user="administrator" ansible_password="asd.123" ansible_port=5985 ansible_connection="winrm" ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore

查看linux被管理端是否已经连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server zabbix_agents]# ansible -i /etc/ansible/hosts  zabbix-agent-windows  -m win_ping
192.168.99.234 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

实现步骤

1.从ansible复制下载好的agent文件到Windows

2.修改windows agent配置文件的一些变量

3.安装zabbix-agent

4.启动zabbix-agent

定义windows agent模板

/etc/ansible/windows/zabbix_agentd.conf

创建一个模板文件,里面包含agent中可变的变量,如:主机名和server地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LogFile=c:\zabbix_agentd.log
LogFileSize=50
EnableRemoteCommands=1
LogRemoteCommands=1
Server={{server}}
ServerActive={{server}}
Hostname={{hostname}}
HostMetadata=Windows
UnsafeUserParameters=1

编写windows 的 playbook文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server windows]# cat windows-agent.yml 
- hosts: zabbix-agent-windows
  remote_user: administrator
  vars:
    server: 192.168.99.200
    hostname: "{{ ansible_hostname }}"
  tasks:
  - name: cp zabbix-agent
    win_copy:
      src: /etc/ansible/windows/zabbix_agents/
      dest: C:\windows_agent\
  - name: cp templates zabbix_agentd.conf to zabbix agentd
    win_template:
      src: /etc/ansible/windows/zabbix_agents/conf/zabbix_agentd.conf
      dest: C:\windows_agent\conf\
  - name: install zabbix-agent
    win_command: zabbix_agentd.exe -i -c C:\windows_agent\conf\zabbix_agentd.conf
    args:
      chdir: C:\windows_agent\bin\
  - name: start zabbix-agent
    win_command: zabbix_agentd.exe -s -c C:\windows_agent\conf\zabbix_agentd.conf
    args:
      chdir: C:\windows_agent\bin\

执行playbook文件进行批量部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zabbix-server windows]# ansible-playbook -i /etc/ansible/hosts /etc/ansible/windows/windows-agent.yml 

PLAY [zabbix-agent-windows] ***************************************************************
TASK [Gathering Facts] ********************************************************************
ok: [192.168.99.234]

TASK [cp zabbix-agent] ********************************************************************
changed: [192.168.99.234]

TASK [cp templates zabbix_agentd.conf to zabbix agentd] **********************************
TASK [install zabbix-agent] **************************************************************

TASK [start zabbix-agent] ****************************************************************

PLAY RECAP ********************************************************************************

配合ZABBIX 自动注册功能可实现主机的自助上线,主机自动注册的内容请查阅前期文章!

ZABBIX web 查看上线主机

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Mockito模拟进行单元测试
    MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。
chinotan
2019/07/15
9.8K0
Mockito模拟进行单元测试
博文精选|Mockito使用指南
https://blog.csdn.net/shensky711/article/details/52771493(点击阅读原文前往)
java达人
2018/12/24
4.5K0
单元测试框架spock和Mockito应用
spock是一款基于Groovy语言的单元测试框架,其基础也是Java的Junit,目前最新版已经到了2.0,但对Groovy和响应的Java版本要求较高,具体信息参考:Spock 2.0 M1版本初探。
FunTester
2020/05/18
2.5K0
Difference between @Mock, @InjectMocks and @Captor
我们的第一个选择是使用MockitoJUnitRunner注释 JUnit 测试:
查拉图斯特拉说
2023/12/19
2740
Java单元测试Mock框架Mockito入门介绍
Mockito是Java的单元测试Mock框架。它的logo是一杯古巴最著名的鸡尾酒Mojito,Mojito鸡尾酒,源自古巴的哈瓦那,带有浓厚的加勒比海风情。并不浓烈,但是喝一杯下去,脸上会泛起红晕,象少女的羞涩。味道很清新,有一点青涩、有点甜蜜。
dongfanger
2021/07/21
5.2K0
用过举手!SpringBoot 单元测试利器-Mockito
Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前,得先了解什麽是 mock 测试
JAVA葵花宝典
2020/03/11
5K0
Difference between @Mock, @InjectMocks and @Captor
我们的第一个选择是使用MockitoJUnitRunner注释 JUnit 测试:
查拉图斯特拉说
2023/11/09
5951
Difference between @Mock, @InjectMocks and @Captor
单元测试指南
在我们公司中要做单元测试,确实比较难,因为公司缺少这种氛围,有也只是局部的,大多数工程师没有这方面的习惯和素养,很多人都是有一定的抵触的心理,经过我私下的了解大概有以下几种原因吧。
Abalone
2022/07/14
6.4K0
单元测试指南
使用 Junit + Mockito 实践单元测试
相信做过开发的同学,都多多少少写过下面的代码,很长一段时间我一直以为这就是单元测试...
JMCui
2020/05/06
5K0
SpringBoot - 单元测试利器Mockito入门
Mock 测试就是在测试过程中,创建一个假的对象,避免你为了测试一个方法,却要自行构建整个 Bean 的依赖链。
小小工匠
2021/08/17
17.7K1
SpringBoot - 单元测试利器Mockito入门
一起学Mockito(一)
项目太大,工程太多。不知道何时起,我们就没了开发环境。代码都是在预发环境上验证没问题之后发到正式环境。总之一句话,本地代码是跑不起来的,想要徒手抓bug,你就要拥有一定水平。假设跟作者一般菜,那就只能无限打印log日志了,主要是打了日志可别忘了删。否则bug没抓到,还被别人看到那乱七八糟的代码怕是又要应届生同学一顿diss了。其实搭建一套开发环境理论是可行的,但是谁也撬不动好几个部门,即便撬动了,弄出来怕是得个一两年,所以就只能用单测自我安慰了。
写一点笔记
2022/08/11
5700
使用强大的 Mockito 来测试你的代码
这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例。 1、预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试。 如果你不熟悉 JUnit,请查看下面的教程: http://www.vogella.com/tutorials/JUnit/article.html 2、使用mock对象来进行测试 2.1 单元测试的目标和挑战 单元测试的思路是在不涉及依赖关系的情况下测试代码(隔离性),所以测试代码与其他类或者系统的关系应该尽量被消除。一个可行的消除方法是替换掉依赖类(测试替换),
用户1332428
2018/03/09
11.5K0
使用强大的 Mockito 来测试你的代码
JAVA实战:如何让单元测试覆盖率达到80%甚至以上
单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证。它是软件测试中的一种基本方法,也是软件开发过程中的一个重要步骤。
你可以叫我老白
2023/03/21
4.2K1
JAVA实战:如何让单元测试覆盖率达到80%甚至以上
[Java]单元测试组件Mockito
Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。什么是不容易构造的对象呢?例如HttpServletRequest,需要在有servlet容器环境中创建获取。那不容易获取的对象呢?如一个JedisCluster,需要准备redis相关环境,然后设置进去等等。
宇宙无敌暴龙战士之心悦大王
2023/04/03
4.2K1
#Android单元测试学习总结「建议收藏」
在Android Studio中新建一个项目的时候,app的gradle中会默认添加单元测试的相关依赖库:
全栈程序员站长
2022/09/06
5.3K0
#Android单元测试学习总结「建议收藏」
两个基于spring的单元测试简单样例
单元测试,从一定程度上可以看出一个同学达到的层次。但又不完全是,有时可能只是一个思考方式的转变。单元测试有非常多的工具供选择,在java中,junit无疑是比较常用的。本文列出,junit在spring中的使用样例,供参考。
烂猪皮
2021/04/02
8860
Java测试框架推荐
java有很多测试类框架, 开发中有很多比如Mokito, powermock, wiremock, cucumber ,但是powermock测试,sonar不认其覆盖率.
CoffeeLand
2020/05/17
1.5K0
单元测试
  每个开发人员都写过很多代码、函数,但是你能保证你写的每个函数都能执行并且正常吗?   我们太多时间站在功能需求的角度来审视我们的代码,认为需求实现功能逻辑正常,我们就完成了自己的使命。功能逻辑固然重要这个也是我们的目标。但是仅此而已吗,首先作为开发人员要知道,代码的终极目标有两个:实现需求保证逻辑正常、保证代码质量和可维护性。测试人员只能帮助我们查漏需求是否完整实现,对于代码质量和可维护性是需开发自己保证的,所以单元测试必不可少。
OPice
2019/11/11
1.8K0
[mockito使用教程]部分/内部方法
spy会创建一个真实的对象,对象的方法都会被调用,除非你将某个方法打桩(stage),这个方法才不执行,走mock数据,下面是例子。
逝兮诚
2019/12/20
3.9K0
@Spy、@SpyBean、@MockBean、@Mock、@RunWith、@ExtendWith对比
在写单元测试中经常会用到Mockito,但是这些类似的注解非常混乱,今天总结一下相关的注解,说明其中的含义和实现例子。
查拉图斯特拉说
2023/11/09
1.3K1
@Spy、@SpyBean、@MockBean、@Mock、@RunWith、@ExtendWith对比
相关推荐
Mockito模拟进行单元测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验