Linux分布式应用 Zabbix监控软件实例:监控NGINX的性能

news2024/9/22 13:25:51

 实例:监控NGINX的性能

1.安装(确认是否有状态统计模块)

yum -y install nginx

 

2.更改NGINX配置文件添加状态统计站点 

vim /etc/nginx/nginx.conf #主配置文件
vim /etc/nginx/conf.d/default.conf #子配置文件

location /nginx_status {
    stub_status on;  #开启状态统计
    access_log off;  #关闭访问日志
    allow 127.0.0.1; #只允许本机访问
    deny all;
}
systemctl restart nginx

 


测试 访问设置的网站 获取NGINX状态统计

curl -sL http://127.0.0.1/nginx_status

过滤结果获取需要的值

curl -sL http://127.0.0.1/nginx_status | awk '/Active connections/{print $3}'
#连接数
curl -sL http://127.0.0.1/nginx_status | awk 'NR==3 /{print $3}'
#请求总数

 

3.编写 nginx 监控脚本

mkdir -p /etc/zabbix/zabbix_shell/
cd /etc/zabbix/zabbix_shell/
vim zabbix_nginx.sh


#/bin/bash
#Description:Automated monitoring nginx performance and process nginx_status scripts

HOST="127.0.0.1"
PORT=80
stub_status="nginx_status"
COMMAND=$1

nginx_check() {
    if [ -f /sbin/pidof ]; then #如果有pidof命令用pidof统计NGINX进程,如果没有用ps aux统计NGINX进程
       /sbin/pidof nginx | wc -w #pidof查看NGINX进程pid,并且wc统计 
    else
       ps aux | grep -v "grep" | grep -c "nginx:"
    fi
}


#获取stub_status页面各项参数
nginx_active(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Active/ {print $NF}'
}

nginx_reading(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Reading/ {print $2}'
}

nginx_writing(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Writing/ {print $4}'
}

nginx_waiting(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk '/Waiting/ {print $6}'
}

nginx_accepts(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk 'NR==3 {print $1}'
}

nginx_handled(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk 'NR==3 {print $2}'
}

nginx_requests(){
    /usr/bin/curl -s "http://$HOST:$PORT/${stub_status}/" 2> /dev/null | awk 'NR==3 {print $3}'
}

#运行脚本跟上不同参数获取不同的统计值
case $COMMAND in
    check)
        nginx_check
        ;;
    active)
        nginx_active
        ;;
    reading)
        nginx_reading
        ;;
    writing)
        nginx_writing
        ;;
    waiting)
        nginx_waiting
        ;;
    accepts)
        nginx_accepts
        ;;
    handled)
        nginx_handled
        ;;
    requests)
        nginx_requests
        ;;
    *)
        echo $"USAGE:$0 {check|active|reading|writing|waiting|accepts|handled|requests}"
esac
chmod +x zabbix_nginx.sh

 

 4.客户端 在子配置文件夹中编写自定义模版

cd /etc/zabbix/zabbix_agent2.d/

vim nginx_status.conf
    # UserParameter=键值,脚本
    UserParameter=nginx_status[*],/etc/zabbix/zabbix_nginx.sh $1
    # [*] 用于传参    $1 对应[*]中的数值
systemctl restart zabbix-agent2

服务器端验证 

zabbix_get -s 192.168.80.102 -p 10050 -k nginx.status[check]
             #被监控主机的IP
zabbix_get -s 192.168.80.102 -p 10050 -k nginx.status[active]

 

5.添加自定义监控项模板

 ​​​创建模板

  1. 点击左边菜单栏【配置】中的【模板】,点击【创建模板】
    1. 【模板名称】设置成 Template NGINX Status
    2. 【可见的名称】设置成 Template NGINX Status
    3. 【群组】选择 Template
    4. 【描述】可自定义
    5. 点击 【添加】
  2. 此时就可在【名称】中输入 NGINX,点击应用,即可搜索到相应模板了

创建 2 个监控项

  1. 点击上方菜单栏【监控项】,点击【创建监控项】
    1. 【名称】设置成 number of nginx process ;number of active connections(NGINX进程存活情况与NGINX连接数)
    2. 【键值】设置成 nginx.status[check] ;nginx.status[active]
    3. 【更新间隔】设置成 10s
  2. 点击 【添加】(添加完成后可以再次进入,进行测试 端口10050)

创建触发器(nginx服务down了执行报警;超过10000个并发连接就执行报警)

  1. 点击上方菜单栏【触发器】,点击【创建触发器】,创建两个触发器
    1. 【名称】设置成 Nginx down on {HOST.NAME} 与 Too much active connections(NGINX服务器掉线,并发量过多)
    2. 【严重性】设置成 严重
    3. 【表达式】分别添加
      1. Nginx down on {HOST.NAME} 监控项】点击选择 number of nginx process ,【功能】选择 last(),【结果】选择 = 0,点击 【插入】
      2. Too much active connections 监控项】点击选择 number of active connections ,【功能】选择 last(),【结果】选择 > 10000,点击 【插入】
  2. 点击 【添加】

创建图形

  1. 点击上方菜单栏【图形】,点击【创建图形】
    1. 【名称】设置成 number of active connections 
    2. 【宽】、【高】可直接采用默认值
    3. 【监控项】点击添加勾选相关监控项 number of active connections ,【功能】选择 平均,其它可保持默认值
  2. 点击 【添加】

将主机与模板关联起来(一个主机可以关联多个模板)

  1. 点击左边菜单栏【配置】中的【主机】,点击你要关联的主机
  2. 点击上方菜单栏【模板】,【Link new tamplates】搜索 NGINX,选择 Template NGINX Status,点击【更新】
  3. 此时就点击【监测】中的【主机】,点击你关联主机的【图形】,即可查看到相关的监控项指标

添加邮箱报警(别忘了修改用户设置里的报警方式)

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

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

相关文章

Docker 常用指令集合,更换镜像(Ubantu)

1.更换镜像 先进入root用户 cat /etc/docker/daemon.json 查看有没有镜像创建目录,创建并编辑damon,json文件 mkdir -p /etc/docker vim /etc/docker/daemon.json# 填写内容 {"registry-mirrors": ["https://h5rurp1p.mirror.aliyuncs.com"] } 重新启…

在工作中保持情绪稳定:策略与实践

一、引言 近期发生的新闻热点再度引发公众对稳定情绪和心理健康的关注。在快节奏的现代生活中,我们常常面临各种压力和挑战,这可能会导致情绪波动,甚至影响我们的工作和生活质量。有时候我们遇到的最大的敌人,不是运气也不是能力…

Kubernetes的介绍(组件、Pod)和 安装使用

目录 Kubernetes是什么? 跟Kubernetes相似的软件: k8s里有哪些组件? 官方网站:Kubernetes 组件 | Kubernetes master上的Control Plane组件 什么是组件? Pod是什么呢? 1、kube-apiserver …

Oracle的CentOS安装

1.CentOS环境 阿里云轻量型服务器 2核-4g内存-80G系统盘 2.Oracle下载 Oracle下载 Oracle 数据库免费 CPU 限制 Oracle 数据库免费版自动将自身限制为两个内核进行处理。例如,在具有 2 个双核 CPU(四个核)的计算机上,如果大量…

【在线文件管理】响应式文件管理AngularJS

目录 1.功能展示截图 2.实现代码 2.1HTML页面代码 2.2后台代码 2.2.1项目结构 2.2.2项目代码 其他问题 1.功能展示截图 项目中需要用到文件管理来自由控制文件的上传、下载、删除等,就想到做一个简单的在线文件管理功能。 支持在线编辑: 2.实现代…

Java基础---SPI

目录 典型回答 从面向接口编程说起 接口位于调用方所在的包中 接口位于实现方所在的包中 注意 如何定义一个SPI SPI的实现原理 SPI的应用场景 典型回答 Java中区分 API 和 SPI,通俗的讲:API 和 SPI 都是相对的概念,他们的差别只在语义…

从零开始的Android逆向工程,开启对应用程序内部的探索之旅

Android逆向有那些发展方向 安全评估: 逆向工程可以帮助安全专家分析和评估Android应用程序的安全性。通过逆向应用程序,发现潜在的漏洞和安全隐患,并提供改进建议,以加强应用程序的安全性。 应用改进和优化: 逆向…

java编码转换过程

常见的JAVA程序包括以下类别: *直接在console上运行的类(包括可视化界面的类) *JSP代码类(注:JSP是Servlets类的变型) *Servelets类 *EJB类 *其它不可以直接运行的支持类 这些类文件中,都有可能含有中文字符串&…

KDE缺少全屏启动器的解决办法

我记得以前KDE是有一个全局搜索的启动起来着,但是重装了一次之后发现只剩下一个半屏的了。解决方案如下 sudo apt-get install plasma-widgets-addons

三菱PLC 红绿灯 步进指令 STL

自己写的红绿灯。 有启动、停止两个按钮。 南北通行4S,东西通行5S。 链接: https://caiyun.139.com/m/i?0E5CJEoVGt4D0 提取码:kVOA SET(启动,启动标志); RST(启动,停止标志); SET(停止,停止标志); RST(停止,启动标志); RST(LDP(TRUE,停止),T0); RST(LDP(TRUE…

范德波尔方程可视化

Van der Pol方程如下所示 d x d t y d y d t − x ( 1 − x 2 ) y \begin{equation} \begin{aligned} \frac{dx}{dt} & y \\ \frac{dy}{dt} & -x(1-x^2)y \end{aligned} \end{equation} dtdx​dtdy​​y−x(1−x2)y​​​ 相应的程序如下 为了观看长期趋势&…

VUE项目打包成apk

在我们的开发需求中,可能会遇到需要将vue项目中的H5代码打包成一个安卓的app,那么我为大家介绍一套保姆级的解决方案,看完你就会。 VUE HBuilder 1.准备工作: 需要下载一个HBuilder X编辑器,不过我相信大家身为前端…

最适合新手的SpringBoot+SSM项目《苍穹外卖》实战—(四)集成 Swagger

文章目录 Swagger 介绍集成 Swagger常用注解 黑马程序员最新Java项目实战《苍穹外卖》,最适合新手的SpringBootSSM的企业级Java项目实战。 Swagger 介绍 Swagger 是一个开源的 API 设计工具,它可以用于描述、设计、开发和测试 RESTful API。 它提供了一…

【C++11】 线程库的使用

文章目录 1 线程库的基本使用1.1 thread1.2 this_thread1.3 线程函数参数 2 mutex2.1 mutex的基本使用2.2 mutex系列锁2.3 lock_guard与unique_lock 3 原子操作4 条件变量 1 线程库的基本使用 1.1 thread 在C11之前,涉及到多线程问题,都是和平台相关的&…

研究一下「pnpm」这个神奇的包管理工具

最近搬砖 🧱 在搞前端项目部署优化 🎡,大部分项目的包管理工具都已经从 npm/yarn 替换成了 pnpm,整体来看无论是在 install 或是 build 阶段都提速了不少 🚀,借此时机,做个总结!&…

TypeScript 中【类型断言】得使用方法

类型断言的概念 有些时候开发者比TS本身更清楚当前的类型是什么&#xff0c;可以使用断言&#xff08;as&#xff09;让类型更加精确和具体。 类型断言&#xff08;Type Assertion&#xff09;表示可以用来手动指定一个值的类型。 类型断言语法&#xff1a; 值 as 类型 或 <…

vue3 实现多层级列表

文章目录 需求背景解决效果index.vue视频效果 需求背景 需要在统一个列表下&#xff0c;实现商品和规格得管理和联动 解决效果 index.vue <!--/*** author: liuk* date: 2023/7/7* describe: 商品列表 */--> <template><div class"container">&…

textarea自适应高度二——(设置隐藏div获取高度和仿element-ui组件)

文章目录 前言一、通过隐藏div的方式来设置文本域自适应高度1. 新增一个文本域样式一个的dom&#xff0c;但是里面的textarea改为div2. 隐藏div的class3.设置文本域高度的方法 二、仿element-ui组件设置textarea自适应高度1.element-ui中自适应效果2. 看源码&#xff0c;盘逻辑…

病毒专题丨 plugx病毒

一、病毒简述 之前分析了一下&#xff0c;分析的较为简单&#xff0c;这次又详细分析了一下。 文件名称 00fbfaf36114d3ff9e2c43885341f1c02fade82b49d1cf451bc756d992c84b06 文件格式 RAR 文件类型(Magic) RAR archive data, v5 文件大小 157.74KB SHA256 00fbfaf36114d3ff9e…

【编程中的数学】:冰雹猜想

今天和大家分享一个令人着迷的数学谜题——冰雹猜想。这个谜题曾在1976年引起轰动&#xff0c;当时《华盛顿邮报》以头版头条刊登了一篇关于它的报道。让我们一起探索这个数学游戏的奥秘。 70年代中期&#xff0c;美国一所名牌大学的校园内兴起了一种数学游戏&#xff0c;这个游…