zoukankan      html  css  js  c++  java
  • Zibbix监控

    1.zabbix监控介绍

      1.1 Zabbix组件

      1.2 Zabbix架构

    2.Zabbix监控安装和部署

      2.1 用yum安装Zabbix

      2.2 配置Nginx

      2.3 配置MySQL

      2.4 配置Web界面

      2.5 Zabbix客户端部署

    3.Zabbix配置和使用

      3.1 忘记Admin密码

      3.2 添加主机

      3.3 添加模板

        创建模板

        触发器

        图形

        自动发现(未完成)

      3.4 主机链接模板

      3.5图形中的中文乱码

      3.6 添加自定义监控项目

      3.7 配置告警

    配置监控服务器

    监控的重要性不言而喻,一个企业就算架构子再不成熟,监控都必须要有。监控不管用什么方式实现,开源软件也好,商业的监控服务也好,抑或简陋的shell脚本,在业务上线时都首先要做到位。在腾讯,监控平台非常健全,有一个团队专门维护监控中心,可见它的重要性。当然,并不是所有企业都像腾讯这么专业,还好有诸多开源免费的监控软件来供我们使用。当前,流行的开源监控软件有Cacti、Nagios和Zaibbix。

    这三款软件都可以监控服务器的基础指标,比如CPU、内存、硬盘、网络等,其中Cacti更擅长监控网络流量,很多IDC机房的网络设备流量用Cacti来监控,因为它成图专业。Cacti、Nagios以及Zaibbix都是C/S架构,需要安装一个服务端,然后还需要在被监控的机器上安装客户端。这三款监控软件都需要LAMP的支持,其中Nagiox不需要数据库,Cacti和Zaibbix都需要MySQL的支持,用来存储数据。

    Nagios最大的特点是监控一目了然,它监控某个指标并不会返回具体的数值,而是只返回一个状态,告诉我们该指标正常或者不正常。所以,Nagios也不需要历史数据,这也是Nagios不需要数据库支持的原因。当它发现某个指标不正常,就直接发出告警邮件或短信。

    Nagios在许多年前很受欢迎,但近些年不如Zaibbix了,Zaibbix可以存储数据,很方便地画图,并且支持查询历史数据。有一个特性,Zaibbix非常方便地自定义监控项目。你可以定制化监控业务的某个指标(比如,每分钟订单数量),这个监控项目不能在Zaibbx的自带模板中找到,所以只能自定义。另外,Zabbix还为我们提供了易用的二次开发接口,方便扩展。

    1.zabbix监控介绍

    Zabbix不仅适合中小型企业,也适合大型企业,它是C/S架构,分为服务端(server)和客户端(client),单个服务端节点可以支持上万台客户端。在硬件和网络足够强悍的情况下,单台服务器理论上可以支持5万个客户端。Zabbix官方网站为http://www.zabbix.com/

    看官方文档http://www.zabbix.com/manuals是学习zabbix最好的路径,这里有各个主流版本的文档(1.4,1.6,1.8,2.0,2.2,2.4,3.0,3.2,3.4)。Zabbix的知识体系非常庞大,要研究透彻需要花费大量的时间和精力,建议一开始只需要搞清楚大概的架构,然后搭建一个测试环境,加一些基础和自定义的监控,配置告警就可以了。就是首先把配置流程搞明白,然后再去深入研究。本节正式采用这样的方式介绍Zabbix的。

    1.1 Zabbix组件

    Zabbix整个架构中有下面几个主要角色。

    1. zabbix-server

      Zabbix-server是整个监控体系中最核心的组件,他负责接收客户端的报告信息,所有配置、统计数据及操作数据都由它组织。

    2. 数据存储

      所有的收集信息存储在这里。

    3. Web界面

      Web界面即GUI,这是Zabbix架构简单易用的原因之一,因为我们可以再Web界面中配置、管理各个客户端。运行Web界面都需要有PHP环境支持。

    4. zabbix-proxy

      Zabbix-proxy为可选组件,用于监控节点非常多的分布式环境中,它可以代理zabbix-server的功能,减轻zabbix-server的压力。

    5. zabbix-agent

      Zabbix-agent为部署在客户端上的组件,用于采集个监控项目的数据,并把采集的数据传输给zabbix-proxy或者zabbix-server。

    1.2 Zabbix架构

    组件之间的关系:

    image-20210104171449524

    2.Zabbix监控安装和部署

    通过图22-1大致了解了Zabbix的架构和工作流程,你可能对Zabbix还是很陌生,下面会搭建一套Zabbix监控系统,让你更加直观地去了解它。实验准备一台虚拟机即可,也就是你可以在一台机器上安装Zabbix的左右组件。为了更加接近生产环境,拿两台机器来做实验,128作为Zabbix服务端,129作为客户端。

    2.1 用yum安装Zabbix

    /etc/zabbix/zabbix_server.conf

    Zabbix官方下载地址为http://www.zabbix.com/download。本实验采用3.2版本。

    首先安装Zabbix的yum扩展源,然后利用yum安装Zabbix即可,在128上执行如下命令:

    # wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
    # rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
    # yum list |grep zabbix
    ...

    # yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

    其中需要安装的包有:

    • Zabbix-agent:客户端程序

    • Zabbix-get:服务端上命令行获取客户端检测项目的工具。

    • Zabbix-server-mysql:zabbix-server MySQL版。

    • Zabbix-web:Web界面。

    • Zabbix-web-mysql:Web界面MySQL相关。

    安装以上包,它会连安装httpd和PHP,也就是说Zabbix需要LAMP支持。如果是线上的机器,并且运行了Nginx,再安装httpd会有冲突,这就需要做一些小改动,让httpd监听8080端口,然后让Nginx去代理httpd。操作在下节。

    2.2 配置Nginx

    默认httpd中Zabbix的配置文件是/etc/httpd/conf.d/zabbix.conf,这个配置文件定义了Zabbix的Web界面程序所在的路径。为了让httpd监听8080端口,还需要修改httpd.conf:

    # vim /etc/httpd/conf/httpd.conf        //搜索Listen,80改为8080
    Listen 8080
    # systemctl start httpd
    # netstat -lnpt |grep httpd
    tcp6 0 0 :::8080 :::* LISTEN 7867/httpd
    # systemctl enable httpd

    然后创建Nginx的虚拟主机配置文件:
    # vim /usr/local/nginx/conf/vhost/zabbix.conf //写入
    server
    {
    listen 80;
    server_name 192.168.188.128; //把zabbix_server的IP作为主机名

    location /
    {
    proxy_pass http://192.168.188.128:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real_IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    # /usr/local/nginx/sbin/nginx -t
    # /usr/local/nginx/sbin/nginx -s reload

    2.3 配置MySQL

    Zabbix需要MySQL的支持,如果你的机器上还未安装MySQL,请到15.1节安装。

    128机器上已安装过,所以省略该步骤,下面是关于MySQL的一些操作:

    # vim /etc/my.cnf       //编辑MySQL配置文件,在[mysqld]模块下面修改或增加如下内容
    character_set_server = utf8
    # /etc/init.d/mysqld restart
    # mysql -uroot -S /tmp/mysql.sock -p123456
    mysql> create database zabbix character set utf8; //创建Zabbix库,字符集为UTF-8
    mysql> grant all on zabbix* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix'
    mysql> quit

    然后导入Zabbix相关的数据:
    # cd /usr/share/doc/zabbix-server-mysql-3.2.4 //Zabbix版本不同,该路径也会不同
    # gzip -d create.sql.gz //解压*.gz
    # mysql -uroot -S /tmp/mysql.sock -p123456 zabbix < create.sql //倒入
    # systemctl enable httpd

    修改zabbix-server的配置文件,并启动zabbix-server服务:
    # vim /etc/zabbix/zabbix_server.conf //修改或增加
    DBHost=127.0.0.1 //在DBName=zabbix上面增加
    DBPassword=aming-zabbix //在DBuser下面增加
    # systemctl start zabbix-server
    # systemctl enable zabbix-server
    # netstat -lnpt |grep zabbix //zabbix-server监听10051端口
    tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 11539/zabbix_server
    tcp6 0 0 :::10051 :::* LISTEN 11539/zabbix_server

    ps:启动zabbix-server出现问题(如启动不了,或者监听不到10051端口)查看日志/var/log/messages,或者查看日志/var/log/zabbix/zabbix_server.log。

    2.4 配置Web界面

    (1)在浏览器输入http://192.168.188.128/zabbix,出现画面,点击右下角Next step,会有一个date.timezone的警告

    解决方法,编辑/usr/local/php/etc/php.ini或者Zabbix的httpd配置文件,如下:

    # vim /etc/httpd/conf.d/zabbix.conf
    php_value date.timezone Asia/Shanghai
    # systemctl restart httpd

    (2)问题解决继续下一步,出现MySQL相关配置页面,根据前面定义的用户名密码填写。

    Database type MySQL

    Database host 127.0.0.1

    Database port 0

    Database name zabbix

    user zabbix

    password aming-zabbix

    (3)继续点击下一步,出现zabbix server details对话框,这一步是让我们填写zabbix server本机的相关信息,目的是要监控它。因为还没有配置并启动zabbix-agent,这步跳过,下一步,出现zabbix的汇总页面。

    (4)最后出现Congratulations!You have successfully installed Zabbix frontend.提示,说明安装完成。

    (5)点击Finish完成安装,出现登录页面,用户Admin,密码zabbix,进入Zabbix管理控制台。

    2.5 Zabbix客户端部署

    /etc/zabbix/zabbix_agentd.conf

    现还需配置客户端程序。在129上执行如下命令:

    # wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
    # rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
    # yum install -y zabbix-agent

    在客户端上同样也需要安装zabbix3.2版本的yum源,然后yum安装zabbix-agent即可。安装完zabbix-agent后,
    还需要修改配置文件:
    # vim /etc/zabbix/zabbix_agentd.conf //修改
    Server=127.0.0.1 Server=192.168.188.128 //定义服务端的IP(被动模式)
    ServerActive=127.0.0.1 ServerActive=192.168.188.128 //定义服务端的IP(主动模式)
    Hostname=Zabbix server Hostname=aming-123 //自定义主机名,一会还需要在Web界面下设置同 //样的主机名

    主动模式和被动模式在前面的运行流程图出现过,主动或者被动是相对于客户端来讲的。

    • 如果是被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端;

    • 如果是主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。

      当客户端数量非常多是,建议主动模式,这样可以降低服务器的压力。

    如何配置主动模式和被动模式(一会介绍),配置文件只需配置这些参数,启动zabbix-agent服务:

    # systemctl start zabbix-agent
    # systemctl enable zabbix-agent
    # netstat -lnp |grep zabbix //zabbix-agent监听10051端口
    tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 8803/zabbix_agentd
    tcp6 0 0 :::10051 :::* LISTEN 8803/zabbix_agentd

    3.Zabbix配置和使用

    现在到Web界面的管理后台去配置Zabbix,目前还是没有任何数据。Zabbix支持中文,方法如下

    依次选择菜单最右侧的 Adminstration——Users——Admin用户——Language——Chinese(zh_CN),点击Update蓝色按钮。刷新一下。

    3.1 忘记Admin密码

    Zabbix管理员用户默认为Admin,密码默认为zabbix,忘记密码,重置密码方法如下:

    # mysql -uroot -p123456 zabbix
    mysql> update zabbix.users set passwd=md5('aminglinux') where alias='Admin';

    3.2 添加主机

    添加主机即把被监控的主机加入监控中心,这样就可以监控它的一些项目了,比如监控CPU、内存、磁盘以及网络等。

    在添加主机之前,需要添加一个主机组,依次点击:配置——主机群组——创建主机群组——设置组名

    aming-test

    Templates

    添加主机,依次点击:配置——主机——创建主机

    主机名称:aming-129

    可见名称:aming-129

    群组:aming-test

    agent代理程序的接口,IP地址:192.168.188.129,端口10050

    添加主机后,主机列表出现刚刚的主机aming-129,状态为“已启用”,字为绿色。当不想监控该主机是,单机绿色的”已启用“,就会停用(红色)。

    主机虽已添加,但还没有任何监控项目,可以对比一下第二行的Zabbix server,它的监控项有64项。

    image-20210104215947794

    这里出现几个概念:应用集、监控项、触发器、图形、自动发现、Web监测,其中

    监控项就是要监控的项目,比如内存使用、CPU使用等。

    应用集就是多个监控项的组合,比如CPU相关的应用集、内存相关的应用集,应用集里面有具体的监控项。

    触发器是针对监控项做的告警规则,比如磁盘使用量超过80%就触发了告警规则,然后就告警。

    图形。

    自动发现是Zabbix特有的一个机制,它会自动地发现服务器上的监控项目,比如网卡浏览就可以自动发现网卡网卡设备并监控起来。

    Web监测可以去监控指定网站的某个URL访问是否正常,比如状态码是否为200,或者访问时间是否超过某个设定的时间段。

    3.3 添加模板

    依次点击:配置——模板,就可以看到Zabbix自带的模板了,这些模板其实就是多个应用集、监控项、触发器、图形、聚合图形、自动发现、Web监测的组合。

    比如FTP模板,其实就是针对FTP这个服务设置的一个监控模板,里面的应用集、监控项、触发器等全都是针对FTP服务的。这儿又出现一个聚合图形的概念,op它其实就是多个图形的组合。

    你可以先自定一模板,然后在各个模板里面选需要的应用集或者监控项,把它们复制到自定义模板里,这样就算添加了一个模板。此时模板列表最上面出现这个模板。

    创建模板

    创建模板(模板名字:aming,可见名称:aming,群组选Templates)——向左黑色三角块——添加

    接下来,再从其他模板中选几个监控项复制到“aming“模板里。这里选”Template OS Linux“模板,找到该模板点击”监控项“,在Avaliable memory、Checksum of /etc/passwd、CPU user time和Processor load(1 min average per core)左侧的方框里打勾,再点击下面的“复制”按钮,目标类型选择”模板“,它会列出所有的模板来,在aming模板前面大对勾,再点击下面的”复制“按钮。

    依次点击:配置——模板,可以看到aming模板的”监控项“里已经有了4项,点击去看一下,就是刚刚添加的那几项。

    其中Avaliable memory监控的是剩余内存大小,

    Checksum of /etc/passwd监控的事/etc/passwd文件是否被修改,

    CPU user time监控的是CPUuser(用户态)使用率,

    Processor load(1 min average per core)监控的是1分钟每个核CPU的负载是多少。

    触发器

    我们还可以在模板中设置触发器,也就是告警规则。当前已经在aming模板中点击“监控项”右侧的”触发器“,它会提示“未发现数据”,因为还未添加任何告警规则。

    下面添加一个告警规则,假如系统1分钟负载值超过2(每核),就告警。

    首先点击右上角的“创建触发器”按钮,名称填写“{HOST.NAME}1分钟负载(每核)”,其中“{HOST.NAME}”为Zabbix内置变量,他其实就是主机名。严重性根据实际需求选择,从左到右级别越来越高,这里选的是“警告”。表达式就是具体的告警规则,点击“添加”按钮,然后弹出“条件”对话框,监控项需要我们选择针对哪个监控项目告警。点击“选择”按钮,有弹出“监控项”对话框,群组选择Templates,主机选择aming,在列出的监控里面请选择Processor load(1 ming average per core)。

    ”功能“默认为“最新的T值=N”这不是我们想要的;我们想要的是当数值大于2是告警,所以应该选择“最新的T值>N”,这里的“T”可以指定为时间,也可以指定为次数,如果不设置,默认就是时间,排班留空(即为0),N设置为2,因为本意是当负载大于2时告警。

    image-20210105154514334

    点击“插入”后回到触发器界面,其他选项保持默认即可,最后点“添加”按钮。最终第一个触发器添加成功,

    image-20210105154725708

    图形

    在模板里,还可添加“图形”,图形是查看指标历史数据或趋势必不可少的手段。点击“图形”,显示“未发现数据”,因为还未添加,所以点击右上角的“创建图形”。名称填写“1分钟负载”,除了监控项外的其他参数都保持沉默,在监控项右侧这里点击“添加”(注意,不是最下面的“添加”按钮),在弹出的”监控项“对话中选择processor load(1 min average per core),点击“选择”按钮,最后再点击“添加”按钮。

    自动发现(未完成)

    下面再来看下“自动发现”的功能,目前依然在aming模板里,点击自动发现规则,也会提示“未发现数据”。可以从其他模板里拿两个“自动发现规则”过来,依次点击:配置——模板,找到Template OS Linux,点击右侧“自动发现”,显示Mounted filesystem discovery和Noetwork interface discovery两项内容,查看它们的设置,然后参考这些配置项再创建两个一模一样的规则。

    另一种方法:Template OS Linux模板导出(选中模板,然后点击下面的“导出”按钮),然后对导出的模板(下载XML文件)做处理,再次导入(点击右上角的“导入”按钮)为aming for discovery模板,这个模板里面只留下两个“自动发现规则”,其他全部删除。新模板内容如下:

    以上共加了两个自定义模板:aming和aming for discovery。

    3.4 主机链接模板

    监控的主机如果有很多,对每个主机都去配置一遍监控项、触发器、图形等,这样相当于做了多次重复工作,其实模板就是为了解决该问题而出现的。上节添加监控项、触发器、图形以及自动发现、其目的就是为了先学会配置模板,当你添加主机的时候,只要链接一下对应的模板即可完成监控。

    下面使主机aming-129链接刚刚添加的两个模板aming和aming for discovery。

    依次点击:配置——主机——aming-129——模板——链接指示器(点击选择)——选择两个自定义了的模板——选择(弹出框里)——链接指示器(添加)。

    点击“更新”后,回到主机列表页,此时看到主机aming-129对应的监控项、触发器、图形、自动发现、都有数据了:

    image-20210111163225896

    3.5图形中的中文乱码

    zabbix设置为中文,图形里面的中文就会显示小方块,检测中——图形—群组aming-test—主机aming-129—图形选择1分钟负载。看到。

    因为没有中文字体导致。找到一个合适的中文字体并放到Zabbix的对应目录下就可以。先确定字体所在目录。编辑Zabbix Web界面的配置文件:

    # vim /usr/share/zabbix/include/defines.inc.php     //搜索ZBX_FONTPATH

    可以看到它定义的路径是font,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts,而字体文件为ZBX_GRAPH_FONT_NAME所定义的graphfont,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont。然后,从Windows下面去找一个合适的字体,Windows字体路径为C:Wndowsfonts,找到simfang.ttf(仿宋简体),放到桌面,打开PSFTP.EXE,输入open 192.168.188.128,输入用户名和密码:

    • win(PSFTP上):put C:UsersAdministratorDesktopsimfang.ttf

    这样就文件就上传到Linux上

    128上执行

    # mv /root/simfang.ttf /usr/share/zabbix/fonts/
    # cd /usr/share/zabbix/fonts/
    # mv graphfont.ttf graphfont.ttf.bak
    # mv simfang.ttf graphfont.ttf

    再次刷新刚刚的页面,显示正常。

    3.6 添加自定义监控项目

    前面提到过Zabbix的优势,其中之一就是很方便地添加自定义监控项目,它虽然提供了丰富的模板,但依然不能满足各种各样的特殊需求。比如,想监控Nginx的访问日志条数,此类个性化需求在Zabbix的模板中是没有的。

    下面举例,涉及编写shell脚本。需求:监控某台web服务器80端口的并发连接数,并设置图形。

    先分析一下该需求,有两步,第一是要创建自定义监控项,第二是要针对该监控项设置图形。而该监控项不能在Zabbix自带模板中找到,需手动创建,监控项目有一个核心的元素就是数据源,有了数据源就可以创建监控项了,并且也很容易成图形。问题的焦点在于:如何获取服务器80端口的并发连接数。

    # netstat -ant |grep ":80 " |grep -c ESTABLISHED
    • -c 计算符合范本样式的列数。

    80后面有空格,避免8080端口在内。然后就是如何在zabbix-server端获取到zabbix-agent端的该数值。首先在zabbix-agent端(129)上编辑自定义脚本:

    # vim /usr/local/sbin/estab.sh
    #!/bin/bash
    ## 获取80端口并发连接数
    netstat -ant |grep ":80 " |grep -c ESTABLISHED
    # chmod 777 /usr/local/sbin/estab.sh

    此时碎然后了获取并发连接数的脚本,但是服务端并不晓得该脚本在哪里,还需要编辑zabbix-agent的配置文件,定义监控项的key,如下(依然在129上):

    # vim /etc/zabbix/zabbix_agentd.conf    //增加两行
    UnsafeUserParameters=1 //表示使用自定义脚本
    UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh
    // 自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,
    // 如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh

    # systemctl restart zabbix-agent

    先把服务端做一个验证,看到刚刚的配置是否正确,在服务端(128)执行

    # zabbix_get -s 192.168.188.129 -p 10050 -k 'my.estab.count'

    129上没有任何129端口的访问,结果为0。主要这里能正常获取客户端上的数据,就已经成功了大半,然后配置Web界面配置一下。

    配置——主机—aming-129主机—监控项—(名称:80端口并发连接数,键值:my.estab.count,类型保持默认(被动模式,如果选择“Zabbix客户端(主动式)则为主动模式”))—添加。

    目前还不确定是否正确添加监控项,依次点击:监测中——最新数据——主机选择aming-129(名称填:80端口)——应用,则会过滤出刚刚添加的“80端口并发连接数”监控项。

    下面设置图形,有了监控项和数据源。依次点击:配置——主机——点击aming-129的图形——创建图形——(名称写:80端口并发连接数)——监控项(点添加)——监控项对话框(选择“80端口并发连接数”)——选择——添加。完成

    3.7 配置告警

    Zabbix的告警通常为邮件、短信、微信,由于目前只能手机的普及和方便性,配置邮件告警可以达到很好的提醒效果。

    使用QQ邮箱发送告警邮件,这样接收和发送效率会很高。首先开启邮箱的“POP3/SMTP服务”。

    打开https://mail.qq.com/,——登录QQ账号——进入邮箱——设置(最上面)——账户——下拉到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务——前两项服务开启。

    uynwfzspfrmreafj

    eqsr**lnnybzhidihf**

    在开启过程会有一个授权码,先记下来,以会用到。下面再到Zabbix的Web管理后台去配置告警。

    1. 依次点击:管理——报警媒介类型——创建媒体类型——(名称:baojing,类型:脚本,脚本名字:mail.py)——脚本参数(添加:{ALERT. SENDTO};继续添加:{ALERT.SUBJECT};继续添加:{ALERT.MESSAGE}。)——添加

    2. 第一步是定义告警媒介,但还未创建脚本,也为定义脚本的路径信息等。首先通过zabbix_server的配置文件确定告警邮件的脚本应该放到哪里:

      # grep 'AlerScriptsPath=' /etc/zabbix/zabbix_server.conf
      AlertScriptsPath=/usr/lib/zabbix/alertscripts

    编写mail.py:

    # vim /usr/lib/zabbix/alertscripts/mail.py
    #!/usr/bin/env python
    #-*- coding: UTF-8 -*-
    import os,sys
    import getopt
    import smtplib
    from email.MIMEText import MIMEText
    from email.MIMEMultipart import MIMEMultipart
    from subprocess import *

    def sendqqmail(username,password,mailfrom,mailto,subject,content):
       gserver = 'smtp.exmail.qq.com'
       gport = 25
       
       try:
           msg = MIMEText(unicode(content).encode('utf-8'))
           msg['from'] = mailfrom
           msg['to'] = mailto
           msg['Reply-To'] = mailfrom
           msg['Subject'] = subject
           
           smtp = smtplib.SMTP(gserver,gport)
           smtp.set_debuglevel(0)
           smtp.ehlo()
           smtp.login(username,passwork)
           
           smtp.sendmail(mailfrom,mailto,msg.as_string())
           smtp.close()
    except Exception,err:
           print "Send mail failed. Error: %s" % err

    def mail():
       to=sys.argv[1]
       subject=sys.argv[2]
       content=sys.argv[3]
       sendqqmail('xxxx@qq.com','asdfasdfas','xxxxxx@qq.com',to,subject,content)

    if __name__ == "__main__":
       main()
    # chmod 777 /usr/lib/zabbix/alertscripts/mail.py

    其中sendqqmail()里面的邮箱和密码要写你自己的QQ邮箱和授权码,该脚本用Python编写,CentOS 7默认自带Python 2.7,所以系统是适配的。

    1. 接收告警需要有一个邮件账户,而邮件账户需要在Zabbix的用户里设置。依次点击:管理——用户——创建用户——出现创建用户的页面。这三个页面有三个属性需要设置,第一个是“用户”属性,涉及名字、密码、语言等,根据你的需求设置,别名填写amig,用户名第一部分aming,姓氏Li,群组选择了Zabbix Administrator。如果是一个普通用户,则需要先创建一个合适的用户组,针对组去分配权限,然后再把用户加入到那个组里。

      第二部分“报警媒介”才是我们最关心的部分,接受报警的邮箱就是在这里设置的。”添加“——类型选择baojing,收件人填写接收告警邮件的邮箱,建议设置成和发邮件的地址一样,这样它自己给自己发一定不会有问题,其他保持沉默,点”添加“,回到用户界面,再点击”权限“,这部分基本上不用改动什么,最后点最下面的”添加“。

    2. 设置完用户后,就有了接收告警的邮件,还需要一个“动作”来完成发邮件的功能。点击:配置——动作——创建动作。“动作”页面有三个属性页(动作,操作,恢复操作)。

      首先在”动作“页中,名称填写sendmail,这个名称自定义,没有特殊要求,其他保持沉默。

      然后切换到“操作”页面,只需要修改默认信息,方便识别,内容如下:

      HOST:{HOST.NAME} {HOST.IP}
      TIME:{EVENT.DATE} {EVENT.TIME}
      LEVEL:{TRIGGER.SERVERITY}
      NAME:{TRIGGER.NAME}
      messages:{ITEM.NAME}:{ITEM.VALUE}
      ID:{EVENT.ID}
      ID:{EVENT.ID}

      其中{}里面的都是Zabbix的内部变量,最后面多了一行,是为了让报警邮件的内容完整,不加会不完整,这是测试出来是关于3.2版本的小bug,不知道官方会不会修复它。然后点击下面“操作”栏右侧的“新的”,会出现“操作细节”相关的内容,其中可以选择要发送的用户或者用户组,在这里我选择的是用户,并选择aming,仅送到选择baojing,继续点击“添加”(两个字,不是最下面的“添加”)。

      切换到“恢复操作”页面,默认信息同样改成如下内容

      HOST:{HOST.NAME} {HOST.IP}
      TIME:{EVENT.DATE} {EVENT.TIME}
      LEVEL:{TRIGGER.SERVERITY}
      NAME:{TRIGGER.NAME}
      messages:{ITEM.NAME}:{ITEM.VALUE}
      ID:{EVENT.ID}
      ID:{EVENT.ID}

      同样也需要点击“新的”按钮,出现细节操作,也要指定“发送到用户”为aming,仅送到也为baojing,在这不要忘记点击“添加”两字。完成以上操作,最后点击“添加”按钮。

    3. 为了测试告警,需要为主机aming-129新链接一个模板,依次点击:配置——主机——aming-129蓝色字符——模板——链接指示器(选择)——弹出模板对话框(打勾Template ICMP Ping)——蓝色选择按钮——添加——更新。

    image-20210112171012276

    1. 测试告警,在129上执行:

      # iptables -I INPUT -p icmp -j DROP
      这样会把ICMP协议禁掉,然后服务端也就无法ping通客户端129了,稍等1分钟左右,就会收到如下内容的告警邮件:
      EVENTID:89
      HOST:aming-129 192.168.188.129
      TIME:2017.04.15 21:59:02
      LEVEL:Average
      NAME:aming-129 is unabailable by ICMP
      messages:ICMP ping:Down

      再把iptables规则删除:
      # iptables -D INPUT -p icmp -j DROP
      同样会收到故障恢复的邮件,如下:
      EVENTID:89
      HOST:aming-129 192.168.188.129
      TIME:2017.04.15 21:59:02
      LEVEL:Average
      NAME:aming-129 is unabailable by ICMP
      messages:ICMP ping:Up

       

    出处:《跟阿铭学Linux》

    配置若有遗漏或错误,请评论留言。
  • 相关阅读:
    UIScrollView控件介绍
    xib的简单使用
    使用xib开发界面
    浅析IOS中的AutoLayout
    关于字典转模型的个人理解
    Linux开发基础环境配置
    深度学习相关环境的配置
    蓝牙协议分析(2)_协议架构
    蓝牙协议分析(1)_基本概念
    10项目实战-交易数据异常检测
  • 原文地址:https://www.cnblogs.com/BrokenEaves/p/14427045.html
Copyright © 2011-2022 走看看