批量监控关键业务站点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)

大家都在看

  • 程序员高考试题,绝密,211,985高校等着你

    这是一个程序员的伤心故事,大家看看如果能做就做,不能做就先哭了在做。 正确答案是:BBAAABACCCAC。 欢迎大家访问机器矩阵java学习论坛:liandyao.com ; O…

    Java 2023年6月9日
    0160
  • 关系数据库元数据处理类(一) 创建元数据实体

    1 /// 2 /// 数据库 3 /// 4 public class Database 5 { 6 public string Name { get; set; } 7 } 1…

    Java 2023年6月5日
    061
  • 7.Hystrix缓存特性及请求特性

    Hystrix请求缓存 Hystrix支持将请求结果进行本地缓存 通过实现getCacheKey方法来判断是否取出缓存 请求缓存要求请求必须在同一个上下文 可以用过RequestC…

    Java 2023年6月8日
    052
  • 商品批次号解析工具类

    背景:商品的批次号规则为恒定为八位日期数字”yyyyMMdd”,如”20200520″,代表着该商品是2020年05月20日生产的,…

    Java 2023年6月8日
    073
  • leetcode 572. Subtree of Another Tree 另一棵树的子树 (简单)

    一、题目大意 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 fa…

    Java 2023年6月14日
    080
  • Nginx中proxy_pass末尾加斜杠的区别

    事实上,标题这种描不太准确,准确来说: 当proxy_pass有URI参数时,会将用户访问路径中,location匹配到的部分,替换成proxy_pass的URI部分。 当prox…

    Java 2023年5月30日
    064
  • 22.线程自解锁

    代码结构比较复杂的情况下,手动加锁,解锁,可能会有所遗漏。 这种情况下,推荐使用自解锁(自解锁在构造的时候lock,在析构的时候unlock)(对象在超出作用域时会执行析构) 自解…

    Java 2023年5月29日
    063
  • 阿里的秒杀系统是怎么设计的?

    我之前写过一个秒杀系统的文章不过有些许瑕疵,所以我准备在之前的基础上进行二次创作,不过让我决心二创秒杀系统的原因是我最近面试了很多读者,动不动就是秒杀系统把我整蒙蔽了,我懵的主要是…

    Java 2023年6月9日
    095
  • 我们为什么要在Android中使用RxJava

    本文翻译来自–>Why should we use RxJava on Android另外: 微凉一季再另外: 微凉一季 感觉RxJava近期风生水起,不学习一下都不好意思了…

    Java 2023年5月29日
    083
  • RabbitMQ——整合SpringAMQP

    一。什么是Spring-AMQP? 1.Spring框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的POJO(Plain Ordinary Jav…

    Java 2023年5月30日
    074
  • javax.servlet.annotation不存在

    我定义了以下一些导入,如下图所示。 我想知道如何消除 “package javax.servlet.<a title=”annotation” href=”https://w…

    Java 2023年5月29日
    051
  • Spring Cloud Alibaba系列之分布式服务组件Dubbo

    本博客的例子代码可以在github找到下载链接:代码下载 SpringBoot、SpringCloud Alibaba系列博客专栏:链接 1、分布式理论 1.1、分布式基本定义 《…

    Java 2023年5月30日
    077
  • 3、元注解,自定义注解

    元注解 元注解的作用就是负责注解其他注解Java 定义了4 个标准的meta-annotation 类型, 他们被用来提供对其他annotation 类型作说明 这些类型和它们所支…

    Java 2023年6月8日
    078
  • 网易、涂鸦经典面试题之有什么思路能提高你写的代码的维护性

    曾经在一次网易的面试中被问到一个这样的开放性问题:谈谈怎么样的手段能提高你的代码的可维护性。首次听到这个问题记得当时回答的很片面,只是回答了类似用MQ技术起到解耦,这篇文章是我从 …

    Java 2023年6月15日
    072
  • Git生成ssh keys加密算法ed25519

    1:桌面右击后出现Git push here点击进入直接输入以下命令 ①:ssh-keygen -t ed25519 -f my_github_ed25519 -C “…

    Java 2023年6月9日
    060
  • 1

    1 posted @2022-09-25 23:44 山海自有归期 阅读(21 ) 评论() 编辑 Original: https://www.cnblogs.com/ljq202…

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