zabbix监控多个nginx vhost网站状态码
需求
假设一台服务器运行了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
例如下面:
- location /status {
- vhost_traffic_status_display;
- vhost_traffic_status_display_format html;
- allow 192.168.80.0/28;
- allow 149.60.60.0/24;
- deny all;
- }
- }
创建zabbix模板
在zabbix点配置>模板>创建模板>自动发现规则>创建发现规则
创建监控项原型
创建图形原型
zabbix_agent被控端添加
- UserParameter=nginx.response[*],/usr/bin/python3 /etc/zabbix/zabbix_agentd.d/GetNginxStatus.py http://192.168.80.10/status/format/json $1
- 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代码内容如下
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # @Site:
- # @File: GetJson.py
- # @Author: GuoYabin
- # @E-mail: hbbdgyb@163.com
- # @Time: 12月 13, 2019
- import requests
- import sys
- import json
- from datetime import datetime
- url = sys.argv[1].strip()
- res = requests.get(url)
- d = json.loads(res.text)
- serverZones = d['serverZones']
- def connectionsinfo():
- connections=d['connections']
- for key,value in connections.items():
- print (key,value)
- def uptime():
- loadMsec = datetime.utcfromtimestamp(d['loadMsec'] / 1000)
- nowMsec = datetime.utcfromtimestamp(d['nowMsec'] / 1000)
- active = nowMsec - loadMsec
- print (active.total_seconds())
- def nginxversion():
- nginxversion = d['nginxVersion']
- print (nginxversion)
- def servername():
- for servername in serverZones:
- if servername == '*':
- print('\t\t{"{#SITEDOMAIN}":"'+servername+'"}')
- else:
- print('\t\t{"{#SITEDOMAIN}":"'+servername+'"},')
- def response(key1,key2):
- for servername,value in serverZones.items():
- for i,v in value.items():
- if servername == key2 and i == 'responses':
- print (v[key1])
- def jsonservername():
- print('{\n\t"data":[')
- servername()
- print('\t]\n}')
- if __name__ =='__main__':
- try:
- domain = sys.argv[2].strip()
- response('5xx', domain)
- except:
- jsonservername()
利用zabbix_get检查返回值
- zabbix_get命令是在server端用来检查agent端的一个命令,在添加完主机或者触发器后,不能正常获得数据,可以用zabbix_get来检查能否采集到数据,以便判断问题症结所在。
- zabbix_get 参数说明:
- -s --host: 指定客户端主机名或者IP
- -p --port:客户端端口,默认10050
- -I --source-address:指定源IP,写上zabbix server的ip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。
- -k --key:你想获取的key
- zabbix_sender是一个命令行工具,可以用来发送Zabbix服务器处理性能数据。该工具通常用于长时间运行的用户脚本,用于定期发送可用性和性能数据。
- 参数说明:
- -c --config <file> 配置文件绝对路径
- -z --zabbix-server <server> zabbix server的IP地址
- -p --port <server port> zabbix server端口.默认10051
- -s --host <hostname> 主机名,zabbix里面配置的主机名(不是服务器的hostname),不能使用ip地址
- -I --source-address <IP address> 源IP
- -k --key <key> 监控项的key
- -o --value <key value> key值
- -i --input-file <input file> 从文件里面读取hostname、key、value 一行为一条数据,使用空格作为分隔符,如果主机名带空格,那么请使用双引号包起来
- -T --with-timestamps 一行一条数据,空格作为分隔符: <hostname> <key> <timestamp> <value>,配合 --input-file option,timestamp为unix时间戳
- -r --real-time 将数据实时提交给服务器
- -v --verbose 详细模式, -vv 更详细
zabbix监控多个nginx vhost网站状态码的更多相关文章
- shell批量监控网站状态码
shell批量监控网站状态码脚本,使用curl很慢.等我学完其他方式,在来更新. #!/bin/bash #GuoYabin yuming=`/bin/cat yuming.txt` for i in ...
- Nginx code 常用状态码学习小结
最近了解下Nginx的Code状态码,在此简单总结下.一个http请求处理流程: 一个普通的http请求处理流程,如上图所示:A -> client端发起请求给nginxB -> ngin ...
- zabbix监控 linux/windows 主机tcp连接状态
更新内容:1).增加了对windows主机的tcp连接状态的监控2).修改linux主机的监控配置,使linux与windwos主机能够使用相同的模板tcp的连接状态对于监控服务器,尤其是Web服务器 ...
- 结合 Nginx 谈谈 Http 状态码
[Http状态码简介] [百度百科]HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到 RFC ...
- zabbix监控客户端本地网络的延时状态
配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加 Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对服务器 ...
- 统计nginx日志的状态码
日志格式 61.159.140.123 - - [23/Aug/2014:00:01:42 +0800] "GET /favicon.ico HTTP/1.1" 404 \ &qu ...
- nginx 直接返回状态码
server { listen 80; server_name service.aaa.com; location / { add_header Content-Type "text/pla ...
- 检测Nginx访问成功(状态码200)的IP及次数
cat access.log |awk '{print $1,$9}'|grep '200'|sort | uniq -c|awk '{print $2" "$1}'
- zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态
zabbix监控对象区分 使用SNMP监控交换 使用IPMI监控服务器硬件 使用Agent监控服务器 使用JMX监控JAVA SNMP监控流程 交换机上开启snmp 在zabbix上添加监控(设置SN ...
随机推荐
- 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 ...
- 【Java常用类】BigDecimal
BigDecimal 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中, 要求数字精度比较高,故用到java.math.BigDecimal类. BigDecimal类支 ...
- kali 2020.4 在安装typecho时,无法连接数据库的问题
问题与环境 linux的环境为 kali 2020.4 php版本为:PHP 7.4.11 安装的typecho版本为:typechov1.0 遇到的问题是:在typecho初始化时,数据库的信息都填 ...
- IPOPT安装
1.安装工具coinbrew 打开网页,找到以下网址 将网站中的内容全部复制到自己创建的coinbrew文件中,并且赋予权限 chmod u+x coinbrew 或者执行 git clone htt ...
- 『德不孤』Pytest框架 — 3、Pytest的基础说明
目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...
- MyCms 自媒体 CMS 系统 v2.6,SEO 优化升级
MyCms 是一款基于Laravel开发的开源免费的自媒体博客CMS系统,助力开发者知识技能变现. MyCms 基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们. V2.6 ...
- redis如何避免释放锁时把别人的锁释放掉
场景:假如线程A获取分布式锁进入方法A,由于某种原因Hang住了 到了指定时间释放锁,这个时候线程B进入得到锁,这个时候线程B很顺利完成业务逻辑操作,然后释放掉锁,就在这个时候线程A开始继续往下执行代 ...
- python-pip使用出现的问题
总结在pip过程中出现的问题 1.pip 安装指定数据源 默认情况下 pip 使用的是国外的镜像,在下载的时候速度非常慢 可以直接在 pip 命令中使用 -i 参数来指定镜像地址 例如:pip ins ...
- Android Native -- Message/Handler/Looper机制(应用篇)
⌈Android Native消息队列处理系列文章⌋ Android Native -- Message/Handler/Looper机制(原理篇) Android Native -- Message ...
- 不难懂------react---Immutable的基本使用
一.Immutable简介 Immutable Data 就是一旦创建,就不能再被更改的数据.对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象.Immut ...