zabbix -- 一键安装2.4.7客户端 (附:邮件、微信警报)

小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://121.41.73.56/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 
##自定义配置文件并配置在某服务器 
#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      = ‘wx1b71f3b1c380ce02‘;
    const CORP_SECRET = ‘S8-ZDuwiPipX0YQWs_xF9c4P6drWw08Z1MV0e_TgReTtYpn-4dqhBglthztHdFio‘;
    public static $_app_list = array(
       // ‘gonggaotongzhi‘ => 34,
       // ‘kaoqinxitong‘   => 35,
       // ‘huiyixitong‘    => 36,
        ‘om_monitor‘     => 43,
    );
    const IMAGE = ‘image‘;
    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.ledu.com/zabbix";
//$receiver = "zhuangzhenhua|fengkaiwen|caofeng|zhangxinyu";
$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 = ‘mailex.ledu.com‘
mail_user = ‘[email protected]‘
mail_pass = ‘wslmwps‘
mail_postfix = ‘mailex.ledu.com‘
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)
时间: 2024-12-06 11:14:58

zabbix -- 一键安装2.4.7客户端 (附:邮件、微信警报)的相关文章

zabbix 一键安装,前提是mysql已安装好,且已设好密码,已在centos 6.5上做过测试

#!/bin/bash #zabbix 一键安装 #数据库用户名 DBUSER='root' #数据库用户密码 DBPASS='root' #本地地址 DBHOST='localhost' #zabbix 下载的版本 ZBX_VER='2.4.3' ###检查返回值 function checkReturn { if [ $1 -ne 0 ]; then echo "fail: $2" echo "$3" exit else echo "pass: $2&

LNMP+zabbix一键安装部署

安装脚本 说明:此脚本只适用与RHEL6.x系列:Nginx版本为1.6最新稳定版:PHP为5.4最新版:Mysql为5.5最新稳定版:Zabbix暂时为2.4最新版. #!/bin/bash # install Nginx 1.6.2 + mysql5.5.x + PHP-FPM 5.4.x + Zabbix 2.4.4 automatically. # Tested on CentOS 6.5 ############################################## # 

zabbix一键安装脚本

脚本作者:火星小刘 web:www.huoxingxiaoliu.com email:[email protected] 要求纯净centos6/7系统 关闭防火墙 关闭selinux php>=5.6 运行"server-install.sh"安装zabbix服务器端 由于zabbix3需要php5.6以上,因此脚本会删除原有php环境从新安装 mysql默认root密码123321zabbix数据库名称zabbixzabbix数据库用户名zabbixzabbix数据库密码za

LNMP+Zabbix一键安装脚本

环境:CentOS 6.5(最小化安装) 执行截图: #!/bin/bash #date:2015-6-14 #author:yfshare #mail:[email protected] echo '' echo -e "\t###########################################################" echo -e "\t###\t\t\t\t\t\t\t###" echo -e "\t###\twelcom

lnmp+zabbix一键部署脚本

一.基础环境准备脚本比较执行过程中比较依赖yum,所以前提保证服务器yum环境正常,否则一些依赖包将不能正常安装,导致后续编译失败等问题,该脚本经过个人轮番测试基本上可以一键搞定zabbix的部署工作,目前只是整个Server端的脚本,后续将编写Agent端自动推送的脚本二.脚本用法介绍 脚本使用-h参数可以看到该脚本支持传递以下3个参数,该参数都不是必须参数,如果不传递将采用脚本默认参数进行安装 直接执行脚本将进入人工确认模式进行安装(静默模式需要加"-s"参数),显示如下: 人工模

ansible-playbook基于role的配置一键安装zabbix客户端以及拉取自定义监控脚本

在IT工作中,您可能会一遍又一遍地执行相同的任务:没有人喜欢重复的任务.通过Ansible,IT管理员可以开始自动化日常任务中的苦差事.自动化解放了管理人员,专注于通过加快应用交付时间和建立在成功文化基础之上,为业务提供更多价值的努力.最终,Ansible为团队提供了他们永远无法获得足够的一件事:时间.让聪明的人专注于聪明的事情. Ansible是一种简单的自动化语言,可以完美地描述IT应用程序基础结构.它易于学习,自我记录,并且不需要毕业级的计算机科学学位来阅读.自动化不应该比它正在取代的任务

使用Fabric自动化安装zabbix服务器端和客户端,附安装脚本

前一段是公司的一个项目环境,由以前的单节点环境升级到到现在集群环境,并且服务器都在同一个机房,考虑部署了一套zabbix监控系统,由于第一次部署的服务器有点多,所以将安装流程写成了脚本模式,分别是server端和client端,方便安装,采用的是Python的Fabric模块写的脚本:分享一下,希望对初次批量部署监控的朋友有帮助. 脚本注意事项: (1.虚拟主机路径,最好使用 nginx or apache 默认路径,安装成功以后在手动修改: (2.php参数需要手动调整,未调整安装以后会有警告

Windows系统一键安装zabbix agent

下载附件里的zabbix_agents_auto_installer.win.rar,解压后修改AutoInstall.bat里的zabbix_server的IP,以管理员身份运行AutoInstall.bat,zabbix agent会注册为服务并启动.32位系统会安装在c:\zabbix_x86,64位会安装在c:\zabbix_x64. 下面献上AutoInstall.bat代码,供参考: :: 一键安装zabbix agent 2.2.9,理论支持所有windows系统 :: 有BUG请

红叶倾城一键网页游戏服务端+客户端(无须安装Java)源码

倾城的一键安装版服务端(包括客户端) , 无须安装Java,直接启动服务端就可进入游戏!!!新开服添加首个GM的方法:注册帐号并登陆游戏创建角色名称后,再服务端控制台中输入gmGrade 玩家角色名称 255即成功升级该角色为GM(注意输入的命令的大小写)//////////////////////////////////////////changeHeroLevel 玩家角色名称 级别/addPlayerTreasure 玩家角色名称 数量                /addGoods 物