zabbix基于ansible推送自定义key--zabbix自动发现--zabbix自动注册--zabbix自动拉取

 

介绍:

Zaibbix客户端安装的确很方便步骤也很少,但是在线上一台一台配置还是不现实的,我们是有ansible配置客户端和推送自定义key给客户端,在zabbix网页上就是要自动发现或者自动注册,达到一旦发现有主机上线就把主机添加进来的效果。


步骤:

1、配置ansible安装zabbix客户端和推送自定义key

2、配置zabbix邮件告警

3、zabbix自动发现

4、zabbix自动注册

5、zabbix自动拉取

 

 

 

1、配置ansible安装zabbix客户端和推送自定义key

##设置ansible到各个主机的免密钥通讯:

[root@cml1 ansible]# cat /etc/hosts

192.168.5.101 cml1  mfsmaster

192.168.5.102 cml2 

192.168.5.104 cml3 

192.168.5.105 cml4 

 

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

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

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

[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

2、配置zabbix邮件告警

##先在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邮箱里面生成一个授权码作为给脚本授权帮你发邮件使用

                            0b0a3a722c079522e79de2baf43c2653.png

##在zabbix配置  管理-->报警媒介类型-->创建报警媒介类型(类型需要选择脚本,脚本名称与编写的脚本名字一样,下面三个参数代表发送给那个邮件、标题是什么、内容是什么。)

bf0ab3048937e9e56e96f9fdb623f277.png

##在用户配置报警媒介 需要填写收件人的邮箱和类型

971b2177907f5c2671e7a955d2631152.png

 

 

 

3cc57a0d54dbf3a010f5a235242121ed.png

 

##然后配置-->动作-->创建动作--操作-->恢复操作

302495c0aa2297e30d5d0b2d31af5615.png950a0513cc20d2d300ccb8437e27d1ee.png8a08fee1e267c513d51ef22ca8d9d1dd.png8f2837d11c9413729180a6502679a0cc.pngc15cc9aef63e0b819b7de31f49d24c80.pngd0f1d517a785fe6863c563bed631fab6.png

 

 

 

 

9673344abd083dc19447b6152dfc0bc6.png

##重启服务端和客户端:

[root@cml1 ~]# /etc/init.d/zabbix_serverrestart
Restarting zabbix_server (viasystemctl):                  [ OK  ]
[root@cml1 ~]# /etc/init.d/zabbix_agentdrestart
Restarting zabbix_agentd (viasystemctl):                  [  OK  ]

 

67548484f0661fe346d7f0c206d6f7b0.png

3、zabbix自动发现

##在以上步骤已经安装好了zabbix的客户端和模板了,zabbix的自动发现可以直接把发现的主机添加

 

##在配置à自动发现à创建发现规则:

(选择自己服务器的一个网段,设定多久发现一次,检查可以基于ping值也可以基于uptime(个人喜欢但一定要选择通用的),一定要选择zabbix客户端,不要勾选IP地址,我就在这地方出现过错误)

910ede8e68ad1276de09bde59277164c.pngb62cd76ea877b9bd039a669bd2b7d385.png

##接下来创建动作 配置à动作à勾选自动选择à创建动作

8390805dbc0680d772191346c3516bbb.png

 

##需要创建三个触发条件第一条是基于之前创建的自动发现规则、第二条是基于10050端口、第三条是基于zabbix客户端

479f07706e58607bc2675eabdfec5f1c.png

 

##接下来是操作配置我这里就只做了添加主机和为主机加入模板的操作

026d9457363f1dafa8cfc80471633efc.png

##测试发现主机已经添加了模板和监控项

b263fba93e66a46a5fc1fe8ef217ce18.png

4、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网页上配置自动注册:配置à动作à勾选自动注册à创建动作

3cf4ab5db09cee73bb2777cb279d5506.png

fc4f491a7ecf94f1af291f9018e1598b.png

 

##在配置操作时我只加了三个操作:1、添加主机,2、把主机添加到主机组,3、把模板关联到主机上。

6e70be7d38ccdb9c42835699e8e0a9ba.png

 

5、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主机上先添加监控项和触发器配置à主机à创建监控项

456ddced8e271cf09f9c0cb37fb56bbb.png

b02699e1f04ebbf32198435027396fbc.png

##表达式表示最新的值等于0就触发警告

031785b007ea0609f853fec27edfb830.png

 

##然后添加动作:

b96de731520aa3deeaf305ce4a29cab2.png

9766a85784cccc5f8d1f80f18051414f.png

9d33eddd4d109cf83492ea6ec69d5f74.png

 

##在客户端设置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

 

2ba6856bc8ae87ec851142bbd074dc13.png

##在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