集群运维自动化工具ansible之使用playbook安装zabbix客户端,ansiblezabbix
集群运维自动化工具ansible之使用playbook安装zabbix客户端,ansiblezabbix
之前介绍了关于ansible的安装与使用(包括模块与playbook使用,地址是http://www.jb51.net/article/52154.htm),今天介绍一下如何使用playbook来部署zabbix客户端。
ansible服务端的环境为centos 6.5 x86_64系统
ansible客户端环境为centos 6.3 x86_64系统
目前我的playbook只允许centos或redhat 6系列系统来安装zabbix客户端,并且客户端的版本是2.0.6.
下面是playbook的结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
14:29:30
#
pwd
/etc/ansible/roles
root@ip-10-10-10-10: /etc/ansible/roles
14:29:37
#
tree zabbix_client_*
zabbix_client_delete
删除已经安装的zabbix客户端
├──
files 存放文件的
├──
handlers 重启的东东
├──
meta galaxy_info的信息
│
└── main.yml
├──
tasks 操作的任务流程
│
├── delete.yml
│
└── main.yml
├──
templates 模板
└──
vars 变量
└──
main.yml
zabbix_client_install
├──
files
│
└── zabbix-2.0.6. tar .gz
├──
handlers
├──
meta
│
└── main.yml
├──
tasks
│
├── copy.yml
│
├── delete.yml
│
├── install .yml
│
└── main.yml
├──
templates
│
├── zabbix_agentd
│
└── zabbix_agentd.conf
└──
vars
└──
main.yml
12
directories, 13 files
|
下面是先介绍一下安装方面zabbix_client_install的内容
1、galaxy_info的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 |
14:32:15
#
cat /etc/ansible/roles/zabbix_client_install/meta/main.yml
galaxy_info:
author:
Deng Lei
description:
Install Zabbix Client
license:
MIT
min_ansible_version:
1.6
platforms:
-
name: CentOS
versions:
-
6
categories:
-
Monitor
dependencies:
[]
|
2、task里的copy.xml信息
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
14:33:35
#
cat /etc/ansible/roles/zabbix_client_install/tasks/copy.yml
-
name: Stop Exist Zabbix Client Service In Redhat Client
shell:
ps
-ef| grep
zabbix| grep
- v
grep | awk
'{print $2}' | xargs
kill
-9 >> /dev/null
2>&1
ignore_errors:
yes
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Delete Exist Zabbix Client Dir In Redhat Client
shell:
rm
-rf {{ zabbix_dir }} /zabbix
ignore_errors:
yes
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Install Base Require Software In Redhat Client
yum:
name={{ item }} state=latest
with_items:
-
telnet
-
dmidecode
-
tar
-
name: Create Zabbix User In Redhat Client
user:
name={{ zabbix_user }} state=present createhome=no shell= /sbin/nologin
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Copy Zabbix Client Software To Redhat Client
copy:
src=zabbix-{{ zabbix_version }}. tar .gz
dest= /tmp/zabbix- {{
zabbix_version }}. tar .gz
owner=root group=root
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Uncompression Zabbix Client Software To Redhat Client
shell:
tar
zxf /tmp/zabbix- {{
zabbix_version }}. tar .gz
-C {{ zabbix_dir }}/
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Copy Zabbix Start Script To Redhat Client
template:
src=zabbix_agentd dest= /etc/init .d /zabbix_agentd
owner=root group=root mode=0755
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Copy Zabbix Config To Redhat Client
template:
src=zabbix_agentd.conf dest={{ zabbix_dir }} /zabbix/conf/zabbix_agentd .conf
owner={{ zabbix_user }} group={{ zabbix_user }} mode=0644
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
|
此文件是复制对应的文件到客户端
3、task的install.yml信息
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
14:34:26
#
cat /etc/ansible/roles/zabbix_client_install/tasks/install.yml
-
name: Modify Zabbix Dir Permission In Redhat Client
file :
path={{ zabbix_dir }} /zabbix
owner={{ zabbix_user }} group={{ zabbix_user }} mode=0755
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Check Zabbix User Sudo Permission In Redhat Client
shell:
grep
"{{ zabbix_user }}"
/etc/sudoers | wc
-l
register:
zabbix_sudoer
ignore_errors:
True
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Give Sudo Permission To Zabbix User In Redhat Client
shell:
echo
"{{ zabbix_user }} ALL=(root) NOPASSWD:/bin/netstat, /usr/bin/omreport"
>> /etc/sudoers
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6 and zabbix_sudoer|int ==0
-
name: Start Zabbix Service In Redhat Client
shell:
/etc/init .d /zabbix_agentd
start
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
-
name: Add Boot Start Zabbix Service In Redhat Client
shell:
chkconfig --level 345 zabbix_agentd on
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
|
此文件主要是安装
4、tasks的delete.yml信息
?1 2 3 4 |
14:35:08
#
cat /etc/ansible/roles/zabbix_client_install/tasks/delete.yml
-
name: Delete Zabbix compression Software In Redhat Client
shell:
rm
-rf /tmp/zabbix- {{
zabbix_version }}. tar .gz
when:
ansible_os_family == "RedHat"
and ansible_lsb.major_release|int == 6
|
此文件是安装完成后,删除安装前的文件
5、tasks的mail.yml
?1 2 3 4 |
14:35:37
#
cat /etc/ansible/roles/zabbix_client_install/tasks/main.yml
-
include: copy.yml
-
include: install .yml
-
include: delete.yml
|
此文件是允许运行哪个文件
6、templates的zabbix_agentd
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
15:15:45
#
cat /etc/ansible/roles/zabbix_client_install/templates/zabbix_agentd
#!/bin/bash
#
#
chkconfig: - 85 15
#
description: Zabbix client script.
#
processname: Zabbix
.
/etc/profile
SERVICE= "Zabbix
agent"
DAEMON={{
zabbix_dir }} /zabbix/sbin/zabbix_agentd
PIDFILE= /tmp/zabbix_agentd .pid
CONFIG={{
zabbix_dir }} /zabbix/conf/zabbix_agentd .conf
zabbix_agent_status=` ps
aux| grep
zabbix_agentd.conf| grep
- v
grep | wc
-l`
zabbix_agent_pid=` ps
aux| grep
zabbix_agentd| grep
- v
grep | awk
'NR==1{print $2}' `
#
Source function library.
.
/etc/rc .d /init .d /functions
#
Source networking configuration.
.
/etc/sysconfig/network
function
check()
{
if
[ $? - eq
0 ]; then
action
$ "Operating
is:"
/bin/true
else
action
$ "Operating
is:"
/bin/false
fi
}
case
$1 in
'start' )
if
[ -x ${DAEMON} ]
then
$DAEMON
-c $CONFIG
#
Error checking here would be good...
echo
"${SERVICE} started."
else
echo
"Can't find file ${DAEMON}."
echo
"${SERVICE} NOT started."
fi
check
;;
'stop' )
if
[ -s ${PIDFILE} ]
then
if
kill
` cat
${PIDFILE}` > /dev/null
2>&1
then
echo
"${SERVICE} terminated."
rm
-f ${PIDFILE}
fi
fi
check
;;
'restart' )
/bin/bash
$0 stop
sleep
5
/bin/bash
$0 start
;;
'status' )
if
[ $zabbix_agent_status - ne
0 ]; then
echo
"Zabbix Agentd is running ($zabbix_agent_pid)"
else
echo
"Zabbix Agentd is not running!"
fi
;;
*)
echo
"Usage: $0 {start|stop|status|restart}"
;;
esac
exit
0
|
这个文件是启动客户端的脚本
7、templates的zabbix_agentd.conf
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
15:16:36
#
cat /etc/ansible/roles/zabbix_client_install/templates/zabbix_agentd.conf
#
This is a config file for the Zabbix agent daemon (Unix)
#
To get more information about Zabbix, visit
http://www.zabbix.com
############
GENERAL PARAMETERS #################
###
Option: PidFile
#
Name of PID file.
#
#
Mandatory: no
#
Default:
#
PidFile=/tmp/zabbix_agentd.pid
###
Option: LogFile
#
Name of log file.
#
If not set, syslog is used.
#
#
Mandatory: no
#
Default:
#
LogFile=
LogFile= /tmp/zabbix_agentd .log
###
Option: LogFileSize
#
Maximum size of log file in MB.
#
0 - disable automatic log rotation.
#
#
Mandatory: no
#
Range: 0-1024
#
Default:
#
LogFileSize=1
###
Option: DebugLevel
#
Specifies debug level
#
0 - no debug
#
1 - critical information
#
2 - error information
#
3 - warnings
#
4 - for debugging (produces lots of information)
#
#
Mandatory: no
#
Range: 0-4
#
Default:
#
DebugLevel=3
###
Option: SourceIP
#
Source IP address for outgoing connections.
#
#
Mandatory: no
#
Default:
#
SourceIP=
###
Option: EnableRemoteCommands
#
Whether remote commands from Zabbix server are allowed.
#
0 - not allowed
#
1 - allowed
#
#
Mandatory: no
#
Default:
#
EnableRemoteCommands=0
###
Option: LogRemoteCommands
#
Enable logging of executed shell commands as warnings.
#
0 - disabled
#
1 - enabled
#
#
Mandatory: no
#
Default:
#
LogRemoteCommands=0
#####
Passive checks related
###
Option: Server
#
List of comma delimited IP addresses (or hostnames) of Zabbix servers.
#
Incoming connections will be accepted only from the hosts listed here.
#
No spaces allowed.
#
If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
#
#
Mandatory: no
#
Default:
#
Server=zabbix-server-external.autoclouds.net
Server={{
zabbix_server_ip }}
###
Option: ListenPort
#
Agent will listen on this port for connections from the server.
#
#
Mandatory: no
#
Range: 1024-32767
#
Default:
ListenPort={{
zabbix_port }}
###
Option: ListenIP
#
List of comma delimited IP addresses that the agent should listen on.
#
First IP address is sent to Zabbix server if connecting to it to retrieve list of active checks.
#
#
Mandatory: no
#
Default:
#
ListenIP=0.0.0.0
###
Option: StartAgents
#
Number of pre-forked instances of zabbix_agentd that process passive checks.
#
If set to 0, disables passive checks and the agent will not listen on any TCP port.
#
#
Mandatory: no
#
Range: 0-100
#
Default:
#
StartAgents=3
#####
Active checks related
###
Option: ServerActive
#
List of comma delimited IP:port (or hostname:port) pairs of Zabbix servers for active checks.
#
If port is not specified, default port is used.
#
IPv6 addresses must be enclosed in square brackets if port for that host is specified.
#
If port is not specified, square brackets for IPv6 addresses are optional.
#
If this parameter is not specified, active checks are disabled.
#
Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
#
Mandatory: no
#
Default:
#
ServerActive=
###
Option: Hostname
#
Unique, case sensitive hostname.
#
Required for active checks and must match hostname as configured on the server.
#
Value is acquired from HostnameItem if undefined.
#
#
Mandatory: no
#
Default:
#
Hostname=
Hostname={{
ansible_hostname }}
###
Option: HostnameItem
#
Item used for generating Hostname if it is undefined.
#
Ignored if Hostname is defined.
#
#
Mandatory: no
#
Default:
#
HostnameItem=system.hostname
###
Option: RefreshActiveChecks
#
How often list of active checks is refreshed, in seconds.
#
#
Mandatory: no
#
Range: 60-3600
#
Default:
#
RefreshActiveChecks=120
###
Option: BufferSend
#
Do not keep data longer than N seconds in buffer.
#
#
Mandatory: no
#
Range: 1-3600
#
Default:
#
BufferSend=5
###
Option: BufferSize
#
Maximum number of values in a memory buffer. The agent will send
#
all collected data to Zabbix Server or Proxy if the buffer is full.
#
#
Mandatory: no
#
Range: 2-65535
#
Default:
#
BufferSize=100
###
Option: MaxLinesPerSecond
#
Maximum number of new lines the agent will send per second to Zabbix Server
#
or Proxy processing 'log' and 'logrt' active checks.
#
The provided value will be overridden by the parameter 'maxlines',
#
provided in 'log' or 'logrt' item keys.
#
#
Mandatory: no
#
Range: 1-1000
#
Default:
#
MaxLinesPerSecond=100
###
Option: AllowRoot
#
Allow the agent to run as 'root'. If disabled and the agent is started by 'root', the agent
#
will try to switch to user 'zabbix' instead. Has no effect if started under a regular user.
#
0 - do not allow
#
1 - allow
#
#
Mandatory: no
#
Default:
#
AllowRoot=0
############
ADVANCED PARAMETERS #################
###
Option: Alias
#
Sets an alias for parameter. It can be useful to substitute long and complex parameter name with a smaller and simpler one.
#
#
Mandatory: no
#
Range:
#
Default:
###
Option: Timeout
#
Spend no more than Timeout seconds on processing
#
#
Mandatory: no
#
Range: 1-30
#
Default:
Timeout=20
###
Option: Include
#
You may include individual files or all files in a directory in the configuration file.
#
Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
#
Mandatory: no
#
Default:
#
Include=
#
Include=/usr/local/etc/zabbix_agentd.userparams.conf
#
Include=/usr/local/etc/zabbix_agentd.conf.d/
#######
USER-DEFINED MONITORED PARAMETERS #######
###
Option: UnsafeUserParameters
#
Allow all characters to be passed in arguments to user-defined parameters.
#
0 - do not allow
#
1 - allow
#
#
Mandatory: no
#
Range: 0-1
#
Default:
#
UnsafeUserParameters=0
###
Option: UserParameter
#
User-defined parameter to monitor. There can be several user-defined parameters.
#
Format: UserParameter=<key>,<shell command>
#
See 'zabbix_agentd' directory for examples.
#
#
Mandatory: no
#
Default:
#
UserParameter=
UserParameter=memcached_stats[*],( echo
stats; sleep
1) | telnet {{ ansible_default_ipv4.address }} $1 2>&1 | awk
'/STAT $2 / {print $NF}'
UserParameter=mysql[*],mysql
-h {{ ansible_default_ipv4.address }} -P 3306 -uzabbix -pzabbix -e "show
global status" | grep
"\<$1\>" | cut
-f2
UserParameter=redis_stats[*],( echo
info; sleep
1) | telnet {{ ansible_default_ipv4.address }} $1 2>&1 | grep
$2| cut
-d : -f2
UserParameter=custom.vfs.dev. read .ops[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$4}'
UserParameter=custom.vfs.dev. read .ms[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$7}'
UserParameter=custom.vfs.dev.write.ops[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$8}'
UserParameter=custom.vfs.dev.write.ms[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$11}'
UserParameter=custom.vfs.dev.io.active[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$12}'
UserParameter=custom.vfs.dev.io.ms[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$13}'
UserParameter=custom.vfs.dev. read .sectors[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$6}'
UserParameter=custom.vfs.dev.write.sectors[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$10}'
UserParameter=MongoDB.Status[*], /bin/echo
"db.serverStatus().$1"
| /usr/bin/mongo
admin | grep
"$2" | awk
-F: '{print
$$2}' | awk
-F, '{print
$$1}'
UserParameter=check_lvm[*], /usr/bin/sudo
/usr/local/zabbix/bin/check_lvm .sh
$1
UserParameter=TCP_ESTABLISHED,ss
-s| awk
'NR==2{print $4}' | cut
-d , -f1
UserParameter=TCP_CLOSED,ss
-s| awk
'NR==2{print $6}' | cut
-d , -f1
UserParameter=TCP_TIMEWAIT,ss
-s| awk
'NR==2{print $12}' | cut
-d / -f1
UserParameter=zabbix_low_discovery[*], /bin/bash
/usr/local/zabbix/bin/zabbix_low_discovery .sh
$1
UserParameter=mysql_stats[*],mysql
-h {{ ansible_default_ipv4.address }} -P $1 -uzabbix -pzabbix -e "show
global status" | grep
"\<$2\>" | cut
-f2
UserParameter=mysql_stats_slave[*],mysql
-h {{ ansible_default_ipv4.address }} -P $1 -uzabbix -pzabbix -e "show
slave status\G" | grep
"\<$2\>" | awk
'{if($NF=="Yes") {print 1} else {print 0}}'
UserParameter=check_platform,dmidecode
| grep
Vendor| awk
-F '
'
'{if($2=="Dell") {print 1} else {print 0}}'
#follow
is hardware monitor
UserParameter=hardware_battery,omreport
chassis batteries| awk
'/^Status/{if($NF=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_cpu_model, awk
- v
hardware_cpu_crontol=` sudo
omreport chassis biossetup| awk
'/C State/{if($NF=="Enabled") {print 0} else {print 1}}' `
- v
hardware_cpu_c1=` sudo
omreport chassis biossetup| awk
'/C1[-|E]/{if($NF=="Enabled") {print 0} else {print 1}}' `
'BEGIN{if(hardware_cpu_crontol==0
&& hardware_cpu_c1==0) {print 0} else {print 1}}'
UserParameter=hardware_fan_health, awk
- v
hardware_fan_number=`omreport chassis fans| grep
-c "^Index" `
- v
hardware_fan=`omreport chassis fans| awk
'/^Status/{if($NF=="Ok") count+=1}END{print count}' `
'BEGIN{if(hardware_fan_number==hardware_fan)
{print 1} else {print 0}}'
UserParameter=hardware_memory_health, awk
- v
hardware_memory=`omreport chassis memory| awk
'/^Health/{print $NF}' `
'BEGIN{if(hardware_memory=="Ok")
{print 1} else {print 0}}'
UserParameter=hardware_nic_health, awk
- v
hardware_nic_number=`omreport chassis nics | grep
-c "Interface
Name" `
- v
hardware_nic=`omreport chassis nics | awk
'/^Connection Status/{print $NF}' | wc
-l` 'BEGIN{if(hardware_nic_number==hardware_nic)
{print 1} else {print 0}}'
UserParameter=hardware_cpu,omreport
chassis processors| awk
'/^Health/{if($NF=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_power_health, awk
- v
hardware_power_number=`omreport chassis pwrsupplies| grep
-c "Index" `
- v
hardware_power=`omreport chassis pwrsupplies| awk
'/^Status/{if($NF=="Ok") count+=1}END{print count}' `
'BEGIN{if(hardware_power_number==hardware_power)
{print 1} else {print 0}}'
UserParameter=hardware_temp,omreport
chassis temps| awk
'/^Status/{if($NF=="Ok") {print 1} else {print 0}}' | head
-n 1
UserParameter=hardware_physics_health, awk
- v
hardware_physics_disk_number=`omreport storage pdisk controller=0| grep
-c "^ID" `
- v
hardware_physics_disk=`omreport storage pdisk controller=0| awk
'/^State/{if($NF=="Online") count+=1}END{print count}' `
'BEGIN{if(hardware_physics_disk_number==hardware_physics_disk)
{print 1} else {print 0}}'
UserParameter=hardware_virtual_health, awk
- v
hardware_virtual_disk_number=`omreport storage vdisk controller=0| grep
-c "^ID" `
- v
hardware_virtual_disk=`omreport storage vdisk controller=0| awk
'/^State/{if($NF=="Ready") count+=1}END{print count}' `
'BEGIN{if(hardware_virtual_disk_number==hardware_virtual_disk)
{print 1} else {print 0}}'
UserParameter=pyora[*], /usr/local/zabbix/bin/pyora .py
--username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8
|
此文件是客户端的配置文件
8、vars的main.yml
1 2 3 4 5 6 |
15:17:06
#
cat /etc/ansible/roles/zabbix_client_install/vars/main.yml
zabbix_dir:
/usr/local
客户端安全目录
zabbix_version:
2.0.6 客户端软件版本
zabbix_user:
zabbix 客户端用户
zabbix_port:
10050 客户端的端口
zabbix_server_ip:
192.168.1.10 zabbix_server的ip
|
此文件是配置变量的
9、ansible安装zabbix客户端的playbook配置文件zabbix_client_install.yml
?1 2 3 4 5 6 7 |
15:20:02
#
cat /etc/ansible/zabbix_client_install.yml
---
-
hosts: "{{host}}"
remote_user:
"{{user}}"
gather_facts:
True
roles:
-
zabbix_client_install
|
10、使用playbook安装zabbix客户端
我的测试客户端环境是centos 6.3,ip是192.168.240.17,使用key登陆
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
15:22:01
#
cd /etc/ansible/
root@ip-10-10-10-10: /etc/ansible
15:22:04
#
time ansible-playbook zabbix_client_install.yml --extra-vars "host=192.168.240.17 user=root" --private-key=/root/test.pem
PLAY
[192.168.240.17] *********************************************************
GATHERING
FACTS ***************************************************************
ok:
[192.168.240.17]
TASK:
[zabbix_client_install | Stop Exist Zabbix Client Service In Redhat Client] ***
failed:
[192.168.240.17] => { "changed" :
true ,
"cmd" :
"ps
-ef|grep zabbix|grep -v grep|awk '{print $2}'|xargs kill -9 >>/dev/null 2>&1 " ,
"delta" :
"0:00:00.018213" ,
"end" :
"2014-07-10
07:22:34.793910" ,
"item" :
"" ,
"rc" :
123, "start" :
"2014-07-10
07:22:34.775697" }
...ignoring
TASK:
[zabbix_client_install | Delete Exist Zabbix Client Dir In Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Install Base Require Software In Redhat Client] ***
ok:
[192.168.240.17] => (item=telnet,dmidecode, tar )
TASK:
[zabbix_client_install | Create Zabbix User In Redhat Client] ***********
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Copy Zabbix Client Software To Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Uncompression Zabbix Client Software To Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Copy Zabbix Start Script To Redhat Client] *****
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Copy Zabbix Config To Redhat Client] ***********
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Modify Zabbix Dir Permission In Redhat Client] ***
ok:
[192.168.240.17]
TASK:
[zabbix_client_install | Check Zabbix User Sudo Permission In Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Give Sudo Permission To Zabbix User In Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Start Zabbix Service In Redhat Client] *********
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Add Boot Start Zabbix Service In Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_install | Delete Zabbix compression Software In Redhat Client] ***
changed:
[192.168.240.17]
PLAY
RECAP ********************************************************************
192.168.240.17
: ok=15 changed=12 unreachable=0 failed=0
real
0m39.888s
user
0m1.547s
sys
0m0.197s
|
可以看到39秒就安装完成,主要花费时间比较长的地方是fact收集、yum安装、文件传输。
11、测试安装情况
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
[root@ip-10-10-240-21
tmp] #
ifconfig
eth0
Link encap:Ethernet HWaddr FA:16:3E:34:62:D0
inet
addr:10.10.240.21 Bcast:10.10.240.255 Mask:255.255.255.0
inet6
addr: fe80::f816:3eff:fe34:62d0 /64
Scope:Link
UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:542391 errors:0 dropped:0 overruns:0 frame:0
TX
packets:77391 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:1000
RX
bytes:142341119 (135.7 MiB) TX bytes:6451154 (6.1 MiB)
lo
Link encap:Local Loopback
inet
addr:127.0.0.1 Mask:255.0.0.0
inet6
addr: ::1 /128
Scope:Host
UP
LOOPBACK RUNNING MTU:16436 Metric:1
RX
packets:10 errors:0 dropped:0 overruns:0 frame:0
TX
packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX
bytes:700 (700.0 b) TX bytes:700 (700.0 b)
[root@ip-10-10-240-21
tmp] #
ps -ef|grep zabbix
zabbix
26991 1 0 07:22 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_agentd
-c /usr/local/zabbix/conf/zabbix_agentd .conf
zabbix
26993 26991 0 07:22 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_agentd
-c /usr/local/zabbix/conf/zabbix_agentd .conf
zabbix
26994 26991 0 07:22 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_agentd
-c /usr/local/zabbix/conf/zabbix_agentd .conf
zabbix
26995 26991 0 07:22 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_agentd
-c /usr/local/zabbix/conf/zabbix_agentd .conf
zabbix
26996 26991 0 07:22 ? 00:00:00 /usr/local/zabbix/sbin/zabbix_agentd
-c /usr/local/zabbix/conf/zabbix_agentd .conf
root
27102 13773 0 07:24 pts /0
00:00:00 grep
zabbix
[root@ip-10-10-240-21
tmp] #
grep -Ev '^$|^#' /usr/local/zabbix/conf/zabbix_agentd.conf
LogFile= /tmp/zabbix_agentd .log
Server=192.168.1.10
ListenPort=10050
Hostname=ip-10-10-240-21
Timeout=20
UserParameter=memcached_stats[*],( echo
stats; sleep
1) | telnet 10.10.240.21 $1 2>&1 | awk
'/STAT $2 / {print $NF}'
UserParameter=mysql[*],mysql
-h 10.10.240.21 -P 3306 -uzabbix -pzabbix -e "show
global status" | grep
"\<$1\>" | cut
-f2
UserParameter=redis_stats[*],( echo
info; sleep
1) | telnet 10.10.240.21 $1 2>&1 | grep
$2| cut
-d : -f2
UserParameter=custom.vfs.dev. read .ops[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$4}'
UserParameter=custom.vfs.dev. read .ms[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$7}'
UserParameter=custom.vfs.dev.write.ops[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$8}'
UserParameter=custom.vfs.dev.write.ms[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$11}'
UserParameter=custom.vfs.dev.io.active[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$12}'
UserParameter=custom.vfs.dev.io.ms[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$13}'
UserParameter=custom.vfs.dev. read .sectors[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$6}'
UserParameter=custom.vfs.dev.write.sectors[*], cat
/proc/diskstats
| grep
$1 | head
-1 | awk
'{print $$10}'
UserParameter=MongoDB.Status[*], /bin/echo
"db.serverStatus().$1"
| /usr/bin/mongo
admin | grep
"$2" | awk
-F: '{print
$$2}' | awk
-F, '{print
$$1}'
UserParameter=check_lvm[*], /usr/bin/sudo
/usr/local/zabbix/bin/check_lvm .sh
$1
UserParameter=TCP_ESTABLISHED,ss
-s| awk
'NR==2{print $4}' | cut
-d , -f1
UserParameter=TCP_CLOSED,ss
-s| awk
'NR==2{print $6}' | cut
-d , -f1
UserParameter=TCP_TIMEWAIT,ss
-s| awk
'NR==2{print $12}' | cut
-d / -f1
UserParameter=zabbix_low_discovery[*], /bin/bash
/usr/local/zabbix/bin/zabbix_low_discovery .sh
$1
UserParameter=mysql_stats[*],mysql
-h 10.10.240.21 -P $1 -uzabbix -pzabbix -e "show
global status" | grep
"\<$2\>" | cut
-f2
UserParameter=mysql_stats_slave[*],mysql
-h 10.10.240.21 -P $1 -uzabbix -pzabbix -e "show
slave status\G" | grep
"\<$2\>" | awk
'{if($NF=="Yes") {print 1} else {print 0}}'
UserParameter=check_platform,dmidecode
| grep
Vendor| awk
-F '
'
'{if($2=="Dell") {print 1} else {print 0}}'
UserParameter=hardware_battery,omreport
chassis batteries| awk
'/^Status/{if($NF=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_cpu_model, awk
- v
hardware_cpu_crontol=` sudo
omreport chassis biossetup| awk
'/C State/{if($NF=="Enabled") {print 0} else {print 1}}' `
- v
hardware_cpu_c1=` sudo
omreport chassis biossetup| awk
'/C1[-|E]/{if($NF=="Enabled") {print 0} else {print 1}}' `
'BEGIN{if(hardware_cpu_crontol==0
&& hardware_cpu_c1==0) {print 0} else {print 1}}'
UserParameter=hardware_fan_health, awk
- v
hardware_fan_number=`omreport chassis fans| grep
-c "^Index" `
- v
hardware_fan=`omreport chassis fans| awk
'/^Status/{if($NF=="Ok") count+=1}END{print count}' `
'BEGIN{if(hardware_fan_number==hardware_fan)
{print 1} else {print 0}}'
UserParameter=hardware_memory_health, awk
- v
hardware_memory=`omreport chassis memory| awk
'/^Health/{print $NF}' `
'BEGIN{if(hardware_memory=="Ok")
{print 1} else {print 0}}'
UserParameter=hardware_nic_health, awk
- v
hardware_nic_number=`omreport chassis nics | grep
-c "Interface
Name" `
- v
hardware_nic=`omreport chassis nics | awk
'/^Connection Status/{print $NF}' | wc
-l` 'BEGIN{if(hardware_nic_number==hardware_nic)
{print 1} else {print 0}}'
UserParameter=hardware_cpu,omreport
chassis processors| awk
'/^Health/{if($NF=="Ok") {print 1} else {print 0}}'
UserParameter=hardware_power_health, awk
- v
hardware_power_number=`omreport chassis pwrsupplies| grep
-c "Index" `
- v
hardware_power=`omreport chassis pwrsupplies| awk
'/^Status/{if($NF=="Ok") count+=1}END{print count}' `
'BEGIN{if(hardware_power_number==hardware_power)
{print 1} else {print 0}}'
UserParameter=hardware_temp,omreport
chassis temps| awk
'/^Status/{if($NF=="Ok") {print 1} else {print 0}}' | head
-n 1
UserParameter=hardware_physics_health, awk
- v
hardware_physics_disk_number=`omreport storage pdisk controller=0| grep
-c "^ID" `
- v
hardware_physics_disk=`omreport storage pdisk controller=0| awk
'/^State/{if($NF=="Online") count+=1}END{print count}' `
'BEGIN{if(hardware_physics_disk_number==hardware_physics_disk)
{print 1} else {print 0}}'
UserParameter=hardware_virtual_health, awk
- v
hardware_virtual_disk_number=`omreport storage vdisk controller=0| grep
-c "^ID" `
- v
hardware_virtual_disk=`omreport storage vdisk controller=0| awk
'/^State/{if($NF=="Ready") count+=1}END{print count}' `
'BEGIN{if(hardware_virtual_disk_number==hardware_virtual_disk)
{print 1} else {print 0}}'
UserParameter=pyora[*], /usr/local/zabbix/bin/pyora .py
--username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8
[root@ip-10-10-240-21
tmp] #
ll /tmp/
total
12
-rw-------
1 root root 197 Jul 9 09:35 yum_save_tx-2014-07-09-09-35ibcBiO.yumtx
-rw-rw-r--
1 zabbix zabbix 320 Jul 10 07:22 zabbix_agentd.log
-rw-rw-r--
1 zabbix zabbix 5 Jul 10 07:22 zabbix_agentd.pid
[root@ip-10-10-240-21
tmp] #
chkconfig --list|grep zabbix_agentd
zabbix_agentd
0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@ip-10-10-240-21
tmp] #
grep zabbix /etc/sudoers
zabbix
ALL=(root) NOPASSWD: /bin/netstat ,
/usr/bin/omreport
[root@ip-10-10-240-21
tmp] #
ll /etc/init.d/zabbix_agentd
-rwxr-xr-x
1 root root 1444 Jul 10 07:22 /etc/init .d /zabbix_agentd
|
可以看到安装后的客户端,完全是按照我的要求来做的。
12、删除已经安装的客户端
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
15:22:54
#
time ansible-playbook zabbix_client_delete.yml --extra-vars "host=192.168.240.17 user=root" --private-key=/root/test.pem
PLAY
[192.168.240.17] *********************************************************
GATHERING
FACTS ***************************************************************
ok:
[192.168.240.17]
TASK:
[zabbix_client_delete | Stop Zabbix Service In RedHat Client] ***********
changed:
[192.168.240.17]
TASK:
[zabbix_client_delete | Delete Boot Start Zabbix Service In Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_delete | Delete Zabbix User In Redhat Client] ************
changed:
[192.168.240.17]
TASK:
[zabbix_client_delete | Delete Zabbix Dir In Redhat Client] *************
changed:
[192.168.240.17]
TASK:
[zabbix_client_delete | Delete Zabbix Start Script In Redhat Client] ****
changed:
[192.168.240.17]
TASK:
[zabbix_client_delete | Check Zabbix User Sudo Permission In Redhat Client] ***
changed:
[192.168.240.17]
TASK:
[zabbix_client_delete | Delete Sudo Permission To Zabbix User In Redhat Client] ***
changed:
[192.168.240.17]
PLAY
RECAP ********************************************************************
192.168.240.17
: ok=8 changed=7 unreachable=0 failed=0
real
0m25.497s
user
0m0.847s
sys
0m0.159s
|
13、测试删除情况
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@ip-10-10-240-21
tmp] #
ll /tmp/
total
4
-rw-------
1 root root 197 Jul 9 09:35 yum_save_tx-2014-07-09-09-35ibcBiO.yumtx
[root@ip-10-10-240-21
tmp] #
ps -ef|grep zabbix
root
27665 13773 0 07:27 pts /0
00:00:00 grep
zabbix
[root@ip-10-10-240-21
tmp] #
ll /usr/local/
total
40
drwxr-xr-x.
2 root root 4096 Sep 23 2011 bin
drwxr-xr-x.
2 root root 4096 Sep 23 2011 etc
drwxr-xr-x.
2 root root 4096 Sep 23 2011 games
drwxr-xr-x.
2 root root 4096 Sep 23 2011 include
drwxr-xr-x.
2 root root 4096 Sep 23 2011 lib
drwxr-xr-x.
2 root root 4096 Sep 23 2011 lib64
drwxr-xr-x.
2 root root 4096 Sep 23 2011 libexec
drwxr-xr-x.
2 root root 4096 Sep 23 2011 sbin
drwxr-xr-x.
5 root root 4096 May 12 2013 share
drwxr-xr-x.
3 root root 4096 May 13 2013 src
[root@ip-10-10-240-21
tmp] #
grep zabbix /etc/sudoers
[root@ip-10-10-240-21
tmp] #
ll /etc/init.d/zabbix_agentd
ls :
cannot access /etc/init .d /zabbix_agentd :
No such file
or directory
[root@ip-10-10-240-21
tmp] #
chkconfig --list|grep zabbix_agentd
[root@ip-10-10-240-21
tmp] #
|
可以看到已经完全删除。
如果大家想使用我的例子,可以从附件里下载,然后放到/etc/ansible目录里,下面是压缩包里的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
-rw-r--r--
root /root
108 2014-07-10 15:20 zabbix_client_install.yml
-rw-r--r--
root /root
121 2014-07-09 18:09 zabbix_client_delete.yml
drwxr-xr-x
root /root
0 2014-07-01 16:38 roles /zabbix_client_install/
drwxr-xr-x
root /root
0 2014-07-08 14:30 roles /zabbix_client_install/meta/
-rw-r--r--
root /root
207 2014-07-08 14:30 roles /zabbix_client_install/meta/main .yml
drwxr-xr-x
root /root
0 2014-07-10 14:07 roles /zabbix_client_install/tasks/
-rw-r--r--
root /root
199 2014-07-10 14:02 roles /zabbix_client_install/tasks/delete .yml
-rw-r--r--
root /root
65 2014-07-10 14:02 roles /zabbix_client_install/tasks/main .yml
-rw-r--r--
root /root
1789 2014-07-10 14:02 roles /zabbix_client_install/tasks/copy .yml
-rw-r--r--
root /root
1110 2014-07-10 14:07 roles /zabbix_client_install/tasks/install .yml
drwxr-xr-x
root /root
0 2014-06-19 13:30 roles /zabbix_client_install/handlers/
drwxr-xr-x
root /root
0 2014-07-09 17:54 roles /zabbix_client_install/vars/
-rw-r--r--
root /root
115 2014-07-09 17:54 roles /zabbix_client_install/vars/main .yml
drwxr-xr-x
root /root
0 2014-07-09 17:53 roles /zabbix_client_install/templates/
-rw-r--r--
zabbix /zabbix
10465 2014-07-09 17:53 roles /zabbix_client_install/templates/zabbix_agentd .conf
-rwxr-xr-x
root /root
1456 2014-07-08 15:20 roles /zabbix_client_install/templates/zabbix_agentd
drwxr-xr-x
root /root
0 2014-07-09 17:13 roles /zabbix_client_install/files/
-rw-r--r--
root /root
292293 2014-07-09 17:13 roles /zabbix_client_install/files/zabbix-2 .0.6. tar .gz
drwxr-xr-x
root /root
0 2014-06-23 14:03 roles /zabbix_client_delete/
drwxr-xr-x
root /root
0 2014-07-09 18:08 roles /zabbix_client_delete/meta/
-rw-r--r--
root /root
205 2014-07-09 18:08 roles /zabbix_client_delete/meta/main .yml
drwxr-xr-x
root /root
0 2014-07-10 14:28 roles /zabbix_client_delete/tasks/
-rw-r--r--
root /root
1518 2014-07-10 14:08 roles /zabbix_client_delete/tasks/delete .yml
-rw-r--r--
root /root
22 2014-07-10 14:08 roles /zabbix_client_delete/tasks/main .yml
drwxr-xr-x
root /root
0 2014-06-24 14:14 roles /zabbix_client_delete/handlers/
drwxr-xr-x
root /root
0 2014-07-03 13:16 roles /zabbix_client_delete/vars/
-rw-r--r--
root /root
115 2014-07-09 17:55 roles /zabbix_client_delete/vars/main .yml
drwxr-xr-x
root /root
0 2014-07-09 18:08 roles /zabbix_client_delete/templates/
drwxr-xr-x
root /root
0 2014-06-24 13:53 roles /zabbix_client_delete/files/
|
后续我会继续介绍使用playbook安装其他软件的例子。
评论暂时关闭