13 搭建zabbix监控告警系统,要求监控各个基础指标(cpu、内存、硬盘),网卡流量需要成图,还需要监控web站点的可用性,
14 定制自定义监控脚本,监控web服务器的并发连接数,接入zabbix,成图,设置触发器,超过100告警
15 定制自定义监控脚本,监控mysql的队列,接入zabbix,成图,设置触发器,队列超过300告警
16 定制自定义监控脚本,监控mysql的慢查询日志,接入zabbix,成图,设置触发器,每分钟超过60条日志需要告警,需要仔细分析慢查询日志的规律,确定日志条数
17 利用jmx,在zabbix上监控tomcat

1.安装zabbix

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命令。

cd /usr/share/doc/zabbix-server-mysql-4.2.3/

src create.sql.gz  root@ip:/data/zabbix/              //ip指mysql数据库的地址

设置zabbix—server配置文件

vim /etc/zabbix/zabbix_server.conf 

DBHost=IP:3306

DBName=zabbix

DBUser=zabbix

DBPassword=123456

设置zabbix—agent配置文件

vim /etc/zabbix/zabbix_agentd.conf

Server=127.0.0.1

ServerActive=127.0.0.1

安装htppd

yum install -y httpd

vim /etc/httpd/conf/httpd.conf

Listen 8888

ServerName www.zabbix.com:8888

web端图形界面文字处乱码,传入一个windows上的字体,修改名称

cd  /usr/share/zabbix/assets/fonts/

设置php文件中date.timezone

vim /etc/php.ini

date.timezone = Asia/Shanghai

编辑nginx配置

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主机)

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端安装

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站点的可用性,

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告警

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告警

首先安装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条日志需要告警,需要仔细分析慢查询日志的规律,确定日志条数

#!/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

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

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