之前介紹了關于ansible的安裝與使用(包括模塊與playbook使用,地址是http://www.ythuaji.com.cn/article/99548.html),今天介紹一下如何使用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 statusG" | 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 statusG" | 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安裝其他軟件的例子。