zabbix实现邮件,短信,微信报警

1、描述常见监控系统及SNMP协议
2、搭建企业级zabbix,实现自动以邮件和短信报警

1、描述常见监控系统及SNMP协议

监控系统即用于监控生产环境所使用的硬件、软件或者是业务的运行情况的报警系统。其能够对生产环境所产生的异常作出报警,使得管理员能够及时获知报警信息,保证业务的正常运行。常见的监控项有 :
服务器CPU,内存,磁盘,进程,连接数 Web,Mail,FTP,数据库,中间件 网络接口流量,转发速率,丢包率 网络设备性能,配置文件,路由数 安全设备性能,连接数,攻击数 设备运行状态
目前比较流行的开源监控系统有:zabbix、cacti、nagios、ganglia等等。

SNMP协议

SNMP协议在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。

一套完整的SNMP系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报文协议。
在snmp中一般来说由三种组件组成:

  • 网络设备:指在网络中需要管理和监控的设备,例如提供服务的服务器、路由器等,这些设备必须支持snmp协议;
  • 管理组件:一般来说指的是运行网络管理系统的计算机(也可以指在这个计算机上运行的监控软件),这个计算机可能与被管理的网络设备在地理上隔绝的,但是可以远程监控和管理网络设备,例如网吧的网管的电脑就可以看做一个管理组件,可以用来监控每个电脑的运行,以及管理你上网的时间并提出预警;
  • 代理Agent:这是指运行在被管理设备上的一个软件模块,用来维护被管理设备的管理信息数据并可在需要时把管理数据发送给管理组件;

代理保有MIB(Management Information Base)对象变量,可以从管理信息库MIB收集信息并回传给管理组件;
MIB库是一个保存网络管理信息的虚拟数据存储空间,由多组被管理对象组成。在网络设备的MIB库中有由多个MIB模块定义的多组各自相关联的对象,其实说白了里面存储的是网络设备的属性,比如什么CPU信息、IO读写率等等;

2、搭建企业级zabbix,实现自动以邮件和短信报警

为什么我们需要编译安装zabbix,编译安装好后可以创建一个软链接,如果想要升级了将软连接指向新编译安装的软件目录即可。

1.安装Zabbix server

安装依赖包:

yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel –y

准备数据库:

mysql
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to 'zabbix'@'192.168.31.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

编译安装:

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-snmp --with-libcurl --with-libxml2 --enable-java
如果提示缺少libevent安装上即可

拷贝启动脚本

cp misc/init.d/fedora/core/zabbix_* /etc/init.d/

导入数据库

mysql -uzabbix -p123456 -h192.168.31.200 zabbix < database/mysql/schema.sql
如果是agent只需要导入上面一个,如果是server则还需要导入下面两个
mysql -uzabbix -p123456 -h192.168.31.200 zabbix < database/mysql/images.sql
mysql -uzabbix -p123456 -h192.168.31.200 zabbix < database/mysql/data.sql

更改启动脚本

vim /etc/init.d/zabbix_server
vim /etc/init.d/zabbix_agent
21 # Zabbix-Directory
22 BASEDIR=/usr/local/zabbix

编辑zabbix_server.con配置文件

useradd zabbix -s /sbin/nologin
mkdir /var/log/zabbix && chown zabbix.zabbix /var/log/zabbix –R
vim /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix.log
DBHost=192.168.31.200
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBPort=3306
Timeout=30

配置web界面

安装httpd:
yum install httpd -y
mkdir /var/www/html/zabbix
cp -a /root/packages/zabbix-4.0.3/frontends/php/* /var/www/html/zabbix
systemctl restart httpd
systemctl enable httpd
chkconfig zabbix_server on

image.png

上面报错是因为缺少一些软件包,执行下面的命令
yum install php-gettext php-session php-ctype php-xmlreader php-xmlwriter php-xml php-net-socket php-gd php-mysql
再更改php的配置
vim /etc/php.ini:
post_max_size = 8M 改为 post_max_size = 16M
max_execution_time = 30 改为 max_execution_time = 300 max_input_time = 60 改为 max_input_time = 300
date.timezone = 改为 date.timezone = Asia/Shanghai


image.png

成功登陆上去了

字体乱码得解决办法

支持中文显示:
下载字体文件simkai.rr
复制字体文件上传到服务器:/var/www/html/zabbix/fonts/
编辑文件使用新字体
vim /var/www/html/zabbix/include/defines.inc.php
修改define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
至此zabbix已经安装好了,接下来我们配置各种报警方式

邮件报警

yum install mailx -y

vi /etc/mail.rc //注意需要开启客户端授权码进行第三方登录,而不是使用密码

set from=z5118845@163.com
set smtp=smtp.163.com
set smtp-auth-user=z5118845@163.com
set smtp-auth-password=abc123
set smtp-auth=login

echo "tttt" | mail -s "testmail" z5118845@163.com //测试发信正常

image.png

编写发邮件脚本

mkdir /usr/lib/zabbix/alertscripts -pv
vim /usr/lib/zabbix/alertscripts/mailx.sh

#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

[root@node1 ~]# touch /tmp/mailx.log
[root@node1 ~]# chown -R zabbix.zabbix /tmp/mailx.log
[root@node1 ~]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
[root@node1 ~]# chown -R zabbix.zabbix /usr/lib/zabbix/
[root@node1 alertscripts]# ./mailx.sh z5118845@163.com "主题" "内容" //测试发邮件脚本是否可以正常工 作

image.png

接下来我们配置zabbix的web界面
image.png

image.png
image.png

image.png
image.png

修改zabbix_server执行脚本的路径

vim /usr/local/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

然后我们测试一下,systemctl stop zabbix_zgentd


image.png

systemctl start zabbix_zgentd


image.png

短信报警

短信报警借助于第三方平台,与邮件报警指定第三方的邮件服务器类似,我们需要指定短信发送服务器,这里我们以中国网建SMS短信通为例,其官网地址如下:
http://sms.webchinese.com.cn/api.shtml
告警的脚本文件

#!/bin/bash                                                                                                         

# 脚本的日志文件
LOGFILE="/tmp/SMS.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1

MOBILE_NUMBER=$1    # 手机号码
MESSAGE_UTF8=$3     # 短信内容
XXD="/usr/bin/xxd"
CURL="/usr/bin/curl"
TIMEOUT=5

# 短信内容要经过URL编码处理
MESSAGE_ENCODE=$(echo "$MESSAGE_UTF8" | ${XXD} -ps | sed 's/\(..\)/%\1/g' | tr -d '\n')

# Uid和Key的值需要自行修改,http://www.smschinese.cn/api.shtml
# Uid 网站用户名
# Key 接口秘钥
Uid="###"    
Key="###"   #接口秘钥可以在网站中查询到
# SMS API
URL="http://utf8.api.smschinese.cn/?Uid=${Uid}&Key=${Key}&smsMob=${MOBILE_NUMBER}&smsText=${MESSAGE_ENCODE}"

# Send it
set -x
${CURL} -s --connect-timeout ${TIMEOUT} "${URL}"

测试一下
./send_msg.sh 17757008469 "尊敬的客户,您的订单已出库发货,正在配送中,请您耐心等待。"
web界面配置同上

QQ消息告警

首选需要注册一个企业微信https://work.weixin.qq.com
添加子部门


添加成员
image.png

创建应用
image.png

image.png

准备事项

企业号已经被部门成员关注
企业号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息

安装simplejson

wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
python setup.py build
python setup.py install

配置监控脚本

#!/usr/bin/python
#_*_coding:utf-8 _*_

import urllib,urllib2
import json
import sys
import simplejson

reload(sys)
sys.setdefaultencoding('utf-8')

def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    print  gettoken_url
    try:
        token_file = urllib2.urlopen(gettoken_url)
    except urllib2.HTTPError as e:
        print e.code
        print e.read().decode("utf8")
        sys.exit()
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token

def senddata(access_token,user,subject,content):

    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    send_values = {
        "touser":"8813418",    #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        "toparty":"2",    #企业号中的部门id。
        "msgtype":"text", #消息类型。
        "agentid":"1000002",    #企业号中的应用id。
        "text":{
            "content":subject + '\n' + content
           },
        "safe":"0"
        }
#    send_data = json.dumps(send_values, ensure_ascii=False)
    send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib2.Request(send_url, send_data)
    response = json.loads(urllib2.urlopen(send_request).read())
    print str(response)

if __name__ == '__main__':
    user = str(sys.argv[1])     #zabbix传过来的第一个参数
    subject = str(sys.argv[2])  #zabbix传过来的第二个参数
    content = str(sys.argv[3])  #zabbix传过来的第三个参数

    corpid =  'ww76d7749ca2a9801b'   #CorpID是企业号的标识
    corpsecret = 'k53_6pJ7cDFlKpbAUba88jagtZkSdchROUIy1Fytg3M'  #corpsecretSecret是管理组凭证密钥
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

测试一下
./wechat.py user 报警测试 error

zabbix web界面配置

image.png

创建报警用户


image.png

配置用户报警媒介(选择刚才创建的)


image.png

创建动作
image.png

image.png

image.png

最后我们测试systemctl stop zabbix_agentd


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,442评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,604评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,576评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,652评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,495评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,370评论 1 274
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,792评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,435评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,735评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,777评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,553评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,399评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,806评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,038评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,330评论 1 253
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,766评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,964评论 2 337

推荐阅读更多精彩内容