zabbix10 ---- base template
zabbixbase template
基础模板制作
可以在基础模板之上进行调整
物理机基础模板,监控硬件相关信息及资源利用率
虚拟机基础模板,通常用于监视资源和使用应用程序
IO监控
磁盘的寻道时间、旋转延迟和数据传输时间:
- 寻道时间:是指磁头移动到正确的磁道上所花费的时间,寻道时间越短则I/O处理就越快,目前磁盘的寻道时间一般在3-15毫秒左右。
- 旋转延迟:是指将磁盘片旋转到数据所在的扇区到磁头下面所花费的时间,旋转延迟取决于磁盘的转速,通常使用磁盘旋转周期所需要时间的1/2之一表示,比如7200转的磁盘平均旋转延迟大约为601000/7200/2=4.17毫秒,公式的意思为(每分钟60秒1000毫秒每秒/7200转每分钟/2),如果是15000转的则为60*1000/15000/2=2毫秒。
- 数据传输时间:指的是读取到数据后传输数据的时间,主要取决于传输频率,这个值等于数据大小除以传输速率,目前的磁盘接口每秒的传输速度可以达到600MB,因此可以忽略不计
磁盘的寻道时间、旋转延迟和数据传输时间
-
常见的机械磁盘平均寻道时间值
7200转/分的磁盘平均物理寻道时间:9毫秒
10000转/分的磁盘平均物理寻道时间:6毫秒
15000转/分的磁盘平均物理寻道时间:4毫秒 -
常见磁盘的平均延迟时间
7200转的机械盘平均延迟:601000/7200/2=4.17ms
10000转的机械盘平均延迟:601000/100002=3ms
15000转的机械盘平均延迟:60*1000/15000/2=2ms -
每秒最大IOPS的计算方法
7200转的磁盘IOPS计算方式:100毫秒/(9毫秒的寻道时间+4.17毫秒的平均旋转延迟时间=1000/13.13=75.9 IOPS
10000转的磁盘的IOPS计算方式:1000毫秒/(6毫秒的寻道时间+3毫秒的平均旋转延迟时间)=1000/9=111 IOPS
15000的磁盘的IOPS计算方式:1000毫秒/(4毫秒的寻道时间+2毫秒的平均旋转延迟时间)=1000/6=166.6 IOPS
示例
采集脚本
/etc/zabbix/zabbix_agentd.d/cpu_use.sh
cpu_usage(){
NUM=`/usr/bin/top -bn 1 | grep Cpu | awk '{print $2}' | awk -F "." '{print $1}'`
echo ${NUM}
}
main(){
case $1 in
cpu_usage)
cpu_usage;
;;
esac
}
main $@
/etc/zabbix/zabbix_agentd.d/mem.sh
grep 7 /etc/redhat-release &> /dev/null
if [ $? -eq 0 ];then
mem_total(){
TOTAL=`free |grep -i mem |awk '{print $2}'`
echo ${TOTAL}
}
mem_use(){
USE=`free |grep -i mem | awk '{print $3}'`
echo ${USE}
}
mem_free(){
FREE=`free |grep -i mem |awk '{print ($4+$6)}'`
echo ${FREE}
}
mem_usage(){
USAGE=`free |grep -i mem | awk '{print ($3)/$2*100}' | awk -F "." '{print $1}'`
echo ${USAGE}
}
else
mem_total(){
TOTAL=`free |grep -i mem |awk '{print $2}'`
echo ${TOTAL}
}
mem_use(){
USE=`free |grep -i mem | awk '{print $3}'`
echo ${USE}
}
mem_free(){
#FREE=`free |grep -i mem |awk '{print $3+$5}'`
FREE=`free |grep -i mem |awk '{print ($4+$6+$7)}'`
echo ${FREE}
}
mem_usage(){
USAGE=`free |grep -i mem | awk '{print ($3)/$2*100}' | awk -F "." '{print $1}'`
echo ${USAGE}
}
fi
main(){
case $1 in
mem_total)
mem_total;
;;
mem_use)
mem_use;
;;
mem_free)
mem_free;
;;
mem_usage)
mem_usage;
;;
*)
echo $0 mem_total/mem_use/mem_free/mem_usage
esac
}
main $@
/etc/zabbix/zabbix_agentd.d/iotop_total.sh
disk_read(){
NUM=`/usr/bin/sudo iotop -b -n 3 | grep "Total DISK READ" | grep -v grep | awk -F "|" '{print $1}' | awk -F ":" '{print $2}' | tail -n1 | awk -F "/" '{print $1}'`
NUM2=`echo $NUM | awk '{print $1}'`
UNIT=`echo $NUM | awk '{print $2}'`
if [ $UNIT == "B" ];then
echo $NUM2
elif [ $UNIT == "K" ];then
NUM3=$(echo "$NUM2 * 1024" | bc)
echo $NUM3
elif [ $UNIT == "M" ];then
NUM3=$(echo "$NUM2 * 1024 * 1024" | bc)
echo $NUM3
elif [ $UNIT == "G" ];then
NUM3=$(echo "$NUM2 * 1024 * 1024 * 1024" | bc)
echo $NUM3
fi
}
disk_write(){
NUM=`/usr/bin/sudo iotop -b -n 3 | grep "Total DISK WRITE :" | grep -v grep | awk -F "|" '{print $2}' | awk -F ":" '{print $2}' | tail -n1 | awk -F "/" '{print $1}'`
NUM2=`echo $NUM | awk '{print $1}'`
UNIT=`echo $NUM | awk '{print $2}'`
if [ $UNIT == "B" ];then
echo $NUM2
elif [ $UNIT == "K" ];then
NUM3=$(echo "$NUM2 * 1024" | bc)
echo $NUM3
elif [ $UNIT == "M" ];then
NUM3=$(echo "$NUM2 * 1024 * 1024" | bc)
echo $NUM3
elif [ $UNIT == "G" ];then
NUM3=$(echo "$NUM2 * 1024 * 1024 * 1024" | bc)
echo $NUM3
fi
}
main(){
case $1 in
disk_read)
disk_read;
;;
disk_write)
disk_write;
;;
*)
echo $0 disk_read/disk_write
esac
}
main $@
配置agent
/etc/zabbix/zabbix_agentd.d/userparameter_all.conf
UserParameter=disk_total[*],/etc/zabbix/zabbix_agentd.d/iotop_total.sh "$1"
UserParameter=cpu_use[*],/etc/zabbix/zabbix_agentd.d/cpu_use.sh "$1"
UserParameter=mem_status[*],/etc/zabbix/zabbix_agentd.d/mem.sh "$1"
grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.10.0/24
ServerActive=192.168.10.3
Hostname=192.168.10.15
Include=/etc/zabbix/zabbix_agentd.d/*.conf
验证数据采集
[root@zabbix-server ~]# zabbix_get -s 192.168.10.15 -k mem_status["mem_use"]
92708
[root@zabbix-server ~]# zabbix_get -s 192.168.10.15 -k cpu_use[cpu_usage]
20
[root@zabbix-server ~]# zabbix_get -s 192.168.10.15 -k system.cpu.load[,avg15]
0.380000
[root@zabbix-server ~]# zabbix_get -s 192.168.10.15 -k disk_total[disk_write]
4024.32
导入基础模板
采集CPU、内存、磁盘、网络相关数据
监控项
触发器
图形
自动发现规则
web导入基础模板
添加主机监控
验证数据采集
小结
1、不同应用场景使用不同模板,比如物理机一套模板,虚拟机一套模板
2、创建模板步骤,核心是编写脚本收集数据
3、创建模板步骤
编写脚本对某个对象取值
在agent配置上启动自定义监控项
脚本是否需要提权,如sudo,对某个命令 zabbix ALL=(ALL) NOPASSWD:ALL
zabbix server或者zabbix proxy使用zabbix_get去取zabbix agent自定义监控项的值
在zabbix web添加自定义模板,并将需要的主机应用到此模板