需求

假设一台服务器运行了N个vhost网站,如何确定在大流量并发时候找到是哪个网站的问题呢?

这似乎是每个运维都会遇到的问题,方法有很多比如:1、看nginx日志大小确定访问量。2、通过前端代理确定访问量。3、通过防火墙,waf等工具确定访问量。4、通过elk日志,splunk日志分析系统等等

这里讲一个nginx的模块利用方法:Nginx Vhost Traffic Status

添加nginx模块

添加nginx模块的方法有很多,比如  https://blog.csdn.net/zyw_java/article/details/80558320

注意生产环境不要覆盖make install

最后安装完大概是这个样子,我们要手动取得里面5xx错误条数,进行监控出图。我来做一块砖,给大家一个思路。其他的功能实现照葫芦画瓢就行。

获取他的JSON格式文件,用python解析并汇报到zabbix里

JSON路径为:http://域名或者ip/status/format/json

为了安全起见建议设置nginx的allow和deny

例如下面:

  1. location /status {
  2. vhost_traffic_status_display;
  3. vhost_traffic_status_display_format html;
  4. allow 192.168.80.0/28;
  5. allow 149.60.60.0/24;
  6. deny all;
  7. }
  8. }

 

创建zabbix模板

在zabbix点配置>模板>创建模板>自动发现规则>创建发现规则

创建监控项原型

创建图形原型

zabbix_agent被控端添加

  1. UserParameter=nginx.response[*],/usr/bin/python3 /etc/zabbix/zabbix_agentd.d/GetNginxStatus.py http://192.168.80.10/status/format/json $1
  2. UserParameter=nginx.site.discovery,/usr/bin/python3 /etc/zabbix/zabbix_agentd.d/GetNginxStatus.py http://192.168.80.10/status/format/json

这个变量学会了,可以在zabbix web界面传递变量,无需每台zabbix_agentd手动设置不同的url。

也可以传递其他变量,让他不仅仅只能监控5xx的错误信息。思路给你们了,具体实现看你能力了。

GetNginxStatus.py代码内容如下

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Site:
  4. # @File: GetJson.py
  5. # @Author: GuoYabin
  6. # @E-mail: hbbdgyb@163.com
  7. # @Time: 12月 13, 2019
  8. import requests
  9. import sys
  10. import json
  11. from datetime import datetime
  12.  
  13. url = sys.argv[1].strip()
  14. res = requests.get(url)
  15. d = json.loads(res.text)
  16. serverZones = d['serverZones']
  17.  
  18. def connectionsinfo():
  19. connections=d['connections']
  20. for key,value in connections.items():
  21. print (key,value)
  22.  
  23. def uptime():
  24. loadMsec = datetime.utcfromtimestamp(d['loadMsec'] / 1000)
  25. nowMsec = datetime.utcfromtimestamp(d['nowMsec'] / 1000)
  26. active = nowMsec - loadMsec
  27. print (active.total_seconds())
  28.  
  29. def nginxversion():
  30. nginxversion = d['nginxVersion']
  31. print (nginxversion)
  32.  
  33. def servername():
  34. for servername in serverZones:
  35. if servername == '*':
  36. print('\t\t{"{#SITEDOMAIN}":"'+servername+'"}')
  37. else:
  38. print('\t\t{"{#SITEDOMAIN}":"'+servername+'"},')
  39.  
  40. def response(key1,key2):
  41. for servername,value in serverZones.items():
  42. for i,v in value.items():
  43. if servername == key2 and i == 'responses':
  44. print (v[key1])
  45.  
  46. def jsonservername():
  47. print('{\n\t"data":[')
  48. servername()
  49. print('\t]\n}')
  50.  
  51. if __name__ =='__main__':
  52. try:
  53. domain = sys.argv[2].strip()
  54. response('5xx', domain)
  55. except:
  56. jsonservername()

  

利用zabbix_get检查返回值

  1. zabbix_get命令是在server端用来检查agent端的一个命令,在添加完主机或者触发器后,不能正常获得数据,可以用zabbix_get来检查能否采集到数据,以便判断问题症结所在。
  2.  
  3. zabbix_get 参数说明:
  4. -s --host 指定客户端主机名或者IP
  5. -p --port:客户端端口,默认10050
  6. -I --source-address:指定源IP,写上zabbix serverip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。
  7. -k --key:你想获取的key
  8.  
  9. zabbix_sender是一个命令行工具,可以用来发送Zabbix服务器处理性能数据。该工具通常用于长时间运行的用户脚本,用于定期发送可用性和性能数据。
  10. 参数说明:
  11. -c --config <file> 配置文件绝对路径
  12. -z --zabbix-server <server> zabbix serverIP地址
  13. -p --port <server port> zabbix server端口.默认10051
  14. -s --host <hostname> 主机名,zabbix里面配置的主机名(不是服务器的hostname),不能使用ip地址
  15. -I --source-address <IP address> IP
  16. -k --key <key> 监控项的key
  17. -o --value <key value> key
  18. -i --input-file <input file> 从文件里面读取hostnamekeyvalue 一行为一条数据,使用空格作为分隔符,如果主机名带空格,那么请使用双引号包起来
  19. -T --with-timestamps 一行一条数据,空格作为分隔符: <hostname> <key> <timestamp> <value>,配合 --input-file optiontimestampunix时间戳
  20. -r --real-time 将数据实时提交给服务器
  21. -v --verbose 详细模式, -vv 更详细

  

 字数不多,句句精髓。希望大家能明白zabbix自动发现规则 灵活运用

  

zabbix监控多个nginx vhost网站状态码的更多相关文章

  1. shell批量监控网站状态码

    shell批量监控网站状态码脚本,使用curl很慢.等我学完其他方式,在来更新. #!/bin/bash #GuoYabin yuming=`/bin/cat yuming.txt` for i in ...

  2. Nginx code 常用状态码学习小结

    最近了解下Nginx的Code状态码,在此简单总结下.一个http请求处理流程: 一个普通的http请求处理流程,如上图所示:A -> client端发起请求给nginxB -> ngin ...

  3. zabbix监控 linux/windows 主机tcp连接状态

    更新内容:1).增加了对windows主机的tcp连接状态的监控2).修改linux主机的监控配置,使linux与windwos主机能够使用相同的模板tcp的连接状态对于监控服务器,尤其是Web服务器 ...

  4. 结合 Nginx 谈谈 Http 状态码

    [Http状态码简介] [百度百科]HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到 RFC ...

  5. zabbix监控客户端本地网络的延时状态

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对服务器 ...

  6. 统计nginx日志的状态码

    日志格式 61.159.140.123 - - [23/Aug/2014:00:01:42 +0800] "GET /favicon.ico HTTP/1.1" 404 \ &qu ...

  7. nginx 直接返回状态码

    server { listen 80; server_name service.aaa.com; location / { add_header Content-Type "text/pla ...

  8. 检测Nginx访问成功(状态码200)的IP及次数

    cat  access.log |awk '{print $1,$9}'|grep '200'|sort | uniq -c|awk '{print $2" "$1}'

  9. zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态

    zabbix监控对象区分 使用SNMP监控交换 使用IPMI监控服务器硬件 使用Agent监控服务器 使用JMX监控JAVA SNMP监控流程 交换机上开启snmp 在zabbix上添加监控(设置SN ...

随机推荐

  1. USB Tethering always displays grey when USB tethering type is Linux(EEM)

    USB Tethering always displays grey when USB tethering type is Linux(EEM) 1.Problem DESCRIPTION USB T ...

  2. 【Java常用类】BigDecimal

    BigDecimal 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中, 要求数字精度比较高,故用到java.math.BigDecimal类. BigDecimal类支 ...

  3. kali 2020.4 在安装typecho时,无法连接数据库的问题

    问题与环境 linux的环境为 kali 2020.4 php版本为:PHP 7.4.11 安装的typecho版本为:typechov1.0 遇到的问题是:在typecho初始化时,数据库的信息都填 ...

  4. IPOPT安装

    1.安装工具coinbrew 打开网页,找到以下网址 将网站中的内容全部复制到自己创建的coinbrew文件中,并且赋予权限 chmod u+x coinbrew 或者执行 git clone htt ...

  5. 『德不孤』Pytest框架 — 3、Pytest的基础说明

    目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...

  6. MyCms 自媒体 CMS 系统 v2.6,SEO 优化升级

    MyCms 是一款基于Laravel开发的开源免费的自媒体博客CMS系统,助力开发者知识技能变现. MyCms 基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们. V2.6 ...

  7. redis如何避免释放锁时把别人的锁释放掉

    场景:假如线程A获取分布式锁进入方法A,由于某种原因Hang住了 到了指定时间释放锁,这个时候线程B进入得到锁,这个时候线程B很顺利完成业务逻辑操作,然后释放掉锁,就在这个时候线程A开始继续往下执行代 ...

  8. python-pip使用出现的问题

    总结在pip过程中出现的问题 1.pip 安装指定数据源 默认情况下 pip 使用的是国外的镜像,在下载的时候速度非常慢 可以直接在 pip 命令中使用 -i 参数来指定镜像地址 例如:pip ins ...

  9. Android Native -- Message/Handler/Looper机制(应用篇)

    ⌈Android Native消息队列处理系列文章⌋ Android Native -- Message/Handler/Looper机制(原理篇) Android Native -- Message ...

  10. 不难懂------react---Immutable的基本使用

    一.Immutable简介 Immutable Data 就是一旦创建,就不能再被更改的数据.对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象.Immut ...