1. 通过zabbix监控系统实现批量URL监控:
在本篇博文中,主要讲解如何通过zabbix监控系统来实现批量URL监控配置。关于zabbix监控系统,后续的博文会有专门的描述。关于运维监控系统一般实现的监控功能,主要分为以下几个层次:
1. 基础资源层监控:
关于基础资源层面的监控,主要是监控服务器硬件层面。包括服务器的CPU使用率、CPU负载、内存使用率、磁盘空间使用率、网卡流量、文件系统inode数量、TCP连接数监控、NAS挂载盘监控等。当然有些基础运维工程师还会监控网络设备、服务器硬件温度等,一般是通过SNMP协议完成的。基础资源层面的监控大部分都是使用统一的模板来完成。并且当zabbix的自动发现功能开启之后,一台虚拟机初始化之后就会按照zabbix agnet,被zabbix服务器自动发现就会加入基础资源监控模板;
2. 应用层监控:
应用层的监控主要是针对服务器上面运行的应用状态来监控的。主要包括应用进程的监控、应用端口的监控、应用日志的监控(当然应用日志的监控也可以使用其他软件来实现,比如我前面博文中降到的logstash来实现等),还有一个很重要的URL监控,类似于curl -I http://domain:port/Context 类似的效果,主要根据URL的返回码是200 302 还是404 500等判断web应用是否正常;而本文就是阐述如何通过批量手段来实现URL的监控;
一些中间件也有单独的监控模板,比如常用的有redis监控模板、rabbitmq监控模板、nginx监控模板、LVS监控模板等,这些监控模板大部分都是使用shell或者python编写的自定义脚本来实现数据的获取;后续再zabbix专栏会特别介绍常用的公共组件的监控;
对于java类应用,我们除了监控常用的进程和端口之外,有时候还需要监控JVM的使用情况,比如监控FULL GC的次数,堆栈内存、年轻代、老年代的内存使用情况等,这些监控也有专门的tomcat监控模板,后续会着重介绍这一点;
3. 应用性能监控:
还有一些应用性能监控(APM)工具,此类工具主要实现应用的分布式事务跟踪、自动检测应用拓扑、定位性能故障和瓶颈。开源的工具比较流行的有PinPoint、SkyWalking,国内商业软件做APM工具比较好的有听云等;后续博文会重点介绍一下SkyWalking工具的安装和配置;
4. 通过zabbix实现批量监控URL
首先在需要监控的服务器上面安装zabbix,当然可以通过初始化脚本自动安装zabbix,比如下面的脚本:
#! /bin/sh
### author: shuirong.chen
### date: 2016-11-23
echo -e '''
############################################
### this option will setup as below ####
### 1.setup LANG as zh_CN.UTF-8 ####
### 2.disable selinux ####
### 3.trun off ipv6 ####
############################################
'''
read -p "please input the zabbix server ip addr: " serverip
hostip=`ifconfig eth0 |grep "inet addr" |awk -F":" '{print $2}'|awk '{print $1}'`
hostname=`hostname`
echo -e "\033[31m create zabbix user now....... \033[0m"
grep "zabbix" /etc/passwd
if [[ $? == 0 ]]; then
echo -e "\033[31m zabbix user areadly exist \033[0m"
else
useradd -u 506 -M -s /sbin/nologin zabbix
fi
#install zabbix_agentd
basepath=`dirname $0`
cd ${basepath}
if [ -f zabbix-2.4.6-1.el6.x86_64.rpm ];then
rpm -ivh zabbix-2.4.6-1.el6.x86_64.rpm
else
echo -e "\033[31m please put the zabbix rpm pack to the current path \033[0m"
exit 2
# break;
fi
if [ -f zabbix-agent-2.4.6-1.el6.x86_64.rpm ];then
rpm -ivh zabbix-agent-2.4.6-1.el6.x86_64.rpm
else
echo -e "\033[31m please put the zabbix rpm pack to the current path \033[0m"
exit 2
# break;
fi
echo -e "\033[32m now will configure the zabbix_agentd.conf \033[0m"
sleep 2
# configure the zabbix_agentd.conf file
# Notice:if $conf is null, please run the command "updatedb"
updatedb
conf=/etc/zabbix/zabbix_agentd.conf
sed -i "s/^Server=.*/Server=$serverip/g" $conf
sed -i "s/^ServerActive=.*/ServerActive=$serverip/g" $conf
sed -i "s/^# UnsafeUserParameters=0/UnsafeUserParameters=1/g" $conf
sed -i "s/^Hostname=.*/Hostname=$hostname/g" $conf
sed -i "s/^LogFileSize=.*/LogFileSize=1/g" $conf
grep -Ev "^*#|^$" $conf
sleep 2
script="/etc/zabbix/script"
if [ -d $script ];then
cp lld-disks.py $script/
chmod +x $script/*.py
else
mkdir -p $script
cp lld-disks.py $script/
chmod +x $script/*.py
fi
cp ./userparameter_diskstats.conf /etc/zabbix/zabbix_agentd.d/
echo -e "\033[31m the zabbix service will start now... \033[0m"
sleep 2
/etc/init.d/zabbix-agent restart
chkconfig zabbix-agent on
service iptables status >> /dev/null
if [ "$?" -eq 0 ];then
iptables -I INPUT -s $serverip -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
service iptables save
else
echo -e "\033[31m the iptables is no running... \033[0m"
fi
通过此脚本可以完成zabbix的安装和配置;如果要实现批量监控URL还需要增加两个文件。第一个是url监控的脚本文件,内容如下:
第一个脚本的主要功能就是实现两个函数模块,第一个函数模块主要实现zabbix监控url的key-value格式化输出;第二个脚本的主要内容就是使用curl命令类循环获取每一个URl的返回码;
[root@m-sls-prd-ccs-dcn3-137 script]# cat web_site_code_status.sh
#!/bin/bash
# function:monitor tcp connect status from zabbix
source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1
#/usr/bin/curl -o /dev/null -s -w %{http_code} http://$1/
web_site_discovery () {
WEB_SITE=($(cat /etc/zabbix/zabbix_agentd.d/WEB.txt|grep -v "^#"))
printf '{\n'
printf '\t"data":[\n'
for((i=0;i<${#WEB_SITE[@]};++i))
{
num=$(echo $((${#WEB_SITE[@]}-1)))
if [ "$i" != ${num} ];
then
printf "\t\t{ \n"
printf "\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$i]}\"},\n"
else
printf "\t\t{ \n"
printf "\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$num]}\"}]}\n"
fi
}
}
web_site_code () {
/usr/bin/curl -o /dev/null -s -w %{http_code} $1
}
case "$1" in
web_site_discovery)
web_site_discovery
;;
web_site_code)
web_site_code $2
;;
*)
echo "Usage:$0 {web_site_discovery|web_site_code [URL]}"
;;
esac
# 在zabbix的配置脚本目录下面,配置url监控的脚本
[root@m-sls-prd-ccs-dcn3-137 script]# pwd
/etc/zabbix/script
[root@m-sls-prd-ccs-dcn3-137 script]#
在另外的配置目录专门放置一个需要批量URL监控的文件
[root@m-sls-prd-ccs-dcn3-137 zabbix_agentd.d]# cat WEB.txt
http://test1.test.cn:10000/aaa-web/index.jsp
http://test2.test.cn:10004/bbb-web/index.jsp
http://test3.test.cn:10002/cccs-web/index.jsp
修改zabbix的配置文件增加如下配置:表示开启自定义脚本功能,并且配置了两个监控key,主要用于zabbix服务器的自动发现,通过第一步定义的脚本来实现。第一个key的目的是实现url的格式化输出,第二个key实现curl URL的返回结果;
UnsafeUserParameters=1
UserParameter=web.site.discovery,/etc/zabbix/script/web_site_code_status.sh web_site_discovery
UserParameter=web.site.code[*],/etc/zabbix/script/web_site_code_status.sh web_site_code $1
这几个脚本都配置成功之后,需要重启一下zabbix的客户端
systemctl restart zabbix-agent
然后现在可以通过zabbix的服务器命令zabbix-get来检测一下key是否有结果输出;
zabbix_get -s 192.168.5.137 -p 10050 -k web.site.code[http://test.test.cn:10006/test-web/]
200
最近一段时间,公司在优化人员,运维的人员变少了,但是活还是那么多。所以实在很难抽出时间来专门写技术博客了。现在都是利用晚上睡觉前的一段时间来加班写一些技术博客与大家分享一下。后续博客还会针对jenkins的使用、zabbix的配置、应用运维的标准化和规范化讨论等展开详细的话题讨论和技术分享,也请大家及时关注并互相推荐我的技术博客;