前面介绍的内容都是用第三方开发好的插件进行mysql监控的,可能有些我们关心的监控内容并不在其中,这时一种常用的方法就是定义我们自己的脚本并将它整合到zabbix中,从而在原有监控的基础上进行有力的补充。下面通过使用脚本来监控主从复制状态并进行报警通知。

先来介绍zabbix中几个常用的术语:

主机(host):           要监控的网络设备,可由ip或DNS名称指定。
主机组(host group): 主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模版不能互相链接,主机组通常在组用户或用户组指派监控权限时使用。
监控项(item): 一个特定监控指标的相关的数据,这些数据来自于被监控对象,item是zabbix进行数据收集的核心,没有item,就没有数据,每个item都由“key”进行标识。
触发器(trigger): 一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理范围内,即阈值;接收到的数据量大于阈值时,触发器状态将从“OK”转变为“Problem”,当数据量再次回到合理范围时,其状态将从“Problem”转换回“OK”。
事件(event): 即发生的一个值得关注的事件,如触发器的状态转变,新的agent或重新上线的agent的自动注册等。
动作(action): 指对于特定事件事先定义的处理方法,通过包含操作(如发送通知)和条件(何时执行操作)。
报警升级(escalation): 发送警报或执行远程命令的自定方案,如每隔多长时间发送一次警报,共发送多少次。
媒介(media): 发送通知的手段或通道,如Email,Jabber或SMS等。
通知(motification): 通过选定的媒介向用户发送的有关某事件的信息。
远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行。
模版(template): 用于快速定义被监控主机的预设条目集合,通常包含了item,trigger,graph,screen,application,low-level discovery rule,模板可以直接链接到单个主机。
应用(application): 用于检测web站点可用性的一个或多个HTTP请求。
前端(frontend): zabbix的web接口。

一、脚本监控

1、创建监控用户

GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'mpm'@'127.0.0.1' IDENTIFIED BY PASSWORD '*3B9F0373BC48DCD0459D19550D373FEBCCE003C8'
flush privileges;

2、编写监控脚本

#!/bin/sh
#Created by: 茁壮的小草
#Create Date://
#Function:check mysql master-slave replication is ok or not ok. declare -a slave_is
slave_is=($(/usr/local/mysql/bin/mysql -h 127.0.0.1 -umpm -p'mpm' -e "show slave status \G"|grep Running |awk '{print $2}'))
if [ "${slave_is[0]}" = "Yes" -a "${slave_is[1]}" = "Yes" ]
then
echo '' #代表正常两个yes
else
echo '-1' #代表不正常
fi

执行以上脚本,如果主从复制正常,返回状态0,否则返回状态2。

3、Agentd配置文件中声明key

vim /usr/local/zabbix/etc/zabbix_agentd.conf
#添加以下一句
UserParameter=mysql.replication,/data/scripts/check_replication.sh #逗号前面是key,后面是执行的脚本

4、重启agentd服务并进行测试

[root@node2 etc]# /etc/init.d/zabbix_agentd restart
停止 Zabbix Agent: [确定]
正在启动 Zabbix Agent: [确定]

然后到zabbix server上看看能否获取到key的监控值:

[root@monitor bin]# ./zabbix_get -s 192.168.245.131 -k "mysql.replication"
Warning: Using a password on the command line interface can be insecure.

okay,到这里脚本就写好了,下面就到zabbix的web页面上创建监控项、触发器、事件等步骤吧,把上面介绍的几个术语串联起来,实现我们需要的监控。

5、zabbix web端添加监控内容

1)创建监控项(item)

点击右边的创建监控项,进入下面页面:

类型:这里选择主动模式,需要agentd配置文件中开启RefreshActiveChecks,表示每隔多长时间向server请求监控项检测,单位秒。
键值:需要跟agentd配置文件中声明的key相同

2)创建触发器

3)查看监控效果

这时可以分别停止和启动主从复制查看具体的监控效果。

stop slave:

start slave:

二、报警通知

 1、邮件报警

zabbix发送邮件报警需要服务器上能够发送邮件的环境,下面先保证liunx服务器可以发送邮件。

1)安装和配置Mutt

yum install mutt -y
vim /etc/Muttrc
set sendmail="/usr/local/msmtp/bin/msmtp" #你的msmtp命令路径
set use_from=yes
set realname="zabbix.com" #随意填写个名字
set editor="vim"

2)安装和配置msmtp

wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download
tar jxvf msmtp-1.4..tar.bz2
cd msmtp-1.4.
./configure --prefix=/usr/local/msmtp
make&&make install
mkdir -p /usr/local/msmtp/etc
vim /usr/local/msmtp/etc/msmtprc
添加以下内容
# Set default values for all following accounts.
defaults
logfile /usr/local/msmtp/log/mmlog.log
# The SMTP server of the provider.
account # SMTP邮件服务器地址
host smtp..com # 发送的邮件Email
from @.com
auth login # 邮件服务器登录账号
user @.com # 邮件服务器登陆密码
#password zhl12345!@#$%
password jwehzbgxxbkkfmhw #指163的客户端授权密码
# Set a default account
account default :

然后需要将目录权限改一下,很重要,否则发不出邮件,也不太好排查:

[root@monitor log]# chown -R zabbix.zabbix /usr/local/msmtp/

可以测试下看能否发送邮件:

/usr/local/msmtp/bin/msmtp @qq.com

确保服务器可以正常发送邮件了,下一步就可以配置zabbix了。

3)创建发送邮件的脚本:脚本必须统一放到/usr/local/zabbix/share/zabbix/alertscripts目录中,否则zabbix无法找到。当然你也可以修改server上conf配置文件,重新指定位置。需要指出的是,这里的脚本是经过验证的,网上有很多是通过mutt调用msmtp的,开始我也使用该方法,但是zabbix页面显示已发送,但是死活收不到邮件,花了好多时间,估计问题就出在mutt上,不知道啥原因,花了很多时间。后来改用msmtp直接发送就可以了,如下:

#! /bin/sh
DEBUG=
if [ $DEBUG -gt ]
then
exec >>/usr/local/msmtp/log/msmtp-log
set -x
fi
FROM='xxxxxxxxxx@163.com'
MSMTP_ACCOUNT='' #msmtprc配置文件中的account
# Parameters (as passed by Zabbix):
recipient=$
subject=$
message=$
date=`date --rfc-`
sed 's/$/\r/' <<EOF | /usr/local/msmtp/bin/msmtp --account $MSMTP_ACCOUNT $recipient
From: <$FROM>
To: <$recipient>
Subject: $subject
Date: $date
$message
EOF

4)zabbix web上创建示警类型、action、用户等。

  • 创建示警类型:管理-->媒介类型

名称可以自己起,类型选择“脚本”,脚本名称填写刚才创建的脚本,不用写全路径,如果有后缀名的请带上,否则找不到。

  • 创建action:组态-->动作

以上的红色框框中需要填写正确的,别的根据需要自己填写。

  • 创建用户并关联事件:管理-->用户-->点击红色

到“示警媒介”一栏下进行添加刚才我们新建的媒介,收件人需要填写正确,状态已启用。

现在可以进行问题报警了,下面把主从复制关闭,看看能不能收到邮件。这是我收到的邮件:

如果收不到,先从zabbix进行排查,受监测-->事件,查看最后一栏的动作,如果正常表示发送邮件ok了,否则是失败,可以点击前面的日期进行详细查看:

到这儿,zabbix整个流程都齐了,从一无所有到可以报警发邮件了,下面通过一张图来把从无到有的过程联系起来:

【说明】:

  • 首先需要新增主机组(可以用来按组授权),然后添加监控主机。
  • 在受监控的主机中新增监控项,需要在agentd配置文件中指定key,zabbix通过key找到脚本监控的输出值。
  • 新建触发器,表示根据监控项输出值执行触发一些特别的action,新建触发器时需要关联监控项,通过表达式选择一个监控项进行关联。
  • 接下来创建动作,因为根据触发器需要执行一些action。在action中的条件栏目下关联触发器(比如设置条件:触发器=问题,就是有问题时执行这个动作)
  • 创建示警媒介(在创建动作前创建)。由于动作中包含很多种操作,如发邮件、执行命令等,需要将动作和示警媒介进行关联,通过在动作中选择一种操作进行关联,示警媒介可以属于某个用户。

至此,通过两个星期的学习,zabbix监控mysql数据库终于可以正常工作了,其实zabbix还有很多功能,如自动发现主机等,暂时先告一段落吧,把搭建学习的过程记录下来,下次再做就可以得心应手了。

zabbix实现mysql数据库的监控(四)的更多相关文章

  1. zabbix实现mysql数据库的监控(三)

    上面一章“zabbix实现mysql数据库的监控(二)”使用MPM来监控mysql,但是遇到安装问题始终解决不了,这里改用percona-monitoring-plugins进行zabbxi上监控my ...

  2. zabbix实现mysql数据库的监控(二)

    上章我们把zabbix的服务端和客户端都部署完成了,本章接着进行两部分的设置: 1  添加对mysql数据库主机的监控 2  添加对mysql数据库的监控 一.对数据库服务器主机监控 1 创建主机 步 ...

  3. zabbix实现mysql数据库的监控(一)

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问 ...

  4. centos 7中监控mysql 数据库脚本(监控端口)

    centos 7中监控mysql 数据库脚本(监控端口) 监控mysql数据库的方法如下: 1.监控端口 netstat -nltp |grep 3306 2.监控进程 ps -ef |grep 33 ...

  5. MySQL数据库重点监控指标

    MySQL数据库重点监控指标 QPS queries per seconds 每秒中查询数量 show global status like 'Question%'; Queries/seconds ...

  6. Zabbix检测Mysql数据库的主从同步

    在高并发网站架构中,MySQL数据库主从同步是不可或缺的,不过经常会发生由于网络原因或者操作错误,MySQL主从经常会出现不同步的情况,那么如何监控MySQL主从同步,也变成检测网站正常运行的重要环节 ...

  7. Zabbix导入MySQL数据库报错ERROR 1046 (3D000) at line 1: No database selected

    使用如下命令导入Zabbix数据库时报错 解决办法: 1.先把原始的数据库压缩包备份 cd /usr/share/doc/zabbix-server-mysql-4.0.7/ cp create.sq ...

  8. zabbix使用mysql数据库 对表分区

    zabbix删除历史数据 mysql 表自动分区.删除 ----2016年终总结 二 zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除 ...

  9. Mysql数据库自带四个数据库的解析

    1.    information_schema详细介绍: information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.什么是元数据呢?元数据是关于数据的数据,如数据 ...

随机推荐

  1. 如何手动编译运行带包 java 程序

    带包的java程序比普通java程序的编译稍微复杂一些.例如下面的例子: package cn.guopeng; import java.util.*; public class hello { pu ...

  2. 转python调用Go代码

    Go 1.5发布了,其中包含了一个特性:可以编译生成动态链接库,经试验,生成的.so文件可以被python加载并调用.下面举个例子: 先写一个go文件main.go: package main imp ...

  3. kernel feature collection

    Fault injection http://lwn.net/Articles/209257/ The framework can cause memory allocation failures a ...

  4. C语言小板凳(1)

    ①strlen()函数作用:计算字符串的长度,当遇到"\n"字符时结束,即遇到数值"0"时结束计算,有一点特别要注意当这个函数用来计算数组的长度的时候遇到数值0 ...

  5. Oracle集群和灾备解决方案介绍

       Oracle本身有各种各样的解决方案,本文主要是对以下几种解决方案做一下简单的梳理. 1. Oracle Rac解决方案. Oracle Rac主要通过两台Oracle服务器来组件集群,提高Or ...

  6. Laravel核心之IOC和Facade 架构分析1

    控制反转(Inversion of Control) 缩写为IoC 最常见的方式叫做依赖注入 简单说来,就是一个类把自己的的控制权交给另外一个对象,类间的依赖由这个对象去解决. Laravel 中的使 ...

  7. 使用GitBook, Git github, Markdown 快速发布你的书籍

    利用git作为版本管理和发布工具 你可以直接通过npm安装gitbook到全局 npm install -g gitbook gitbook只提供了如下四个命令 gitbook -h Usage: g ...

  8. 速记const 指针与指向const的指针

    指向const的指针.它的意思是指针指向的内容是不能被改动的.它有两种写法. ` const int* p; (推荐) int const* p;` 再说const指针.它的意思是指针本身的值是不能被 ...

  9. python利用正则表达式提取字符串

    前言 正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串.日志分析会遇到这种情况,下面我会分别讲一下对应的 ...

  10. Delphi Property详解

    http://anony3721.blog.163.com/blog/static/51197420107105132120/?ignoreua Property Keyword Defines co ...