13 搭建zabbix监控告警系统,要求监控各个基础指标(cpu、内存、硬盘),网卡流量需要成图,还需要监控web站点的可用性, 14 定制自定义监控脚本,监控web服务器的并发连接数,接入zabbix,成图,设置触发器,超过100告警 15 定制自定义监控脚本,监控mysql的队列,接入zabbix,成图,设置触发器,队列超过300告警 16 定制自定义监控脚本,监控mysql的慢查询日志,接入zabbix,成图,设置触发器,每分钟超过60条日志需要告警,需要仔细分析慢查询日志的规律,确定日志条数 17 利用jmx,在zabbix上监控tomcat
1.安装zabbix
代码语言:javascript复制rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
yum install -y zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-agent
zabbix的原始数据库是create.sql.gz,可以使用gzip -d 解压此文件,在导入数据库,也可以使用zcat命令。
代码语言:javascript复制cd /usr/share/doc/zabbix-server-mysql-4.2.3/
src create.sql.gz root@ip:/data/zabbix/ //ip指mysql数据库的地址
设置zabbix—server配置文件
代码语言:javascript复制vim /etc/zabbix/zabbix_server.conf
DBHost=IP:3306
DBName=zabbix
DBUser=zabbix
DBPassword=123456
设置zabbix—agent配置文件
代码语言:javascript复制vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1
ServerActive=127.0.0.1
安装htppd
代码语言:javascript复制yum install -y httpd
vim /etc/httpd/conf/httpd.conf
Listen 8888
ServerName www.zabbix.com:8888
web端图形界面文字处乱码,传入一个windows上的字体,修改名称
代码语言:javascript复制cd /usr/share/zabbix/assets/fonts/
设置php文件中date.timezone
代码语言:javascript复制vim /etc/php.ini
date.timezone = Asia/Shanghai
编辑nginx配置
代码语言:javascript复制vim /usr/local/nginx/conf/vhost/zabbix.com.conf
upstream zabbix_com
{
ip_hash;
server localhost:8888;
}
server
{
listen 80;
server_name www.zabbix.com;
location /zabbix/
{
proxy_pass http://zabbix_com/zabbix/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /
{
proxy_pass http://zabbix_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.mysql 设置(下面的ip指向zabbix-server主机)
代码语言:javascript复制vim /etc/my.cnf
character_set_server = utf8
service mysqld restart
登录mysql创建zabbix数据库
mysql -uroot -p123456
create database zabbix haracter set utf8;
grant all on zabbix.* to zabbix@'IP' identified by '123456';
flush privileges ;
quit
## 还原数据库
cd /data/zabbix/
gzip -d create.sql.gz
##文中的Latin修改成utf8,解决中文名称不能写数据库
vim create.sql
:1,$s/latin1/utf8/g
mysql -uroot -p123456 zabbix < create.sql
3.zabbix-agent端安装
代码语言:javascript复制rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
yum install -y zabbix-agent
#修改zabbix-agent的配置文件
vim /etc/zabbix/zabbix_agentd.conf
Server=zabbix_server_ip
ServerActive=zabbix_server_ip
4. 搭建zabbix监控告警系统,要求监控各个基础指标(cpu、内存、硬盘),网卡流量需要成图,还需要监控web站点的可用性,
代码语言:javascript复制vim /etc/zabbix/zabbix_agentd.d/userparameter_io.conf
UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}'
//磁盘读的次数
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}'
//磁盘读的毫秒数
UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}'
//磁盘写的次数
UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}'
//磁盘写的毫秒数
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}'
//I/O的当前进度,只有这个域应该为0
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}'
//花费在IO操作上的毫秒数
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}'
//读扇区的次数(一个扇区的等于512B)
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}'
//写扇区的次数(一个扇区的等于512B)
5. 自定义监控脚本,监控web服务器的并发连接数,接入zabbix,成图,设置触发器,超过100告警
代码语言:javascript复制vim /usr/local/sbin/zabbix/web_mon.sh
#!/bin/bash
#接收告警邮件的邮箱
mail_account="aaa@163.com"
#提取本服务器的IP地址信息
IP=`/sbin/ifconfig |grep -A1 "eth0: "|awk '/inet/ {print $2}'`
#web服务器的并发连接数
web=`netstat -ant |grep ':80' |grep -c ESTABLISHED`
#设置web并发连接告警值,超过99的时候告警
web_gt=100
#当web值大于告警值,直接发邮件告警
if (($web > $web_gt))
then
echo "$IP监控web服务器的并发连接数为$web_gt,超过警戒值100,请立即处理!!!" | mutt -s "$IP 服务器并发连接数严重告警!!!" $mail_account
fi
6.定制自义监控脚本,监控mysql的队列,接入zabbix,成图,设置触发器,队列超过300告警
代码语言:javascript复制首先安装rabbitmqctl 命令
rabbitmqctl 命令 可以获取Mysql对列的信息
rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm
启动rabbitmq-server
service rabbitmq-server start在对应的机器创建脚本
vim /usr/local/sbin/mysql.sh
#!/bin/bash #堵塞最大数量
maxNum=100
#接收者
email_reciver="bbb@163.com"
#smtp服务器地址
email_smtphost=smtp.exmail.126.com
#发送者邮箱
email_sender=aaa@126.com
#邮箱用户名
email_username=tinna_wu
#使用qq邮箱进行发送需要注意:首先需要开启:POP3/SMTP服务。
email_password=xxxxx
#服务器ip
local_ip=`ifconfig|grep inet|awk '{print $2}'|awk -F " " '{print $1}'|head -1`
#主题
email_title="服务器${local_ip}消息队列堵塞"
#Mysql的环境变量 export RABBITMQPATH=/usr/lib/rabbitmq/bin/
#获取所有队列的名字和每个队列中的消息数量,存入'queueNum'数组中 declare -A A queue Json
queuelindex=0
for QUEUE in $(rabbitmqctl list_queues |grep -v 'Listing queues ...' | awk -F' ' '{print $1}');
do
#统计每个消息队列的数量
queueJson[$QUEUE]=$(rabbitmqctl list_queues |grep $QUEUE | awk -F' ' '{print $2}')
nums=${queueJson[$QUEUE]}
# -ge
if [[ $nums -ge $maxNum ]]; then
#存key
queueName[$queueIndex]=$QUEUE
queueIndex=`expr $queueIndex 1`
fi
done
#如果有异常,发送邮件
exceptionNum=${#queueName[@]}
if [[ $exceptionNum -gt 0 ]]; then
#有队列阻塞,exceptionName存放的为堵塞队列的名称,发送邮件
#内容
email_content="队列阻塞情况:"
for name in ${queueName[*]}
do
email_content=$email_content"\n${name}:${queueJson[${name}]}"
done
echo "###################count at $(date '%d-%m-%Y %H:%M:%S') ######################"
echo -e $email_content
#发送邮件
/usr/local/sbin/mysql.sh -f ${email_sender} -t ${email_reciver} -s ${email_smtphost} -u ${email_title} -xu ${email_username} -xp ${email_password} -m ${email_content} -o message-charset=utf-8
fi
7. 定制自定义监控脚本,监控mysql的慢查询日志,接入zabbix,成图,设置触发器,每分钟超过60条日志需要告警,需要仔细分析慢查询日志的规律,确定日志条数
代码语言:javascript复制#!/bin/bash
# script name: slow_query_count.sh
slow_log=/tmp/dbm-slow.log
grep 'timestamp' $slow_log | awk -F '=' '{print $2}' |awk -F ';' '{print $1}'|sort -r > /tmp/timestamp.log
now=`sed -n '1'p /tmp/timestamp.log`
alert_num=60
one_min_ago=$[$now-60]
num=0
slow_query_sum() {
if [ $1 -ge $2 ]
then
num=$[$num 1]
else
break
fi
}
for n in `cat /tmp/timestamp.log`
do
slow_query_sum $n $one_min_ago
done
rm -f /tmp/timestamp.log
# There are $num slow query in a minute.
echo $num
8. 利用jmx,在zabbix上监控tomcat
agent端安装zabbix-java-gateway
代码语言:javascript复制yum install -y zabbix_java_gateway
vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
START_POLLERS=5
systemctl start zabbix-java-gateway
agent端修改tomcat的catalina.sh
代码语言:javascript复制vim /usr/local/tomcat/bin/catalina.sh
#在#!/bin/sh下增加
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
/usr/local/tomcat/bin/startup.sh