Linux监控平台搭建( zabbix监控)

倾然丶 夕夏残阳落幕 提交于 2021-01-01 09:36:00

Linux监控平台搭建( zabbix监控)

一、Linux监控平台介绍

1、监控存在的原因

  • 站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大

2、常见开源监控软件

  • cacti、nagios、zabbix、smokeping、open-falcon等等,其中nagios、zabbix流行度非常高;
  • cacti、smokeping偏向于基础监控,成图非常漂亮,适合监控网络设备 cacti监控网络的设备;
  • cacti、nagios、zabbix服务端监控中心,需要php环境支持(用Apache的php,用nginx的php都可以),其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图

3、目前业界都流行用zabbix。

  • zabbix配置简单,优势明显,早起使用nagios的企业,慢慢的转向使用zabbix;
  • nagios,需要更改配置文件,并不支持web界面一键执行,nagios和zabbix相比,nagios 更注重的是某一个监控的状态,不关注历史;
  • zabbix,则是把每一次监控的数值反馈出来,数值存到数据库里面,方便后期数据图去分析监控整个状态;
  • nagios不需要mysql的支持,不能成图,若需要画图,得安装插件以后才支持web界面;
  • ccti 也需要mysql的支持,也可以成图,可以记录历史数据
  • zabbix 在web界面下管理得非常彻底,可以增加监控节点,报警预知等等。
  • open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究
  • open-falcon软件适合大企业使用,小企业可以去研究它的思想。
  • 监控软件比较新的: prometheus grafana

二、zabbix监控介绍

1、zabbix简介

  • C/S架构,有一个服务端,去客户端抓数据。在客户端必须要有一个服务启动运行才可以抓取数据;数据可以主动的上报服务端,也可以让服务端去连接客户端获取(通过抓取数据方式,数据获取分两个模式,一个主动模式,一个被动模式),
  • zabbix软件基于C++开发,监控中心需要一个PHP的web环境,因为要开启一个web界面配置和管理 单台server节点(即一台server),理论上 可以支持上万台客户端

2、zabbix瓶颈:

  • 在于采集数据的量,虽然支持上万台,但监控的项目过多,还是会导致zabbix效率降低;所以,当服务器大到一定规模的时候,就需要对zabbix进行优化;
  • 解决方法:可以增加一些代理点,这些代理点充当server,替代server去采集数据,最终得到分析结果再汇报给主服务端server;

3、zabbix架构里,包括了5个组件:

  • zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
  • 数据存储 存放数据,比如mysql
  • web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因(如果没有web界面,就无法在浏览器上配置它)
  • zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力(当机器量很多的时候,可以使用zabbix-proxy)
    • 有时候,服务器分布在多个机房里,每个机房的服务器之间都是一个单独的内网,这时候就可以在某一个局域网里搭建一个 zabbix-proxy ,用这台 proxy 去监控局域网里的机器
  • zabbix-agent 客户端软件(每一台客户端都需要安装agent),负责采集各个监控服务或项目的数据,并上报。

三、zabbix监控安装

ying01安装

下载官方提供的repo源

[root@ying01 ~]# rpm -i https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
警告:/var/tmp/rpm-tmp.4JVpyA: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY

[root@ying01 ~]# ls /etc/yum.repos.d/zabbix.repo       //查看下载的repo源
/etc/yum.repos.d/zabbix.repo

用yum安装zabbix相关的包

[root@ying01 ~]#  yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql

安装包释义:

  • zabbix-agent //客户端软件
  • zabbix-get //服务端用的一个工具,这个工具可以通过命令行的形式,获得客户端某些监控项目的数据
  • zabbix-server-mysql //这个是服务端跟mysql打交道相关的组件
  • zabbix-web //webUI ,web界面
  • zabbix-web-mysql //web和mysql相关组件

数据库设置

zabbix 是基于php环境的,也就是说用的是php 的代码编写的web界面,也就说这个zabbix相当于一个站点 需要安装mysql;

在mysql配置文件添加以下语句;

[root@ying01 ~]# vim /etc/my.cnf

character_set_server = utf8   //目的支持zabbix的web界面显示中文

重启mysql,进入mysql;

[root@ying01 ~]# mysql -uroot -pyinglinux             //进入mysql


mysql> create database zabbix character set utf8;    //创建zabbix数据库,并设置utf8
Query OK, 1 row affected (0.00 sec)

mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'ying-zabbix';
Query OK, 0 rows affected (0.00 sec)                    //创建用户,以及登录密码

mysql> quit
Bye

创建的用户是需要让web(php)代码连接mysql的,监控中心zabbix mysql服务,启动的前提就是要连接mysql;

客户端采集了数据,需要把这些数据传递给服务端,那么服务端怎么把这些数据写入到MySQL去,这时就涉及到了mysql 的用户,涉及到了mysql 的数据库;用哪一个用户,去写入那一个库。

给新建的zabbix库,导入原始的数据;

[root@ying01 ~]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/ 
[root@ying01 zabbix-server-mysql-3.2.11]# ls                      
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README 
[root@ying01 zabbix-server-mysql-3.2.11]# gzip -d create.sql.gz   //解压包
[root@ying01 zabbix-server-mysql-3.2.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql  NEWS  README
[root@ying01 zabbix-server-mysql-3.2.11]# mysql -uroot -pyinglinux zabbix < create.sql   //导入zabbix库
Warning: Using a password on the command line interface can be insecure.
[root@ying01 zabbix-server-mysql-3.2.11]# cd

启动zabbix-server前,需要排查80端口是不是被占用,因为80端口需要给httpd用;

[root@ying01 ~]# systemctl start zabbix-server
[root@ying01 ~]# ps aux |grep zabbix               //zabbix没有完全启动
zabbix    2573  0.0  0.1 254628  3496 ?        S    13:54   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
root      2581  0.0  0.0 112720   984 pts/0    S+   13:54   0:00 grep --color=auto zabbix
[root@ying01 ~]# ps aux |grep nginx                //nginx占用80端口
root       988  0.0  0.0  45832  1272 ?        Ss   11:44   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     989  0.0  0.2  48184  3900 ?        S    11:44   0:00 nginx: worker process
nobody     992  0.0  0.2  48184  3900 ?        S    11:44   0:00 nginx: worker process
root      2585  0.0  0.0 112724   980 pts/0    S+   13:55   0:00 grep --color=auto nginx
[root@ying01 ~]# /etc/init.d/nginx stop            //关闭ngnix服务
Stopping nginx (via systemctl):                            [  确定  ]
[root@ying01 ~]# !ps
ps aux |grep nginx
root      2610  0.0  0.0 112720   984 pts/0    S+   13:55   0:00 grep --color=auto nginx

在zabbix_server配置文件中,按下面设置

[root@ying01 ~]# vim /etc/zabbix/zabbix_server.conf


DBHost=127.0.0.1      //添加的

DBName=zabbix        //配置文件中的参照位置


DBUser=zabbix          //配置文件中的参照位置
DBPassword=ying-zabbix  //添加的

注意:

  • mysql和zabbix装在同一台机器上,这里的 DBHost可以写localhost或者127.0.0.1;
  • 如果是在生产环境上,有时候为了提升zabbix的性能,可能会把MySQL装在其他机器上,这是的DBHost,就需要写上mysql的ip

重启zabbix-server服务,并查看端口100051,说明zabbix-server完全启动了

[root@ying01 ~]# systemctl restart zabbix-server

[root@ying01 ~]# ps aux |grep zabbix   //查看进程,此处省略

[root@ying01 ~]# netstat -lntp          
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      586/rpcbind         
tcp        0      0 0.0.0.0:37584           0.0.0.0:*               LISTEN      844/rpc.statd       
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      845/rpc.mountd      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      661/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      801/master          
tcp        0      0 0.0.0.0:42272           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      3009/zabbix_server  
tcp6       0      0 :::42925                :::*                    LISTEN      -                   
tcp6       0      0 :::111                  :::*                    LISTEN      586/rpcbind         
tcp6       0      0 :::80                   :::*                    LISTEN      2652/httpd          
tcp6       0      0 :::20048                :::*                    LISTEN      845/rpc.mountd      
tcp6       0      0 :::39733                :::*                    LISTEN      844/rpc.statd       
tcp6       0      0 :::22                   :::*                    LISTEN      661/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      801/master          
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
tcp6       0      0 :::10051                :::*                    LISTEN      3009/zabbix_server  
tcp6       0      0 :::3306                 :::*                    LISTEN      2084/mysqld         

web测试:

在浏览器输入:192.168.112.136/zabbix/,出现zabbix监控主页

进入下一步,发现页面有,php的timezone时区,状态为 fail

进入php的配置文件;给它定义时区

[root@ying01 ~]# vim /etc/php.ini 

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone = Asia/Shanghai    //定义时区为 上海

重启httpd服务(php是httpd的一个模块存在)

[root@ying01 ~]# systemctl restart httpd

此时刷新后,状态显示,全部为OK

点击下一步,进入简单设置,按下图设置;

点击下一步,填写端口10051,name自定义

下一步,你设置的信息会全部显示出来;

点击下一步,出现设置成功页面;

在菜单栏点击 Administration ,然后选择 Users;

进入新页面,设置密码,并选择中文;

退出登录,输入新密码登录;

刷新浏览器,此时显示为中文;

客户机 ying02 :

同样需要在客户机安装repo源,只是只需要yum安装zabbix-agent

[root@ying02 ~]# rpm -i https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
警告:/var/tmp/rpm-tmp.4JVpyA: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
[root@ying02 ~]# cat /etc/yum.repos.d/
cat: /etc/yum.repos.d/: 是一个目录
[root@ying02 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  epel-testing.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  epel.repo          zabbix.repo
[root@ying02 ~]# 
[root@ying02 ~]# yum install -y zabbix-agent

编辑zabbix_agentd配置文件;

[root@ying02 ~]# vim /etc/zabbix/zabbix_agentd.conf


Server=127.0.0.1 改为  Server=192.168.112.136  //定义服务端的ip(被动模式)


ServerActive=127.0.0.1 改为 ServerActive=192.168.112.136  //不填写服务端的IP,那么就只能使用被动模式;

Hostname=Zabbix server  改为  Hostname=ying02  //自定义主机名

启动zabbix_agentd服务,并查看其端口为10050

[root@ying02 ~]# systemctl start zabbix-agent
[root@ying02 ~]# ps aux |grep zabbix
zabbix    3117  0.0  0.0  80776  1280 ?        S    15:36   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix    3118  0.0  0.0  80776  1368 ?        S    15:36   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix    3119  0.0  0.0  80776  1844 ?        S    15:36   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix    3120  0.0  0.0  80776  1844 ?        S    15:36   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix    3121  0.0  0.0  80776  1844 ?        S    15:36   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix    3122  0.0  0.1  80908  2228 ?        S    15:36   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root      3128  0.0  0.0 112720   984 pts/0    R+   15:36   0:00 grep --color=auto zabbix
[root@ying02 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      568/rpcbind         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      936/nginx: master p 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      835/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1043/master         
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      3117/zabbix_agentd  
tcp6       0      0 :::111                  :::*                    LISTEN      568/rpcbind         
tcp6       0      0 :::22                   :::*                    LISTEN      835/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1043/master         
tcp6       0      0 :::10050                :::*                    LISTEN      3117/zabbix_agentd  

[root@ying02 ~]# systemctl enable zabbix-agent      //设置开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.

四、忘记Admin密码

在mysql下,进入zabbix库,在user表中的passwd为其密码;

update users set passwd=md5('www1234') where alias='Admin' 此命令为 更新密码;


[root@ying01 ~]# mysql -uroot -pyinglinux


mysql> use zabbix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;  //查看库下的表,里面有users表

127 rows in set (0.00 sec)

mysql> desc users;  //显示user表的项目,里面有passwd
+----------------+---------------------+------+-----+---------+-------+
| Field          | Type                | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+-------+
| userid         | bigint(20) unsigned | NO   | PRI | NULL    |       |
| alias          | varchar(100)        | NO   | UNI |         |       |
| name           | varchar(100)        | NO   |     |         |       |
| surname        | varchar(100)        | NO   |     |         |       |
| passwd         | char(32)            | NO   |     |         |       |
| url            | varchar(255)        | NO   |     |         |       |
| autologin      | int(11)             | NO   |     | 0       |       |
| autologout     | int(11)             | NO   |     | 900     |       |
| lang           | varchar(5)          | NO   |     | en_GB   |       |
| refresh        | int(11)             | NO   |     | 30      |       |
| type           | int(11)             | NO   |     | 1       |       |
| theme          | varchar(128)        | NO   |     | default |       |
| attempt_failed | int(11)             | NO   |     | 0       |       |
| attempt_ip     | varchar(39)         | NO   |     |         |       |
| attempt_clock  | int(11)             | NO   |     | 0       |       |
| rows_per_page  | int(11)             | NO   |     | 50      |       |
+----------------+---------------------+------+-----+---------+-------+
16 rows in set (0.05 sec)

mysql> update users set passwd=md5('www1234') where alias='Admin';  //更新密码,括号内,为新密码
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from users;          
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+---------------+---------------+---------------+
| userid | alias | name   | surname       | passwd                           | url | autologin | autologout | lang  | refresh | type | theme   | attempt_failed | attempt_ip    | attempt_clock | rows_per_page |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+---------------+---------------+---------------+
|      1 | Admin | Zabbix | Administrator | 566a1fc42bc3fa17a3920221d2b24d34 |     |         1 |          0 | zh_CN |      30 |    3 | default |              0 | 192.168.112.1 |    1532414568 |            50 |
|      2 | guest |        |               | d41d8cd98f00b204e9800998ecf8427e |     |         0 |        900 | en_GB |      30 |    1 | default |              0 |               |             0 |            50 |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+---------------+---------------+---------------+
2 rows in set (0.00 sec)

mysql> quit
Bye

五、主动模式和被动模式

  • 主动或者被动是相对客户端来讲的
  • 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端,服务端请求以后,客户端接受到请求以后,才把相应的数据汇报给服务中心
  • 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可
    • 定义完策略之后,到达定义的时间以后,就会主动汇报数据给服务中心,比如系统的负载,网络的网卡流量等
  • 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。
  • 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式

六、添加监控主机设置

在菜单栏 点设置——主机群设置 ,设置群名 ying-test

选择 设置——主机——创建主机,群组选择之前刚设置好的ying-test

选择 设置——主机——创建模板,名字自定义;

点击 链接的模板 按图选择好模板;

点 主机——ying02——模板,选择链接模板 ying

七、处理图形中的乱码

查看图形的时候,点击预览,发现出现整齐的方块,说明字库有问题;

[root@ying01 ~]# vim /usr/share/zabbix/include/defines.inc.php


define('ZBX_FONTPATH',                     realpath('fonts')); // where to search for font (GD > 2.0.18)
define('ZBX_GRAPH_FONT_NAME',           'graphfont'); // font file name  


  • ZBX_FONTPATH:定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts;
  • ZBX_GRAPH_FONT_NAME:所定义的“graphfont”,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont

打开字体目录查看;

[root@ying01 ~]# ls /usr/share/zabbix/fonts/
graphfont.ttf
[root@ying01 ~]# ls -l /usr/share/zabbix/fonts/      //软连接指向其他目录
总用量 0
lrwxrwxrwx 1 root root 33 7月   24 17:25 graphfont.ttf -> /etc/alternatives/zabbix-web-font
[root@ying01 ~]# ls -l  /etc/alternatives/zabbix-web-font     //继续指向其他文件
lrwxrwxrwx 1 root root 38 7月   24 17:26 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf
[root@ying01 ~]# ls -l /usr/share/fonts/dejavu/DejaVuSans.ttf       //此时他就是一个字体
-rw-r--r-- 1 root root 720012 2月  24 2011 /usr/share/fonts/dejavu/DejaVuSans.ttf

找到这个字体DejaVuSans.ttf,那么我们再windows字库找个支持中文的字体,比如simsun


[root@ying01 ~]# ls /root/simsun.ttc                       //我用xfp工具传到root下
[root@ying01 ~]# mv simsun.ttc /usr/share/zabbix/fonts/    //移到zabbix字体目录下
[root@ying01 ~]# cd /usr/share/zabbix/fonts/              
[root@ying01 fonts]# mv graphfont.ttf graphfont.ttf.bak        //把graphfont.ttf备份
[root@ying01 fonts]# ln -s simsun.ttc graphfont.ttf             //做一个软连接
[root@ying01 fonts]# ls -l /usr/share/zabbix/fonts/
总用量 17788
lrwxrwxrwx 1 root root       10 7月  24 23:22 graphfont.ttf -> simsun.ttc
lrwxrwxrwx 1 root root       33 7月  24 13:15 graphfont.ttf.bak -> /etc/alternatives/zabbix-web-font
-rw-r--r-- 1 root root 18214472 7月  24 23:17 simsun.ttc
[root@ying01 fonts]# systemctl restart zabbix-server        重启服务

改完配置后,刷新浏览器,可以看到方块消失;

八、自动发现

在主机ying02 —— 自动发现规则,进入页面

按图进入;

设置更新时间;

监控一天的分布图;

九、 添加自定义监控项目

  • 需求:监控某台web的80端口连接数,并出图

  • 两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现

对于第一步,需要到客户端ying02 定义脚本

vim /usr/local/sbin/estab.sh 


#!/bin/bash
##获取80端口并发连接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED

给予755权限,不然zabbix执行不了这个脚本;

[root@ying02 ~]# chmod 755 /usr/local/sbin/estab.sh

客户端 ying02上编辑配置文件 ,把增加以下内容:

[root@ying02 ~]# vim /etc/zabbix/zabbix_agentd.conf


# UnsafeUserParameters=0       //默认
UnsafeUserParameters=1         //表示使用自定义脚本
 

# UserParameter=        //默认的
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh 
//自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本为/usr/local/sbin/estab.sh

进入web界面:

创建监控项:按下图配置

创建相应的图形:按下图配置

创建相应的触发器:按下图配置

现在查看图形,右下角绿色的线条;

十、配置邮件告警

使用163或者QQ邮箱发告警邮件 首先登录你的163邮箱,设置开启POP3、IMAP、SMTP服务 开启并记录授权码 然后到监控中心设置邮件告警 “管理”,“报警媒介类型”,“创建媒体类型” {ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}

[root@ying01 ~]# vim /etc/zabbix/zabbix_server.conf 

AlertScriptsPath=/usr/lib/zabbix/alertscripts

[root@ying01 ~]# ls /usr/lib/zabbix/alertscripts
[root@ying01 ~]# cd /usr/lib/zabbix/alertscripts

[root@ying01 alertscripts]# vim mail.py

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
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.qq.com'
    gport = 25

sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
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.126.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,password)

        smtp.sendmail(mailfrom, mailto, msg.as_string())
        smtp.close()
    except Exception,err:
        print "Send mail failed. Error: %s" % err


def main():
    to=sys.argv[1]
    subject=sys.argv[2]
    content=sys.argv[3]
##定义邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
    sendqqmail('txwd188@126.com','省略','txwd188@126.com',to,subject,content)

if __name__ == "__main__":
    main()

给予755权限,否则不会执行此脚本;

[root@ying01 alertscripts]# chmod 755 mail.py

测试给邮箱发邮件,进行测试;

[root@ying01 alertscripts]# python mail.py txwd188@126.com  "0000000" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "111" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "qq" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "xyz" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "212" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "999" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "wwq" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "cda" "OK OK OK"
[root@ying01 alertscripts]# python mail.py txwd188@126.com  "12345" "OK OK OK"

虽然出现这种诡异现象,但是第二天,重新测试,结果都能发送;


进入web页面,进行设置

1、管理 —— 报警媒介类型 —— 创建媒体类型,然后按下图设置

2、管理 —— 用户 —— ying ,按下图选择群组

3、点击 报警媒介 ,点击 添加;此时默认为baojing,写入邮箱;

4、管理 —— 用户组 —— zabbix administrors

5、点击 权限,选中 读写,点击选择,把所有内容全选;

6、回到用户,此时用户的权限 已经为读写权限;

7、点击 报警媒介 ,此时如果想再增加邮箱,可以点击添加;

8、配置 动作,按下图 填写;

配置-->动作-->创建动作

  • 动作名称:中英文都可以,这里叫 发邮件
  • 条件:维护状态 非在 维护,就表示 维护状态机器不进行发邮件
  • 新的触发条件,当触发器示警度(也就是信息,警告,一般严重...)
  • 大于等于未分类(未分类 表示 所有状态,都会发信息)

配置-->动作-->操作

  • HOST:{HOST.NAME} {HOST.IP} //(定义主机名)
  • TIME:{EVENT.DATE} {EVENT.TIME} //(定义事件发生时间)
  • LEVEL:{TRIGGER.SEVERITY} //(定义示警度)
  • NAME:{TRIGGER.NAME} //(定义哪一个触发器发出的报警)
  • messages:{ITEM.NAME}:{ITEM.VALUE} // (发出告警会出现什么状态码)
  • ID:{EVENT.ID} //(发生事件的id)

配置-->动作-->恢复操作

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

9、设置恢复操作。即问题解决后,也给指定邮箱发邮件;

10、在web端已经配置好,发邮件的一切配置;


开始试验:

1、想产生动作,必须要有信号;因此新建一个触发器;

2、点击仪表盘,最近20项内容,处查看,已经有报警,而且已经执行了动作,即发邮件

3、打开邮箱,此时能够看出此邮件,刚刚发送;

4、那把触发器改大于1,此时报警接触,在菜单栏 问题 查看;发现恢复操作 的动作,也完成了;即回复邮件;

5、此时再查看邮箱,已经收到 邮件 OK;

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!