集群运维自动化工具ansible之使用playbook安装zabbix客户端

2020年07月21日 阅读数:110
这篇文章主要向大家介绍集群运维自动化工具ansible之使用playbook安装zabbix客户端,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

以前介绍了关于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的结构mysql

?
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的内容
一、galaxy_info的信息ios

?
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: []

二、task里的copy.xml信息redis

?
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

此文件是复制对应的文件到客户端sql

三、task的install.yml信息shell

?
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

此文件主要是安装centos

四、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

此文件是安装完成后,删除安装前的文件bash

五、tasks的mail.ymlless

?
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

此文件是容许运行哪一个文件dom

六、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

这个文件是启动客户端的脚本

七、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.