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: [email protected]
# @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自动发现规则 灵活运用

  

原文地址:https://www.cnblogs.com/guoyabin/p/12074657.html

时间: 2024-10-08 06:04:55

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

zabbix监控mysql,nginx

刚开说mysql监控的时候 很容易遇到问题 而问题大部分出现在mysql的配置上面,看到我下面做的希望对你们有所帮助,哈哈 不聊了 好好学习 现在开始 1.创建mysql用户[[email protected] ]# groupadd mysql[[email protected] ]# mkdir -pv /data/mysql[[email protected] ]# useradd -r -g mysql -d /data/mysql/ -s /sbin/nologin mysql2.获取

Zabbix监控Tomcat及Nginx

注:本篇博文是基于部署zabbix监控服务器的环境进行的.这里将开启一台client服务器(被监控端)用于测试. 博文大纲:一.监控Tomcat二.监控Nginx服务器 一.监控Tomcat 监控Tomcat需要用到zabbix_java_gateway这个组件(在zabbix2.0引入的功能),顾名思义就是:Java网关,类似于agentd,但是只用于Java方面.需要注意的是,它只能主动去获取数据,而不能被动获取数据.它的数据最终会提交到server端或proxy. 如果需要开启监控Tomc

zabbix监控系统中nginx的配置

http 段的配置: include    mime.types; default_type  application/octet-stream; log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '           '$status $body_bytes_sent "$http_referer" '           '"$http_user_agent

shell检测网站状态码和访问时间

[[email protected] script]# cat test_site.sh  #!/bin/bash      SITES=("http://10.0.0.2" "http://www.163.com") # 要监控的网站   NOTICE_EMAIL='[email protected]'                                 # 管理员电邮   DATE=$(date +%Y-%m-%d' '%H:%M:%S) funct

Zabbix监控平台(三)生产环境案例

Zabbix监控平台(三)生产环境案例 一,Zabbix生产环境监测案例概述 1.1 项目规划 1.2 SNMP监控流程 1.3 IPMI 1.4 JMX(使用Zabbix Java Gateway代理) 1.5 实战监控Nginx,Apache,MySQL,PHP-fpm 1.6 Zabbix的Web监测 二,Zabbix监控MySQL数据库操作实战 2.1 编写监控脚本 2.2 在zabbix-agent端创建自定义键值配置文件 2.3 在zabbix-server端测试键值 2.4 在za

使用zabbix监控web

Web监控 创建web监控需要先定义一个web方案(scenarios) web方案包括一个或多个HTTP请求或"步骤(step)" 步骤(step)的执行过程按照预先定义的顺序进行执行 通过web监控可实获取如下信息 整个web方案中所有的步骤的平均下载速度 失败的步骤号 失败的报错信息 在web方案的具体步骤中,可以按需使用如下信息 该步骤的下载速度 回应时间 回应状态码 Zabbix可以检测获取到的HTML页面中是否包含预设的字符 串,也可以实现登录和页面点击 创建web监控 示

线上Nginx状态码为400解决

今天某公司对接我公司的一个api业务.当天下午客户在自己的线上业务平台下发送了第一个POST请求,结果我方在前端Nginx收到了状态码为400的响应.之前没有遇到过,google后得出结论,怀疑是客户系统在发送HTTP请求时,发送的请求头(Request Header)太大导致的.又想到客户公司是做安全的公司.所以在请求其他系统的时候,会多加一些加密参数到http请求头中. Nginx的http请求头由下面参数控制: client_header_buffer_size    默认  1k; la

http 状态码 码表

HTTP状态码详解 - 查询资料 1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束.由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应.这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动. 100 Continue 服务器已经接收到请求头,并且客户端应继续发送请求主体(在需要发送身体的请求的情况下:例如,POST请求),或者如果请求已经完成,

zabbix监控nginx性能状态

nginx在生产环境中的应用越来越广泛,所以需要对nginx的性能状态做一些监控,来发现出来出现的问题.nginx处理流程图具体如下: 注释:Accepts(接受).Handled(已处理).Requests(请求数)是一直在增加的计数器.Active(活跃).Waiting(等待).Reading(读).Writing(写)随着请求量而增减 名称 描述 指标类型 Accepts(接受) NGINX 所接受的客户端连接数 资源: 功能 Handled(已处理) 成功的客户端连接数 资源: 功能