Zaibbix客戶端安裝的確很方便步驟也不多,可是在線上一臺一臺配置仍是不現實的,咱們是有ansible配置客戶端和推送自定義key給客戶端,在zabbix網頁上就是要自動發現或者自動註冊,達到一旦發現有主機上線就把主機添加進來的效果。python
[root@cml1 ansible]# cat /etc/hostsweb
192.168.5.101 cml1 mfsmastershell
192.168.5.102 cml2 apache
192.168.5.104 cml3 vim
192.168.5.105 cml4 bash
[root@cml1 ansible]# ssh-keygen [root@cml1 ansible]# ssh-copy-id cml2 [root@cml1 ansible]# ssh-copy-id cml3 [root@cml1 ansible]# ssh-copy-id cml4
##定義一個主機組:服務器
[root@cml1 ansible]# vim hosts [zabbixagent] 192.168.5.102 192.168.5.104 192.168.5.105
##建立自定義的key:ssh
[root@cml1 ansible]# cat/usr/local/zabbix/etc/zabbix_agentd.conf.d/tcp_status.conf UserParameter=netstat[*], netstat -an | awk'/^tcp/{s[$NF]++}END{for (i in s) print i,s[i]}' | grep $1 | awk '{print $$2}' [root@cml1 ansible]# cat/usr/local/zabbix/etc/zabbix_agentd.conf.d/web.conf UserParameter=web,ps -ef | pgrep httpd | wc-l
##寫一個jinjia的ansible-playbook:curl
[root@cml1 ansible]# cat jinjia_zabbx.yaml - hosts: zabbixagent tasks: -name: install zabbix package yum: name={{ item }} state=latest with_items: -make -gcc -curl-devel -curl -name: copy pack to client tags: copy_pack copy: src=/usr/local/src/zabbix-3.4.3.tar.gzdest=/usr/local/src/zabbix-3.4.3.tar.gz -name: tar zabbix tags: tar shell: cd /usr/local/src/;tar -xf zabbix-3.4.3.tar.gz -name: copy create_users.sh tags: copy_users copy: src=/etc/ansible/create_users.shdest=/usr/local/src/create_users.sh -name: create users_zabbix tags: users shell: /bin/bash /usr/local/src/create_users.sh -name: configure zabbix tags: config shell: cd /usr/local/src/zabbix-3.4.3;./configure --with-net-snmp--with-libcurl --enable-agent --prefix=/usr/local/zabbix -name: make make install tags: make shell: cd /usr/local/src/zabbix-3.4.3;make && make install -name: change agented tags: change shell: cp/usr/local/src/zabbix-3.4.3/misc/init.d/fedora/core5/zabbix_agentd/etc/init.d/;chmod 700 /etc/init.d/zabbix_agentd -name: copy zabbix_agented tags: copy_agented copy: src=/etc/init.d/zabbix_agentd dest=/etc/init.d/zabbix_agentd -name: copy zabbix_agented,conf tags: copy_conf copy: src=/usr/local/zabbix/etc/zabbix_agentd.confdest=/usr/local/zabbix/etc/zabbix_agentd.conf -name: start zabbix_agented tags: start zabbix_agented shell:/etc/init.d/zabbix_agentd start -name: copy tcp_status tags: cml copy: src=/usr/local/zabbix/etc/zabbix_agentd.conf.d/{{ zabbix_moban}}.conf dest=/usr/local/zabbix/etc/zabbix_agentd.conf.d/{{ zabbix_moban }}.conf -name: copy web_status tags: web_sh copy: src=/tmp/web_start.sh dest=/tmp/web_start.sh handlers: -name: restart zabbix_agent tags: restart shell:/etc/init.d/zabbix_agentd restart
##執行安裝zabbix_agentd:tcp
[root@cml1 ansible]# ansible-playbook -ezabbix_moban=web jinjia_zabbx.yaml [root@cml1 ansible]# ansible-playbook -tcml -e zabbix_moban=tcp_status jinjia_zabbx.yaml
##先在zabbix_server.conf配置文件中去掉註釋
[root@cml1 ~]# vim/usr/local/zabbix/etc/zabbix_server.conf AlertScriptsPath=/usr/local/zabbix/alertscripts
##而後寫入一個python的發送郵件文件
[root@cml1 ~]# cd/usr/local/zabbix/alertscripts/ [root@cml1 alertscripts]# ls zabbix_mail.py [root@cml1 alertscripts]# catzabbix_mail.py #!/usr/bin/python #coding: utf-8 import smtplib import sys from email.mime.text import MIMEText _user = "40***27@qq.com" _pwd = "受權碼" #_to = "139****782@163.com" def send_mail(to,subject,contain): msg = MIMEText(contain) msg["Subject"] = subject msg["From"] = _user msg["To"] = to try: s =smtplib.SMTP_SSL("smtp.qq.com", 465) s.login(_user, _pwd) s.sendmail(_user, to, msg.as_string()) s.quit() with open('/tmp/zabbix.log', 'w') as f: f.write("%s\n%s\n%s\n"%(to,subject,contain)) # print "Success!" except smtplib.SMTPException,e: print "Falied,%s"%e if __name__ == "__main__": send_mail(sys.argv[1],sys.argv[2], sys.argv[3])
##也但是使用shell腳本:
[root@cml1 alertscripts]# cat zabbix_mail.sh #!/bin/bash to=$1subject=$2body=$3 cat <<EOF | mail -s "$subject" "$to"$bodyEOF
##在qq郵箱裏面生成一個受權碼做爲給腳本受權幫你發郵件使用
##在zabbix配置 管理-->報警媒介類型-->建立報警媒介類型(類型須要選擇腳本,腳本名稱與編寫的腳本名字同樣,下面三個參數表明發送給那個郵件、標題是什麼、內容是什麼。)
##在用戶配置報警媒介 須要填寫收件人的郵箱和類型
##而後配置-->動做-->建立動做--操做-->恢復操做
##重啓服務端和客戶端:
[root@cml1 ~]# /etc/init.d/zabbix_serverrestart Restarting zabbix_server (viasystemctl): [ OK ] [root@cml1 ~]# /etc/init.d/zabbix_agentdrestart Restarting zabbix_agentd (viasystemctl): [ OK ]
##在以上步驟已經安裝好了zabbix的客戶端和模板了,zabbix的自動發現能夠直接把發現的主機添加
##在配置à自動發現à建立發現規則:
(選擇本身服務器的一個網段,設定多久發現一次,檢查能夠基於ping值也能夠基於uptime(我的喜歡但必定要選擇通用的),必定要選擇zabbix客戶端,不要勾選IP地址,我就在這地方出現過錯誤)
##接下來建立動做 配置à動做à勾選自動選擇à建立動做
##須要建立三個觸發條件第一條是基於以前建立的自動發現規則、第二條是基於10050端口、第三條是基於zabbix客戶端
##接下來是操做配置我這裏就只作了添加主機和爲主機加入模板的操做
##測試發現主機已經添加了模板和監控項
##先在各個客戶端配置文件上修改兩個參數(可使用ansible來推送定義的配置文件)
[root@cml2 ~]# vim/usr/local/zabbix/etc/zabbix_agentd.conf ServerActive=192.168.5.101 ##改爲指向服務器地址。 Hostname=cml2 ##改爲本身的主機名 [root@cml3 ~]# vim/usr/local/zabbix/etc/zabbix_agentd.conf ServerActive=192.168.5.101 Hostname=cml3 [root@cml4 ~]# vim/usr/local/zabbix/etc/zabbix_agentd.conf ServerActive=192.168.5.101 。 Hostname=cml4
##重啓zabbix客戶端:
[root@cml2 ~]# /etc/init.d/zabbix_agentd restart
##在zabbix網頁上配置自動註冊:配置à動做à勾選自動註冊à建立動做
##在配置操做時我只加了三個操做:一、添加主機,二、把主機添加到主機組,三、把模板關聯到主機上。
##本身定義一個監控web服務的key
[root@cml2 ~]# cat/usr/local/zabbix/etc/zabbix_agentd.conf.d/web.conf UserParameter=web_check,ps -ef | pgrephttpd | wc -l
##修改客戶端配置文件開啓容許遠程命令
[root@cml2 ~]# vim/usr/local/zabbix/etc/zabbix_agentd.conf EnableRemoteCommands=1 ##容許遠程命令 LogRemoteCommands=1 ##遠程命令日誌(能夠不須要這步驟)
##重啓客戶端:
[root@cml2 ~]#/etc/init.d/zabbix_agentd restart Restarting zabbix_agentd (viasystemctl): [ OK ]
##在cml2主機上先添加監控項和觸發器配置à主機à建立監控項
##表達式表示最新的值等於0就觸發警告
##而後添加動做:
##在客戶端設置zabbix用戶的權限和建立腳本:
[root@cml2 tmp]# vim /etc/passwd zabbix:x:1002:1002::/home/zabbix:/bin/bash [root@cml2 tmp]# visudo zabbix ALL=(root) NOPASSWD: /usr/bin/bash [root@cml2 tmp]# cat /tmp/start.sh #!/bin/bash echo "123" > /tmp/b.txt ##寫一個日誌測試腳本是否執行成功 systemctl start httpd
##測試關閉httpd服務,zabbix是否把服務識別從新啓動
[root@cml2 tmp]# systemctl stop httpd
##在zabbix的動做日誌上看見已經執行成功了
##在客戶端看狀態和日誌檢測是否成功:
[root@cml2 tmp]# systemctl status httpd
● httpd.service- The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendorpreset: disabled)
Active: active (running) since Wed2017-11-01 21:44:45 CST; 1min 48s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 18300 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
MainPID: 32455 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Currenttraffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─32455 /usr/sbin/httpd -DFOREGROUND
├─32457 (wsgi:cobbler_w -DFOREGROUND
├─32458 /usr/sbin/httpd -DFOREGROUND
├─32459 /usr/sbin/httpd -DFOREGROUND
├─32460 /usr/sbin/httpd -DFOREGROUND
├─32461 /usr/sbin/httpd -DFOREGROUND
└─32462 /usr/sbin/httpd -DFOREGROUND
Nov 01 21:44:45 cml2 systemd[1]: StartingThe Apache HTTP Server...
Nov 01 21:44:45 cml2 httpd[32455]: AH00558:httpd: Could not reliably determine the...age
Nov 01 21:44:45 cml2 systemd[1]: StartedThe Apache HTTP Server.
Hint: Some lines were ellipsized, use -l toshow in full.
[root@cml2 ~]# cat /tmp/b.txt
123