当前位置: 首页 > news >正文

使用zabbix系统批量监控Url返回码

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的配置、应用运维的标准化和规范化讨论等展开详细的话题讨论和技术分享,也请大家及时关注并互相推荐我的技术博客;

博文的更详细内容请关注我的个人微信公众号 “云时代IT运维”,本公众号旨在共享互联网运维新技术,新趋势; 包括IT运维行业的咨询,运维技术文档分享。重点关注devops、jenkins、zabbix监控、kubernetes、ELK、各种中间件的使用,比如redis、MQ等;shell和python等运维编程语言;本人从事IT运维相关的工作有十多年。2008年开始专职从事Linux/Unix系统运维工作;对运维相关技术有一定程度的理解。本公众号所有博文均是我的实际工作经验总结,基本都是原创博文。我很乐意将我积累的经验、心得、技术与大家分享交流!希望和大家在IT运维职业道路上一起成长和进步;

使用zabbix系统批量监控Url返回码

转载于:https://blog.51cto.com/zgui2000/2400592

相关文章:

  • 1 weekend110的hdfs源码跟踪之打开输入流 + hdfs源码跟踪之打开输入流总结
  • 支持手机版微信分享显示帖子标题+缩略图+简介】的分享奖励积分插件
  • springMvc源码学习之:spirngMvc的参数注入的问题
  • Rocket - util - LanePositionedQueue
  • URL中带加号的处理
  • XML操作
  • 制作支持UEFI PC的Server2008 R2系统安装U盘
  • c++ 中 毫秒级时间获取
  • golang使用oracle碰到go/lib/time/zoneinfo.zip: no such file or directory
  • Introduction to Machine Learning
  • Windows Server 2012 R2上安装.Net4.6.1出错
  • 解决操作缓冲池重复添加的问题
  • linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹
  • 更改阿里云域名解析台里某个域名绑定的IP之后不能解析到新IP
  • 区块链承兑系统是怎样的?
  • hexo+github搭建个人博客
  • python3.6+scrapy+mysql 爬虫实战
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Akka系列(七):Actor持久化之Akka persistence
  • Android优雅地处理按钮重复点击
  • mysql中InnoDB引擎中页的概念
  • SpringCloud集成分布式事务LCN (一)
  • sublime配置文件
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue:响应原理
  • 测试开发系类之接口自动化测试
  • 最简单的无缝轮播
  • Java总结 - String - 这篇请使劲喷我
  • Linux权限管理(week1_day5)--技术流ken
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (4)(4.6) Triducer
  • (C语言)fgets与fputs函数详解
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)关于多人操作数据的处理策略
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET的微型Web框架 Nancy
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net反混淆脱壳工具de4dot的使用
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @Async注解的坑,小心
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [2023-年度总结]凡是过往,皆为序章