批量监控关键业务站点nginx的http状态码

一些业务站点比较关键,比如API接口或者web站点,需要对出现的访问http状态码进行监控,比如监控10分钟以内,或者最近的1000次访问,当出现的50x状态码过多时触发告警,可以让一些问题暴露出来及时处理

1.编写脚本

cat /usr/local/zabbix_agents_3.2.0/scripts/web_nginx_code.sh
#!/bin/bash
function:monitor store nginx access error code

web_domain_discovery () {
WEB_DOMAIN=($(cat  /usr/local/zabbix_agents_3.2.0/scripts/web_site.txt|grep -v "^#"))
        printf '{\n'
        printf '\t"data":[\n'
for((i=0;ii))
    {
    num=$(echo $((${#WEB_DOMAIN[@]}-1)))
        if [ "$i" != ${num} ];
            then
        printf "\t\t{ \n"
        printf "\t\t\t\"{#SITENAME}\":\"${WEB_DOMAIN[$i]}\"},\n"
            else
                printf  "\t\t{ \n"
                printf  "\t\t\t\"{#SITENAME}\":\"${WEB_DOMAIN[$num]}\"}]}\n"
        fi
    }
}

统计nginx access log中的50x代码个数
error_code_count () {
    web_site=$1
    if [ ${web_site} == 'store.chinasoft.jp' ];then
        #/usr/bin/cat /data/www/logs/nginx_log/access/${web_site}.access.log |awk '{print $1" "$10" "$11}'|grep 'HTTP/1.1" 50'|uniq |wc -l
        tail -n 1000 /data/www/logs/nginx_log/access/${web_site}.access.log |awk '{print $1" "$10" "$11}'|grep 'HTTP/1.1" 50'|uniq |wc -l
        exit 0
    fi
    #/usr/bin/cat /data/www/logs/nginx_log/access/${web_site}_access.log |awk '{print $1" "$10" "$11}'|grep 'HTTP/1.1" 50'|uniq |wc -l
    tail -n 1000 /data/www/logs/nginx_log/access/${web_site}_access.log |awk '{print $1" "$10" "$11}'|grep 'HTTP/1.1" 50'|uniq |wc -l
}

last10_mins_error_code_count () {
    web_site=$1
    if [ ${web_site} == 'store.chinasoft.jp' ];then
        /usr/bin/cat /data/www/logs/nginx_log/access/${web_site}.access.log |awk '{print $1" "$10" "$11}'|grep 'HTTP/1.1" 50'|uniq |wc -l
        exit 0
    fi
    #/usr/bin/cat /data/www/logs/nginx_log/access/${web_site}_access.log |awk '{print $1" "$10" "$11}'|grep 'HTTP/1.1" 50'|uniq |wc -l
    # 统计最近 10 分钟的 50x 错误
    /usr/bin/tac /data/www/logs/nginx_log/access/${web_site}_access.log| awk 'BEGIN{ "date -d \"-10 minute\" +\"%H:%M:%S\"" | getline min10ago } { if (substr($4, 14) > min10ago) print $0;else exit }' | tac| awk '{print $1" "$10" "$11}' | grep 'HTTP/1.1" 50'|uniq|wc -l
}

case "$1" in
    web_domain_discovery)
        web_domain_discovery
    ;;
    error_code_count)
        error_code_count $2
    ;;
        last10_mins_error_code_count)
                last10_mins_error_code_count $2
        ;;
*)

echo "Usage:$0 {web_web_discovery|error_code_count|last10_mins_error_code_count}"
;;
esac

站点的读取文件格式

cat /usr/local/zabbix_agents_3.2.0/scripts/web_site.txt
account.chinasoft.cn
distriapi.chinasoft.cn
innerapi.chinasoft.cn
masterapi.chinasoft.cn
mm.chinasoft.cn
userapi.chinasoft.cn

2.编写监控配置

cat /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd/web_nginx_code_discovery.conf
UserParameter=web.domain.discovery,/usr/local/zabbix_agents_3.2.0/scripts/web_nginx_code.sh web_domain_discovery
UserParameter=web.domain.code[*],/usr/local/zabbix_agents_3.2.0/scripts/web_nginx_code.sh error_code_count $1
UserParameter=web.domain.10mins.code[*],/usr/local/zabbix_agents_3.2.0/scripts/web_nginx_code.sh last10_mins_error_code_count $1

3.创建监控项

name和key都是:web.domain.discovery

批量监控关键业务站点nginx的http状态码

监控项

10分钟内的状态码

name: web.domain.10mins.code ON $1

key: web.domain.10mins.code[{#SITENAME},]

批量监控关键业务站点nginx的http状态码

监控项

name:web.domain.code ON $1

key: web.domain.code[{#SITENAME},]

批量监控关键业务站点nginx的http状态码

触发器

name: {#SITENAME} last 10 minutes nginx 50x great than 10

表达式

{Template alisz nginx site access error_code count:web.domain.10mins.code[{#SITENAME},].last()}>50

10分钟超过50个50x就报警

批量监控关键业务站点nginx的http状态码

最近的1000个访问超过200触发报警

name:{#SITENAME} nginx 50x code great than 20%

触发器:

{Template alisz nginx site access error_code count:web.domain.code[{#SITENAME},].last()}>200

批量监控关键业务站点nginx的http状态码

Original: https://www.cnblogs.com/reblue520/p/14813336.html
Author: reblue520
Title: 批量监控关键业务站点nginx的http状态码

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544143/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringCloudAlibaba项目之OpenFeign远程调用

    SpringCloudAlibaba随笔目录 一、SpringCloudAlibaba项目之父工程搭建 二、 SpringCloudAlibaba项目之Nacos搭建及服务注册 三…

    Java 2023年6月5日
    083
  • 【声音工厂】微信小程序开发记录 为电台开发的微信小程序成品介绍

    经过两周的时间,完成了微信小程序的开发 posted @2020-03-14 18:35 yinder 阅读(247 ) 评论() 编辑 Original: https://www…

    Java 2023年6月8日
    089
  • Nginx知识

    OpenResty最佳实践->location匹配规则传说中图片防盗链的爱恨情仇 ​ 『注:本文来自博客园”小溪的博客”,若非声明均为原创内容,请勿用…

    Java 2023年6月16日
    084
  • LEDE 虚拟机安装

    虽然我对路由器没什么兴趣,但是紧跟潮流还是有必要的,现在因为网络闭关锁国政策,很多人都想自己搭配一台私人的服务器,不想被商业公司左右数据安全。我感觉这个是一个商机,建议大家可以朝这…

    Java 2023年5月30日
    090
  • java守护线程与非守护线程的区别

    守护线程与用户线程 用户线程:我们平常创建的普通线程。 守护线程:用来服务于用户线程;不需要上层逻辑介入 java线程分为守护线程和非守护线程,当java jvm检测主线程或其他子…

    Java 2023年5月29日
    062
  • 00MQTT【目录】

    MQTT posted on2022-06-04 14:00 格物致知_Tony 阅读(11 ) 评论() 编辑 Original: https://www.cnblogs.com…

    Java 2023年5月29日
    079
  • 设计模式笔记(一):单例模式

    单例模式可以说是设计模式中最简单的设计模式之一了。顾名思义,单例模式指的是一个类只提供一个固定的单个实例,大家共用该实例。 单例模式代码实现步骤: 1、私有化类的构造方法 2、提供…

    Java 2023年6月6日
    067
  • 面向对象(中)

    面向对象(中) 方法的重载 重载:在同一个&am…

    Java 2023年6月6日
    079
  • Java常用的开发库推荐

    我是3y, 一年 CRUD 经验用十年的 markdown 程序员👨🏻‍💻 今天来讲讲来给大家聊聊开发提速的东西了: 工具包、 Lombok和 常用库 01、什么是工具包 基本上,…

    Java 2023年6月9日
    0111
  • flink dataStream count

    背景: 批(有界流)模式下,需要统计处理总数据条数如果使用 DataSetApi,可通过 .count()直接获取:本文主要描述 DataStream如何获取总条数 思路: 当 D…

    Java 2023年6月16日
    090
  • STM32F103智能配网mqtt协议EMQ安卓App远程控制LED采集温湿度ESP8266

    方式1:ESP-Touch1,AT+CWMODE=1 !!配置WiFi模组工作模式为单STA模式 2,AT+CWSTARTSMART=3 !!支持ESP-Touch和Airkiss…

    Java 2023年5月30日
    089
  • maven安装及导入本地jar包

    一、maven的安装方法 1.去maven官网下载适合的版本 下载地址: 官方下载地址 2.下载后解压到任意目录 3.配置系统环境变量 M2_HOME ,值为maven解压后的目录…

    Java 2023年6月15日
    099
  • Spring cloud(摘自纯洁的微笑)

    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、…

    Java 2023年6月7日
    041
  • 引路蜂地图API:Gis.Location包定义

    本包定义了GPS接收器一个通用接口,并提供对NMEA 2.0数据的解码方法。在Java ME平台上对JSR179 进行了封装. Coordinates 定义地址经纬度坐标。 Loc…

    Java 2023年5月30日
    0109
  • CocosCreator中worldMatrix到底是什么(中)

    Cocos Creator 中 _worldMatrix 到底是什么(中) 1. 中篇摘要 在上篇中主要做了三件事 简单表述了矩阵的基本知识,以及需要涉及到的三角函数知识 推导了图…

    Java 2023年6月13日
    084
  • 修改java版本环境变量不生效

    修改java版本环境变量不生效 起因 先上图说明问题(电脑含有多个java版本,因为需要维护很老的项目,需要切换至以前的java版本,当然也可以不用修改环境变量,直接指定) 环境变…

    Java 2023年6月5日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球