小Q:各位,最近一直在玩zabbix,写点总结。
1、搭建安装脚本,一键安装2.4.7 客户端
2、报警脚本(微信 邮件)
----------------------------------------------------------------------------------------------
1、搭建安装脚本,一键安装2.4.7 客户端
a、首先要找一台原始服务器,放置zabbix_2.4.7安装包,和一个已经写好适合自己的配置文件。
b、脚本如下
#!/bin/bash function install_zabbix { mkdir /downloads cd /downloads wget http://ip/zabbix-2.4.7.tar.gz ##配置一个服务器端的zabbix安装包 tar zxf zabbix-2.4.7.tar.gz cd /downloads/zabbix-2.4.7 ./configure --prefix=/usr --sysconfdir=/etc/zabbix --enable-agent make make install cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/ sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/#g" /etc/init.d/zabbix_agentd groupadd zabbix -g 201 useradd -g zabbix -u 201 -m zabbix mkdir /var/log/zabbix mkdir /var/run/zabbix chown zabbix.zabbix /var/log/zabbix chown zabbix:zabbix /var/run/zabbix chmod 755 /etc/init.d/zabbix_agentd cd /etc/zabbix mv /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.bak wget http://IP/zabbix_agentd.conf ##自定义配置文件并配置在某服务器 #cd /usr/lib64 #ln -s /usr/local/lib/libiconv.so.2 ./ #ldconfig /etc/init.d/zabbix_agentd start } install_zabbix
c、zabbix_agentd.conf 文件如下
LogFile=/var/log/zabbix/zabbix_agentd.log PidFile=/var/run/zabbix/zabbix_agentd.pid EnableRemoteCommands=0 Server=127.0.0.1,10.47.67.163 StartAgents=8 Hostname=clientname ServerActive=10.47.67.163:10051 Timeout=30 Include=/etc/zabbix/zabbix_agentd.conf.d/ UnsafeUserParameters=1 UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot ping|grep -c alive UserParameter=mysql.version,mysql -V | cut -f6 -d " "| sed 's/,//' UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep vda | head -1 | awk '{print $$6}' UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep vda | head -1 | awk '{print $$10}'
2、报警脚本(微信 邮件)
-----------------------------------------------------------放置地址在配置文件中定义
--------------------------------------------------------------------weixin
#!/usr/local/php/bin/php
<?php
error_reporting(E_ALL);
ini_set("display_errors", true);
class SdkQywx
{
const CORPID = '#####';
const CORP_SECRET = 'S8-ZDuwiPipX0YQWs_xF9c4P6drWw08Z1MV0e_TgReTtYpn-4dqhBglthztHdFio';
public static $_app_list = array(
// 'gonggaotongzhi' => 34,
// 'kaoqinxitong' => 35,
// 'huiyixitong' => 36,
'm_monitor' => 43,
);
const IMAGE = 'p_w_picpath';
const VOICE = 'voice';
const VIDEO = 'video';
const FILE = 'file';
public static $tmpConnections;
private static $_access_token;
private static $expire_on = 0;
private $access_token;
//阻止外部实例化,仅允许使用getInstance进行单例操作
private function __construct($access_token)
{
$this->access_token = $access_token;
}
//防止对象被复制
public function __clone()
{
trigger_error('Clone is not allowed !');
}
/**
* 获取单例
*
* @return <Object>
*/
public static function getInstance()
{
$access_token = self::fetchAccessToken();
if (!isset(self::$tmpConnections[$access_token]) || !(self::$tmpConnections[$access_token] instanceof self))
{
// 清空连接池
self::$tmpConnections = array();
// 缓存新连接
self::$tmpConnections[$access_token] = new self($access_token);
}
return self::$tmpConnections[$access_token];
}
private static function fetchAccessToken()
{
// 检查连接令牌是否超时
if (self::$expire_on <= time())
{
// 调用接口获取连接令牌
$result = self::doGet('https://qyapi.weixin.qq.com/cgi-bin/gettoken', array(
'corpid' => self::CORPID,
'corpsecret' => self::CORP_SECRET,
));
// 校验结果
if (isset($result['errcode']))
{
return null;
}
// 缓存令牌
self::$expire_on = time() + $result['expires_in'];
self::$_access_token = $result['access_token'];
}
return self::$_access_token;
}
public function sendNewsMessage($agentid, $user_id, $content)
{
$url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send';
$params = array('access_token' => $this->access_token);
if (is_array($user_id))
{
$user_id = implode('|', $user_id);
}
$agentid = (int) $agentid;
$articles = '[';
$tips = '';
foreach ($content as $article)
{
$article['title'] = str_replace('"', '\"', $article['title']);
$article['description'] = str_replace('"', '\"', $article['description']);
$article['url'] = str_replace('"', '\"', $article['url']);
$articles .= $tips . '{"title":"' . $article['title'] . '","description":"' . $article['description'] . '","url":"' . $article['url'] . '"}';
$tips = ',';
}
$articles .= ']';
$post_data = '{"touser":"' . $user_id . '","msgtype":"news","agentid":' . $agentid . ',"news":{"articles":' . $articles . '}}';
return self::doPost($url, $params, $post_data);
}
private static function doGet($url, $params = array())
{
$ch = curl_init($url . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取数据返回
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result, true);
}
private static function doPost($url, $params = array(), $post_data = array())
{
$ch = curl_init($url . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$info = curl_exec($ch);
curl_close($ch);
return json_decode($info, true);
}
}
$receiver = "$argv[1]";
$title = "$argv[2]";
$desc = "$argv[3]";
$url = "http://zabbix网址/zabbix";
//$receiver = "接收人";
$content = array(
array(
'title' => $title,
'description' => $desc,
'url' => $url
)
);
$r = SdkQywx::getInstance()->sendNewsMessage(43, $receiver, $content);
----------------------------------------------------------------------------------python
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.MIMEText import MIMEText
import sys
import os
import argparse
import logging
import datetime
mail_host = '#####'
mail_user = '#####'
mail_pass = '#####'
mail_postfix = '#####'
mail_nickname = 'zabbix'
######################################
######################################
global sendstatus
global senderr
def send_mail(mail_to,subject,content):
me = mail_nickname +"<"+mail_user+">"
msg = MIMEText(content)
msg['Subject'] = subject
msg['From'] = me
msg['to'] = mail_to
try:
smtp = smtplib.SMTP()
smtp.connect(mail_host)
smtp.login(mail_user,mail_pass)
smtp.sendmail(me,mail_to,msg.as_string())
print 'send ok'
sendstatus = True
except Exception , e:
sendert=str(e)
#print senderr
sendstatus = False
def logwrite(sendstatus,mail_to,content):
logpath='/var/log/zabbix/alert'
if not sendstatus:
content = senderr
if not os.path.isdir(logpath):
os.makedirs(logpath)
t=datetime.datetime.now()
daytime=t.strftime('%Y-%m-%d')
daylogfile=logpath+'/'+str(daytime)+'.log'
logging.basicConfig(filename=daylogfile,level=logging.DEBUG)
logging.info('*'*130)
logging.debug(str(t)+'mail send to{0},content is :\n {1}'.format(mail_to,content))
if __name__=="__main__":
parser = argparse.ArgumentParser(description='Send mail to user for zabbix alterting')
parser.add_argument('mail_to',action="store",help='The address of the E-mail that send to user')
parser.add_argument('subject',action="store",help='The subject of the E-mail')
parser.add_argument('content',action="store",help='The content of the E-mail')
args = parser.parse_args()
mail_to=args.mail_to
subject=args.subject
content=args.content
send_mail(mail_to,subject,content)
#logwrite(sendstatus,mail_to,content)
转载于:https://blog.51cto.com/tengxiansheng/1853348