Zabbix5通过脚本自定义Nginx监控

news2024/11/15 9:17:29

1、客户端配置

1.1、nginx开启nginx status

使用 zabbix 监控 nginx,首先 nginx 需要配置 ngx_status,nginx.conf加入以下配置,并重启Nginx或reload

location /ngx_status

    {

        stub_status on;

        access_log off;

        #allow 127.0.0.1;

        #deny all;

    }

nginx status 信息

[fieldyang@www nginx]$ curl http://127.0.0.1:1080/ngx_status

Active connections: 7

server accepts handled requests

 7493 7493 7511

Reading: 0 Writing: 6 Waiting: 1

说明

active connections – 活跃的连接数量

server accepts handled requests — 总共处理了7493 个连接 , 成功创建7493 次握手, 总共处理了7511个请求

reading — 读取客户端的连接数.

writing — 响应数据到客户端的数量

waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

1.2、zabbix 客户端配置

以上为 nginx 性能计数,除了监控以上数据,还需要监控 nginx 进程状态,并且配置触发器!

1.2.1、编写客户端脚本 ngx_status.sh

如脚本无法使用,请检查对应路径和相关变量

[fieldyang@www scripts]$ pwd

/usr/lib/zabbix/scripts

[fieldyang@www scripts]$ cat >ngx_status.sh

#!/bin/bash

# 功能:zabbix 监控 nginx 性能、进程状态、返回码统计

# 说明:需要配置在被监控端,否则 ping 检测将会得到不符合预期的结果

HOST="127.0.0.1"

PORT="1080"

lastmin=`date +"%Y:%H:%M" -d "1 min ago"`

code=$2

# 检测 nginx 进程是否存在

function ping {

/sbin/pidof nginx | wc -l

}

# 检测 nginx 性能

function active {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'

}

function reading {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'

}

function writing {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'

}

function waiting {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'

}

function accepts {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'

}

function handled {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'

}

function requests {

curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'

}

function status_sum {

sum=`grep " ${code}" /var/log/nginx/access.log |grep ${lastmin}|awk '{sum+=1}END{ print sum}'`

if [ "$sum" = "" ]

then

       echo 0

else

       echo $sum

fi

}

# 执行 function

if [ $# -gt 1 ]

then

        status_sum

else

        $1

fi

[fieldyang@www scripts]$ chmod +x ngx_status.sh

1.2.2、zabbix 客户端文件配置

将自定义的 UserParameter 加入配置文件,然后重启 agentd,如下:

[fieldyang@www scripts]$ cat /etc/zabbix/zabbix_agentd.conf|grep ^UserParameter

UserParameter=nginx.status[*],/usr/lib/zabbix/scripts/ngx_status.sh $1 $2

[fieldyang@www scripts]$ killall zabbix_agentd

[fieldyang@www scripts]$ ps -ef|grep zabbix_agentd

fieldyang      69914  57012  0 13:52 pts/0    00:00:00 grep --color=auto zabbix_agentd

[fieldyang@www scripts]$ /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

[fieldyang@www scripts]$ ps -ef|grep zabbix_agentd

zabbix    69918      1  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

zabbix    69919  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]

zabbix    69920  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]

zabbix    69921  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]

zabbix    69922  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]

zabbix    69923  69918  0 13:52 ?        00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]

fieldyang      69928  57012  0 13:52 pts/0    00:00:00 grep --color=auto zabbix_agentd

[fieldyang@www scripts]$

1.2.3、zabbix_get 获取数据

通过此命令我们可以检测配置是否正确,如下命令 192.168.28.132 为zabbix-agent IP地址

Ps.推荐使用VMware安装 centos7最小系统,按需克隆主机,修改网卡配置的IP地址,重启network,便可以拷贝多台机器完成zabbix 学习。

[fieldyang@www network-scripts]$ cat  /etc/sysconfig/network-scripts/ifcfg-ens33|grep IPADDR

IPADDR=192.168.28.132

[fieldyang@www scripts]$ for i in ping active reading writing waiting accepts handled requests status_sum

> do

> if [ $i = "status_sum" ]

> then

> for j in 200 301 302 403 404 500

> do

> zabbix_get -s 192.168.28.132 -k nginx.status[$i,$j] |xargs |xargs echo "${i}_${j}:"

> done

> else

> zabbix_get -s 192.168.28.132 -k nginx.status[$i] |xargs |xargs echo "$i:"

> fi

> done

ping: 1

active: 1

reading: 0

writing: 1

waiting: 0

accepts: 141612

handled: 141613

requests: 141218

status_sum_200: 124

status_sum_301: 139

status_sum_302: 99

status_sum_403: 0

status_sum_404: 0

status_sum_500: 0

[fieldyang@www scripts]$

zabbix server 服务器上执行如上命令, 192.168.28.132 agentd 机器

2、zabbix web配置

2.1、创建“Template App NGINX”模板、应用集Nginx (略)

配置-->模板-->创建模板

配置-->模板-->“Template App NGINX”-->应用集-->创建应用集

2.2、创建监控项

配置-->模板-->“Template App NGINX”-->监控项-->创建监控项

注意:自定义的脚本只适合以下监控项,其他需求请按需修改脚本。

2.3、创建触发器

配置-->模板-->“Template App NGINX”-->触发器-->创建触发器

2.4、创建图形

配置-->模板-->“Template App NGINX”-->图形-->创建图形

2.5、创建触发器告警动作

配置-->动作-->左上角选择 触发器动作-->创建动作

2.6、链接模板

配置-->主机-->点击 nginx 所在服务器-->点击 模板-->链接新模板 输入"Template App NGINX"->Add->最后点击 更新。

3、功能验证

测试可以使用 ab工具模拟访问

ab -n 4000 -c 15 http://192.168.28.132:1080/ngx_status >>1.txt

或以下脚本

for i in `seq -w 1 9999`

do

curl http://192.168.28.132:1080/ngx_status>>1.txt

done

3.1、查看最新数据

监测-->最新数据

3.2、查看图形展示

监测-->主机-->选择nginx主机-->图形-->过滤相关图形

3.3、测试触发器动作。

模拟下线nginx

[fieldyang@www ~]$ service nginx stop

Redirecting to /bin/systemctl stop nginx.service

[fieldyang@www]~]$

在问题列表可以看到已经触发问题,并下发告警邮件。

重新上线nginx,可以看到问题已解决,并下发恢复邮件

4、导出模板

实际使用中,可以在测试环境中调试好模板,然后再导入到生产环境中

导出

配置-->模板-->选中要导出的模板-->导出

导入

配置-->模板-->选中要导入的模板-->导入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言---初识结构体

1、结构体的声明 1.1、结构的基础知识 结构是一些值得集合,这些值称为成员变量。结构的每一个成员可以是不同类型的变量。 char、short、int、long、long、float、double是内置类型。 比如说,我们想要描述单一的成绩,身高我们直接用int类型就…

FPGA时序约束--基础理论篇

FPGA开发过程中,离不开时序约束,那么时序约束是什么?简单点说,FPGA芯片中的逻辑电路,从输入到输出所需要的时间,这个时间必须在设定的时钟周期内完成,更详细一点,即需要满足建立和保…

MokaPeople 上线 300 天:主打管理者视角和全员体验

当前,我们是身处的时代已从 VUCA 向 BANI 转变,在政策、经济和技术等多方面因素的驱动下,数字化转型已成为企业发展的必然趋势。 尤其在当下对于人才环境中的竞争态势也不得不迫使 HR 转型也进入了关键性的时刻。 6 月 2 日,国内…

TCP协议的相关特性

目录 TCP特点概要 TCP协议段格式 TCP原理 确认应答 超时重传 连接管理(三次握手,四次挥手) 三次握手 四次挥手 流水线传输 滑动窗口 滑动窗口ACK丢失 滑动窗口数据报丢失 流量控制 拥塞控制 延迟应答 停止等待协议 回退N帧协议 面向字节流 缓冲区 粘包问题 TCP异常 &…

手撕源码(三)ArrayList(JDK8)

目录 1.使用示例2.new ArrayList<>() 解析2.1 空列表2.2 默认大小的共享数组实例2.3 构造方法 3.new ArrayList<>(initialCapacity) 解析3.1 指定大小的共享数组实例3.2 构造方法 4.add() 解析4.1 容量大小4.2 add() 解析4.3 ensureCapacityInternal() 解析1&#…

【吴恩达GANs】【C1W4】Conditional Controllabel Generation

视频链接&#xff1a;吴恩达DeepLearning.ai之生成对抗网络&#xff08;GANS&#xff09;专业化〔Andrew Ng〕 4-2 Conditional generation intuition Unconditional Generation&#xff1a;从随机类中得到输出&#xff0c;每次输出的类也都是随机的&#xff0c;无法得到指定…

Redis和Mysql数据同步方案---延迟双删

一般场景下数据库和redis的同步机制&#xff1a; 针对有请求来读取数据库的场景&#xff1a; 但是如果有想要修改数据库内容的场景该怎么保持同步呢&#xff1f; 在我们访问redis时&#xff0c;redis中的数据可能不是热点数据&#xff0c;即此时数据库的更新操作已经完成&…

chatgpt赋能python:Python几行代码:打造高效SEO工具

Python几行代码&#xff1a;打造高效SEO工具 Python作为一种易用、可靠的编程语言&#xff0c;在数据处理、网页爬取等方面都有广泛应用。而对于SEO工作者来说&#xff0c;利用Python写几行简单的代码&#xff0c;可以帮助我们更高效地分析网站数据、监控关键词排名、抓取竞争…

测试工程师:“ 这锅我不背 ” ,如何回怼开发....?

前言 在一个周末的早餐我被同事小周叫出去跑步&#xff0c;本想睡个懒觉&#xff0c;但是看他情绪不太稳定的样子&#xff0c;无奈艰难爬起陪他去跑步。 只见她气冲冲的对着河边大喊&#xff1a;真是冤枉啊&#xff01;!&#xff01; 原来是在工作中被莫名其妙背锅&#xff0…

计算机存储体系

目录 一、基本概念 二、主存储器的基本组成 三、SRAM和DRAM 四、只读存储器ROM 五、主存储器与CPU的连接 六、双端口RAM和多模块存储器 七、磁盘存储器 八、固态硬盘SSD 九、Cache高速缓冲存储器 十、虚拟存储系统 一、基本概念 存储器的层次结构 主存——辅存&…

1_5 光流法计算VO(optical_flow)

采用特征点法做VO存在耗时较大的问题&#xff0c;一般耗时情况&#xff1a;如下 (1) 在图像中提取特征点并计算特征描述&#xff0c; 非常耗时 ~10ms ORB&#xff0c;shift耗时更多&#xff1b; (2) 在不同图像中寻找特征匹配&#xff0c; 非常耗时 …

centos上搭建以太坊私有链

第一步 安装go语言环境 root用户下新建一个soft目录(相关目录可以随意) 去golang官网找到链接&#xff0c;在soft目录下下载golang压缩包 wget --no-check-certificate https://go.dev/dl/go1.20.4.linux-amd64.tar.gz其中如果出现Unable to establish SSL connection.&am…

Redis持久化、主从与哨兵架构-02

RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c; Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置&#xff0c; 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时&#xff0c; 自动保存一次 数据集…

QLoRA | 48G内存训练24小时,改进版4-bit量化技术微调650亿参数的模型达到chatgpt99.3%的效果

一、概述 title&#xff1a;QLORA: Efficient Finetuning of Quantized LLMs 论文地址&#xff1a;https://arxiv.org/pdf/2305.14314.pdf 代码&#xff1a;GitHub - artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs and https://github.com/TimDettmers/bi…

【搭建服务器】Python一行命令搭建HTTP服务器并外网访问

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言&#xff0c;其语法简单且语句清晰&#xff0c;而且python有…

Jetson AGX 安装 VScode 教程,适用于所有系统安装旧版本 VScode

最近使用Jetson AGX做项目&#xff0c;系统为Jetpack4.6&#xff0c;Ubuntu18.04版本&#xff0c;想装个VScode编辑代码&#xff0c;但是设备的内核是ARM 64架构&#xff0c;搜出来的是arrch64 直接在VScode官网上下载的arm版本deb安装包&#xff0c;无法安装&#xff0c;经过…

论文学习笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

论文阅读&#xff1a;Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 今天学习的论文是 ICCV 2021 的 best paper&#xff0c;Swin Transformer&#xff0c;可以说是 transformer 在 CV 领域的一篇里程碑式的工作。文章的标题是一种基于移动窗口的…

【LeetCode】14,最长公共前缀。 难度等级:简单。知识点:字符串的大小比较(比较 ascii码的大小)

文章目录 一、题目二、我的解法&#xff1a;双指针逐个字符比较三、巧妙解法&#xff1a;字符串的字典序比较四、知识点&#xff1a;字符串的字典序比较 一、题目 二、我的解法&#xff1a;双指针逐个字符比较 双指针逐个字符比较是最容易想到的方法&#xff0c;但由于测试用例…

torch_scatter.scatter()的使用方法

学习目标&#xff1a; 在学习PyG时&#xff0c;遇到了 scatter 这个函数&#xff0c;经过学习加上自身的理解&#xff0c;记录如下以备复习 学习内容&#xff1a; src&#xff1a;表示输入的tensor&#xff0c;接下来被处理&#xff1b;index&#xff1a;表示tensor对应的索引…

【C++】C++11

文章目录 1、C11的简介2、 统一的列表初始化2-1、&#xff5b;&#xff5d;初始化2-2、std::initializer_list 3、声明3-1、auto3-2、decltype3-3、nullptr 4、范围for循环5、智能指针6、STL中一些变化6-1、STL新容器和容器新方法6-2、final和override 7、右值引用和移动语义7-…