zabbix实战:部署-->监控-->报警-创新互联

 运维中有一句重要的话:不允许未监控的服务上线。

清河网站建设公司创新互联,清河网站设计制作,有大型网站制作公司丰富经验。已为清河成百上千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的清河做网站的公司定做!

 zabbix是一个基于web界面提供分布式系统监控以及网络监控的第三方开源软件,它主要由两部分组成:zabbix-server、zabbix-agent。

 zabbix具有多样的特性:

   1、支持网络自动发现机制。

   2、支持自定义检测机制UserParamenter

   3、支持实时绘图,把数据以图形的方式显示出来。

   4、支持报警功能,能够通过邮件、短信方式告警。

   5、支持使用模板,当有多个agent主机时,具有很大的帮助。

 本文实现的过程:

   1、通过shell推送ansible,实现agent批量部署

   2、实现zabbix-server自动发现功能,批量添加被监控端

   3、调用模板并在模板中添加自动发现规则,监听tcp所有端口

   4、基于postfix实现邮件报警

   5、基于中国网建的API实现短信报警

准备环境

              主机名
                 Ip
              部署服务
              node1
            192.168.1.22
  zabbix-server、zabbix-agent、ansible
              node2
           192.168.1.23
             zabbix-agent
              node3
            192.168.1.24
             zabbix-agent

  

实现前提:LAMP环境

一、zabbix系统全程部署

1、yum安装zabbix服务(node1)

###zabbix的yum源:   [root@node1 ~]# yum install zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-agent

2、让mysql对其授权用户,并导入zabbix的三个sql文件

[root@node1 ~]# mysql -e "create database zabbix charset='utf8'" [root@node1 ~]# mysql -e "grant all on *.* to 'zabbix'@'localhost' identified by 'zabbix'" [root@node1 ~]# mysql -e "grant all on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'" [root@node1 ~]# mysql -uzabbix -h227.0.0.1 -p zabbix < /usr/share/doc/zabbix-server-mysql-2.4.8/create/schema.sql   [root@node1 ~]# mysql -uzabbix -h227.0.0.1 -p zabbix < /usr/share/doc/zabbix-server-mysql-2.4.8/create/p_w_picpaths.sql  [root@node1 ~]# mysql -uzabbix -h227.0.0.1 -p zabbix < /usr/share/doc/zabbix-server-mysql-2.4.8/create/data.sql  ###导入完成后可查看mysql中的数据库zabbix是否生成相关的表

3、修改zabbix-server配置文件,启动并安装

[root@node1 zabbix]# pwd /etc/zabbix [root@node1 zabbix]# vim zabbix_server.conf  DBhost=localhost   ###指明数据库地址 DBname:zabbix   ###数据库名称 DBUser:zabbix   ###数据库用户 DBpassword:zabbix   ###数据库用户密码 DBSocket=/var/lib/mysql/mysql.sock   ###指明mysql数据库的套接字文件,如果zabbix和mysql在不同主机上可不用修改 [root@node1 zabbix]# service zabbix-server start [root@node1 zabbix]# netstat -an | grep 10051 tcp        0      0 :::10051                    :::*                        LISTEN  [root@node1 ~]# service httpd start   ##启动httpd服务  ##访问zabbix页面进行安装:http://$IP/zabbix 注意:安装时报的错"timezone"这个参数可在"/etc/php.ini"或者是"/etc/httpd/conf.d/zabbix.conf"文件中修改

zabbix实战:部署-->监控-->报警

4、修改zabbix-agent的配置文件并启动,让Server端监控自己

[root@node1 zabbix]# pwd /etc/zabbix [root@node1 zabbix]# vim zabbix_agentd.conf  Server=10.10.73.148   ##Agent端允许那个服务器过来拉取数据 ServerActive=10.10.73.148   ##开启Agent端的主动模式,主动向服务端传输数据 [root@node1 zabbix]# service zabbix-agent start tcp        0      0 :::10050                    :::*                        LISTEN

5、通过脚本实现agent端批量部署

#!/bin/bash #Author:wtc ##############[ Ansible Install ]############### if ! 'rpm -q ansible' &> /dev/null;then    ##安装ansible服务     yum install ansible -y &> /dev/null     [[ $? -eq 0 ]] && echo "Install Ansible Success" || echo "Install Ansible Failed"  fi ##############[ Add Roles ] ################# cat > /etc/ansible/hosts    ##在ansible的hosts中添加agent主机ip [zabbix] 192.168.1.23 192.168.1.24 END ##############[ Scp Zabbix.repo to Agent]########### ansible zabbix -m copy -a " src=/etc/yum.repos.d/zabbix.repo dest=/etc/yum.repos.d/"    ##将zabbix的yum仓库发送至agent端 ansible zabbix -m shell -a "yum clean all" ansible zabbix -m shell -a "yum repolist " #############[ Mkdir Zabbix Directorys ] Dir=/etc/ansible/roles/zabbix [[ -d $Dir ]] || mkdir -pv $Dir/{files,templetes,tasks,handles,vars,meta,default}         ##创建zabbix角色相应的目录 cp /etc/zabbix/zabbix_agentd.conf /etc/ansible/roles/zabbix/templetes/zabbix_agentd.conf.j2 #############[ Zabbix taska/main.yml ] ######## cat  /etc/ansible/roles/zabbix/tasks/main.yml        ##编写yml文件 - name: install zabbix   yum: name=zabbix-agent state=present - name: conf file   template: src=/etc/ansible/roles/zabbix/templetes/zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf - name:   service: name=zabbix-agent state=started enabled=true END #############[ yaml file ]################ cat  /root/zabbix.yaml - hosts: all   remote_user: root   roles:   - zabbix END ansible-playbook --check /root/zabbix.yaml ansible-playbook /root/zabbix.yaml

6、在zabbix的web界面定义自动发现规则,自动添加被监控端

(a)Configuration--->Discovery--->Create discovery rule

zabbix实战:部署-->监控-->报警

(b)定义完成保存之后,等待几秒,查看服务端是否自动添加;Monitoring--->Discovery

zabbix实战:部署-->监控-->报警

###以上过程就是部署整个zabbix系统,但是部署完成后还需要添加监控项!

二、对监控端定义监控项

1、调用"Template OS Linux"模板

(a)Configuration--->Avtions--->Discovery--->Create action,定义Action以及conditions

zabbix实战:部署-->监控-->报警

(c)定义操作Operations

zabbix实战:部署-->监控-->报警

(e)以上操作完成之后,可查看agent端是否调用模板

zabbix实战:部署-->监控-->报警

2、在"Template OS Linux"中没有监听tcp端口这一项,此时我们需要在模板中自定义检测机制"UserParamenter"

(a)编辑zabbix的配置文件,添加"UserParameter",并重启zabbix-agent

[root@node1 zabbix]# pwd /etc/zabbix [root@node1 zabbix]# vim zabbix_agentd.conf    ##添加以下两行 UnsafeUserParameters=1 UserParameter=portlisten,/opt/app/zabbix/sbin/port.sh  ##"portlisten"自定义的key,port.sh脚本是基于json格式筛选出所有的tcp端口 [root@node1 ~]# vim /opt/app/zabbix/sbin/port.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`) length=${#portarray[@]} printf "{\\n" printf  "\\"data\\":[" for ((i=0;i<$length;i++))   do      printf '\\n\\t\\t{'      printf "\\"{#TCP_PORT}\\":\\"${portarray[$i]}\\"}"      if [ $i -lt $[$length-1] ];then                 printf ','      fi   done printf  "\\n\\t]\\n" printf "}\\n" [root@node1 sbin]# pwd /opt/app/zabbix/sbin [root@node1 sbin]# sh port.sh  { "data":[         {"{#TCP_PORT}":"10050"},         {"{#TCP_PORT}":"10051"},         {"{#TCP_PORT}":"22"},         {"{#TCP_PORT}":"25"},         {"{#TCP_PORT}":"3306"},         {"{#TCP_PORT}":"80"}     ] } ###注意:之所以使用"sudo netstat -tnlp"是因为"zabbix-server"服务是zabbix用户在执行 [root@node1 ~]# zabbix_get -s 192.168.1.22 -k portlisten   ##在本机自行获取数据是否成功! { "data":[         {"{#TCP_PORT}":"10050"},         {"{#TCP_PORT}":"10051"},         {"{#TCP_PORT}":"22"},         {"{#TCP_PORT}":"25"},         {"{#TCP_PORT}":"3306"},         {"{#TCP_PORT}":"80"}     ] } ####使用zabbix_get获取远程主机数据遇到的问题 sudo: sorry, you must have a tty to run sudo:编辑"/etc/sudoers",注释"Defaults    requiretty" sudo: no tty present and no askpass program specified:编辑"zabbix-agentd.conf",将"AllowRoot=0"改为"AllowRoot=1" [root@node1 sbin]# chown -R zabbix.zabbix /opt/   ##将port.sh脚本属主、属组改为zabbix [root@node1 sbin]# chmod -R +x /opt/   ##给脚本增加执行权限 [root@node1 zabbix]# service zabbix-agent stop   Shutting down Zabbix agent:                                [  OK  ] [root@node1 zabbix]# service zabbix-agent start  ##重启node1的zabbix-agent Starting Zabbix agent:                                     [  OK  ] [root@node1 zabbix]# ansible zabbix -m shell -a "echo 'UnsafeUserParameters=1' &>> /etc/zabbix/zabbixagentd.conf"   ##使用ansible远程追加 [root@node1 zabbix]# ansible zabbix -m shell -a "echo 'UserParameter=portlisten,/opt/app/zabbix/sbin/port.sh' &>> /etc/zabbix/zabbixagentd.conf" [root@node1 zabbix]# ansible zabbix -m shell -a "mkdir -p /opt/app/zabbix/sbin"    [root@node1 sbin]# ansible zabbix -m copy -a " src=/opt/app/zabbix/sbin/port.sh dest=/opt/app/zabbix/sbin" [root@node1 sbin]# ansible zabbix -m shell -a "chown -R zabbix.zabbix /opt" [root@node1 sbin]# ansible zabbix -m shell -a "chmod -R +x /opt" [root@node1 ~]# ansible zabbix -m shell -a "sed -i '/AllowRoot=0/c \\AllowRoot=1' /etc/zabbix/zabbix_agentd.conf"   ####ansible调用"zabbix"这个组在第一个脚本已定义! [root@node1 ~]# ansible zabbix -m shell -a "service zabbix-agent stop" [root@node1 ~]# ansible zabbix -m shell -a "service zabbix-agent start"   ##重启agent端服务

(b)在"Template OS Linux"中添加自动发现规则

Configuration-->Templates-->Template OS Linux-->DIscovery-->Create discovery rule

zabbix实战:部署-->监控-->报警

(c)分别定义上图中的1、2、3

Item_prototypes--->Create item protopyte

zabbix实战:部署-->监控-->报警

Trigger_prototypes--->Create trigger prototype

zabbix实战:部署-->监控-->报警

Graph prototypes--->Create graph prototype

zabbix实战:部署-->监控-->报警

(d)查看tcp端口是否添加

Configuration--->Hosts--->Items

zabbix实战:部署-->监控-->报警

三、实现触发邮件报警

1、部署postfix服务,并发送测试短信

[root@node1 ~]# yum install postfix -y    ##在node1上安装邮件服务器postfix [root@node1 ~]# vim /etc/postfix/main.cf  ##编辑配置文件,添加以下几行 myhostname = mail.umpay.com myorigin = umpay.com mydomain = umpay.com mydestination = localhost mynetworks = 127.0.0.0/8 [root@node1 ~]# echo "127.0.0.1 mail.umpay.com umpay.com" &>> /etc/hosts [root@node1 ~]# service postfix start [root@node1 ~]# echo "Hello, New World" | mail -s "wtc" 1362365xxxx@163.com  ##发送测试短信 [root@node1 ~]# tialf /var/log/maillog

zabbix实战:部署-->监控-->报警

2、定义zabbix服务端媒介

Administration->->Media types-->Create media type

zabbix实战:部署-->监控-->报警

3、随后定义Actions、Conditions、Operations

Configuration--->Actions--->Tirggers--->Create action

zabbix实战:部署-->监控-->报警

zabbix实战:部署-->监控-->报警

zabbix实战:部署-->监控-->报警

4、定义邮件收件人

Administration--->Users--->Zabbix administrators--->Users--->Admin--->Media

zabbix实战:部署-->监控-->报警

###以上操作完成后,邮箱报警完成

5、安装nginx,监听tcp808端口,测试邮箱报警

[root@node1 nginx]# nginx [root@node1 nginx]# netstat -tnlp | grep nginx tcp        0      0 0.0.0.0:808                 0.0.0.0:*                   LISTEN      16984/nginx ###出现新的tcp监听端口,zabbix会自动添加至items,这里就不截图了 [root@node1 nginx]# nginx -s stop

zabbix实战:部署-->监控-->报警

四、实现短信报警

1、在zabbix默认调用脚本路径下放置脚本

[root@node1 ~]# cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath AlertScriptsPath=/usr/lib/zabbix/alertscripts [root@node1 ~]# vim /usr/lib/zabbix/alertscripts/sms.sh #!/bin/bash MOBILE_NUMBER=$1    # 手机号码 MESSAGE_UTF8=$3        # 短信内容 XXD="/usr/bin/xxd" CURL="/usr/bin/curl" TIMEOUT=5 MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/\(..\)/%\1/g' | tr -d '\n') #Uid="ch丶疯子" Uid="联动优势" #Key="8c1604e2eb0d66dxxxxx" Key="cfcc13b087aaee114c8e" URL="http://utf8.sms.webchinese.cn/?Uid=${Uid}&Key=${Key}&smsMob=${MOBILE_NUMBER}&smsText=${MESSAGE_ENCODE}" set -x ${CURL} -s --connect-timeout ${TIMEOUT} "${URL}" [root@node1 ~]# chmod -R +x /usr/lib/zabbix/alertscripts/sms.sh  [root@node1 ~]# chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/sms.sh

2、配置短信告警媒介

Administration--->Media types--->Create media types

zabbix实战:部署-->监控-->报警

3、配置短信Actions

Configuration--->Actions--->Tirggers--->Create action

(a)配置短信内容

zabbix实战:部署-->监控-->报警

(b)配置告警条件

zabbix实战:部署-->监控-->报警

(c)定义告警接收人

zabbix实战:部署-->监控-->报警

4、配置短信接收人

Administration--->Users--->Zabbix administrators--->Users--->Admin--->Media

zabbix实战:部署-->监控-->报警

5、测试nginx短信tcp端口报警

[root@node1 alertscripts]# nginx -s stop

zabbix实战:部署-->监控-->报警

问题总结:

1、在host中主机的Discover如果出现"value should not json project",解决办法如下

[root@node1 ~]# ansible zabbix -m shell -a "sed -i '/Defaults    requiretty/c \\#Defaults    requiretty' /etc/sudoers"  [root@node1 ~]# ansible zabbix -m shell -a "echo 'zabbix   ALL=(ALL)   ALL' &>> /etc/sudoers" [root@node1 ~]# ansible zabbix -m shell -a "sed -i '/AllowRoot=0/c \\AllowRoot=1' /etc/zabbix/zabbix_agentd.conf"

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:zabbix实战:部署--&gt;监控--&gt;报警-创新互联
标题URL:http://myzitong.com/article/dsegec.html