Zabbix自定义监控内容部署+邮件报警+Zabbix自愈+Zabbix批量添加主机

news2024/9/21 3:20:06

一、自定义监控项

1.1自定义监控项原理

1)先明确获取监控指标数据的命令或脚本;

2)在被监控主机配置文件子目录(/etc/zabbix/zabbix_agent2.d/)中创建以.conf后缀的监控项配置文件,自定义获取监控指标数据的键值;

#监控项配置文件内容格式
UserParameter=键值名,获取值的命令/脚本路径

#用逗号隔开

3)在服务端Web管理页面中依次添加

模板 - 监控项 - 触发器 - 图形

4)关联监控主机和监控模板。

1.2 Zabbix监控Linux TCP连接状态实例

准备脚本

#!/bin/bash
tcp_conn_status(){
  TCP_STAT=$1
  ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
  TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
  if [ -z $TCP_NUM ];then
    TCP_NUM=0
  fi
  echo $TCP_NUM
}

main(){
 case $1 in
 tcp_status)
   tcp_conn_status $2;
   ;;
 esac
}

main $1 $2

测试脚本

[root@localhost zabbix]# bash tcp_status.sh  tcp_status ESTAB
2
[root@localhost zabbix]# bash tcp_status.sh  tcp_status TIME-WAIT
72
[root@localhost zabbix]# chmod +x  tcp_status.sh

修改客户端配置文件

[root@localhost etc]# vim zabbix_agentd.conf
UserParameter=linux_tcp_status[*],/usr/bin/bash  /data/tcp_status.sh $1 $2

重启服务

[root@localhost etc]# systemctl restart   zabbix-agent.service 
[root@localhost etc]# systemctl status   zabbix-agent.service 

在主服务器上验证

[root@localhost ~]#zabbix_get  -s 192.168.91.102 -p 10050 -k "linux_tcp_status["tcp_status","TIME-WAIT"]"
22
[root@localhost ~]#zabbix_get  -s 192.168.91.102 -p 10050 -k "linux_tcp_status["tcp_status","ESTAB"]"
4

在web界面建立模板

类型通过检测模式来更改(分为主动式和被动式),还有默认的Zabbix客户端类型

继续添加监控项

如果是类似监控项可以选择克隆修改名称和键值即可使用设置触发器 添加图形

1.3 Zabbix监控nginx实例

安装nginx

[root@localhost data]# yum install epel-release.noarch  -y
[root@localhost data]# yum install nginx -y 

修改配置文件

[root@localhost data]# vim /etc/nginx/nginx.conf
location /status {
         stub_status;
          }
[root@localhost data]# nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost data]# systemctl restart nginx

准备脚本

#!/bin/bash 


nginx_status_fun(){ #函数内容
	NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
	NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
	nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
        }
	nginx_reading(){ #获取nginx_reading状态的数量
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
       }
	nginx_writing(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
       }
	nginx_waiting(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
       }
	nginx_accepts(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
       }
	nginx_handled(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
       }
	nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
       }
  	case $NGINX_COMMAND in
		active)
			nginx_active;
			;;
		reading)
			nginx_reading;
			;;
		writing)
			nginx_writing;
			;;
		waiting)
			nginx_waiting;
			;;
		accepts)
			nginx_accepts;
			;;
		handled)
			nginx_handled;
			;;
		requests)
			nginx_requests;
		esac 
}

main(){ #主函数内容
	case $1 in #分支结构,用于判断用户的输入而进行响应的操作
		nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
			nginx_status_fun $2 $3;
			;;
		*) #其他的输入打印帮助信息
			echo $"Usage: $0 {nginx_status key}"
	esac #分支结束符
}

main $1 $2 $3

测试脚本

[root@localhost data]# bash nginx.sh nginx_status  80 active
1

修改zabbix_agent配置文件

[root@localhost ~]# vim  /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=nginx_status[*],/usr/bin/bash  /data/nginx.sh $1 $2 $3

在主服务器上测试

[root@localhost ~]#zabbix_get  -s 192.168.91.102 -p 10050 -k "nginx_status["nginx_status","80","active"]"
1

web上操作

1.4 snmp监控实例

下载snmp

[root@s1 ~]# yum -y install  net-snmp net-snmp-utils

修改配置文件

vim /etc/snmp/snmpd.conf
# sec.name source community
com2sec notConfigUser default 123456 #第一步:设置团体认密码,默认为public

s

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1 #创建一个view,并对其授权可访问的OID范围
view systemview included .1. #自定义授权,否则zabbix server无法获取数据


access notConfigGroup “” any noauth exact systemview none none #将组notConfigGroup关联至systemview 从而完成对组的授权

如果修改了密码需要在web上进行修改

主服务器进行测试

#在主服务器上 查看内储存
snmpwalk -v 2c  -c public   192.168.10.10  .1.3.6.1.4.1.2021.4.4.0

Tip:snmp信息解释

CPU 负载:
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3
内存使用:
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0
硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
系统信息:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
CPU 信息:
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0

web操作

修改时间不然时间太长

1.5 邮件报警思路

1)在服务端web管理页面 [管理]-[报警媒介类型]中设置 媒介类型和报警消息内容;

2)在[User Settings] - [Profile] - [报警媒介] 中设置 类型、收件人、启用时间、严重级别;

3)在[配置] - [动作] - [触发动作] 中添加报警触发条件和操作内容;

4)测试。

可以直接修改 Email

名称:可以自定义

SMTP服务器: 写你对应邮箱的服务器,生产环境需要询问管理邮箱服务的同事

设置 zabbix 的用户

触发器 要和 zabbix 的用户关联

设置动作

注意 计算方式 不要使用 和 和是且的意思 修改监控项

1.6 zabbix自愈

当zabbix 监控到指定的监控项异常的时候,通过指定的操作使故障自动恢复,通常是重启服务等一些简单的操作,也可以调用脚本执行比较复杂的操作。

设置监控项和触发器,新建动作,在触发条件里面添加操作,在远程主机通过zabbix 客户端执行命令

1.开启zabbix sudo权限
2.配置允许允许特殊字符
3.配置远程命令
4.验证和测试

zabbix agent需要开启远程命令执行

vim /etc/zabbix/zabbix_agentd.conf
73  EnableRemoteCommands=1 #开启远程执行命令
287 UnsafeUserParameters=1 #允许远程执行命令的时候使用不安全的参数(特殊字符串)
root@zabbix-node4:~# systemctl restart zabbix-ag

zabbix用户授权

如果zabbix agent是使用zabbix用户启动的,那么要在zabbix 用户授权使用特权命令,负责有些命令zabbix没有权限执行,会导致定义好的自治愈策略因为权限拒绝为执行失败

[root@localhost etc]# vim /etc/sudoers
zabbix  ALL=(ALL)       NOPASSWD: ALL

创建动作

配置--动作--创建动作

二、 Zabbix批量添加主机

通过API,实现完全自动化添加删除agent、关联模板等操作

获取token

需要指定用的账户名 密码和id

curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1
}' http://192.168.10.20/zabbix/api_jsonrpc.php

输出结果

[root@localhost ~]# curl -s -X POST -H 'Content-Type:application/json' -d '
> {
> "jsonrpc": "2.0",
> "method": "user.login",
> "params": {
> "user": "Admin",
> "password": "zabbix"
> },
> "id": 1
> }' http://192.168.10.20/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"548e1e120bad44c714c9d46df49c751c","id":1}
返回值是548e1e120bad44c714c9d46df49c751c

2.1 添加单台主机

2.1.1  不带proxy 代理


配置解释
通过API添加主机命令格式:
API添加主机为预先知道要添加的主机IP、预先安装并配置好zabbix agent、预先知道要关联的模板ID/组ID等信
息,然后同API提交请求添加
# curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create", #定义方法,N多钟
"params": {
"host": "API Add Host Test", #自定义添加后的agent的名称
"interfaces": [
{
"type": 1, #类型为1表示agent,2是SNMP,3是IMPI,4是JMX
"main": 1, #主要接口
"useip": 1, #0是使用DNS,1是使用IP地址
"ip": "172.31.0.24", #添加的zabbix agent的IP地址
"dns": "",
"port": "10050" #agent端口
}
],
"groups": [
{
"groupid": "2" #添加到的组的ID
}
],
"templates": [
{
"templateid": "10001" #关联的模板的ID
}
]
},
"auth": "977781251d1222ebead6f05da1a9ec4d",
"id": 1
}' http://172.31.0.101/zabbix/api_jsonrpc.php | python3 -m json.tool
输出结果
[root@localhost ~]# curl -s -X POST -H 'Content-Type:application/json' -d '
> {
>   "jsonrpc": "2.0",
>   "method": "host.create",
>   "params": {
>      "host": "192.168.91.102",
>      "interfaces": [
>        {
>          "type": 1,
>          "main": 1,
>          "useip": 1,
>          "ip": "192.168.91.102",
>          "dns": "",
>          "port": "10050"
>        }
>    ],
>    "groups": [
>       {
>          "groupid": "15"
>         }
>    ],
>    "templates": [
>    {
>         "templateid": "10273"
>    }
>    ]
> },
> "auth": "689e61ccf47b1e634f40b27454222272",
> "id": 1
> }' http://192.168.91.100/zabbix/api_jsonrpc.php | python -m json.tool
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "hostids": [
            "10292"
        ]
    }
}

2.1.2 使用代理

curl -s -X POST -H 'Content-Type:application/json' -d '
{
  "jsonrpc": "2.0",
  "method": "host.create",
  "params": {
     "host": "192.168.91.102",
     "proxy_hostid": "10274",
     "interfaces": [
       {
         "type": 1,
         "main": 1,
         "useip": 1,
         "ip": "192.168.91.102",
         "dns": "",
         "port": "10050"
       }
   ],
   "groups": [
      {
         "groupid": "15"
        }
   ],
   "templates": [
   {
        "templateid": "10273"
   }
   ]
},
"auth": "689e61ccf47b1e634f40b27454222272",
"id": 1
}' http://192.168.91.100/zabbix/api_jsonrpc.php | python -m json.tool

2.1.3 批量添加

cat zabbix-add-host.sh
#!/bin/bash
IP="
192.168.10.15
192.168.10.20
192.168.10.30
192.168.10.40
"


for  i   in   ${IP};do 
curl -s -X POST -H 'Content-Type:application/json' -d '
{
  "jsonrpc": "2.0",
  "method": "host.create",
  "params": {
     "host": "'${i}'",
     "interfaces": [
       {
         "type": 1,
         "main": 1,
         "useip": 1,
         "ip": "'${i}'",
         "name": "ky36_'${i}'",
         "dns": "",
         "port": "10050"
       }
   ],
   "groups": [
      {
         "groupid": "15"
        }
   ],
   "templates": [
   {
        "templateid": "10273"
   }
   ]
},
"auth": "689e61ccf47b1e634f40b27454222272",
"id": 1
}' http://192.168.10.10/zabbix/api_jsonrpc.php | python -m json.tool

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

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

相关文章

Windows:批处理脚本学习

目录 一、第一个批处理文件 1. &&和 | | 2. | 和 & 二、变量 1.传参变量%name 2.初始化变量set命令 3.变量的使用 4.局部变量与全局变量 5.使用环境变量 6.扩充变量语法 三、注释REM和 :: 四:函数 1.定义函数 2.…

鸿蒙 Navigation VS Router 对比

当前HarmonyOS支持两套路由机制(Navigation和Router),Navigation作为后续长期演进及推荐的路由选择方案,其与Router比较的优势如下: 易用性层面: Navigation天然具备标题、内容、回退按钮的功能联动&…

看 Unity 组件的源码 —— ILSpy

ILSpy 是开源的 .NET 程序集浏览器和解编译器。 下载 ILSpy ILSpy Github 地址:icsharpcode/ILSpy: .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! (github.com) 它有 Release 包可以下载 也提供 IDE 的…

Cadence23学习笔记(十四)

ARC就是圆弧走线的意思: 仅打开网络的话可以只针对net进行修改走线的属性: 然后现在鼠标左键点那个走线,那个走线就会变为弧形: 添加差分对: 之后,分别点击两条线即可分配差分对: 选完差分对之后…

解锁创新:AI如何推动低代码应用的智能化

在当今快速变化的商业环境中,企业面临着前所未有的挑战和机遇。数字化转型已成为各行各业的必然趋势,企业需要迅速适应市场变化,提升客户体验,并降低开发成本。 这一背景下,低代码开发平台的崛起为企业提供了一种高效…

ICIP-2020-A Non-local Mean Temporal Filter for VideoCompression

在 libvpx、VP8、VP9 和 HEVC 等各种编码器实现中,早就发现在预处理阶段过程中从源视频信号去除噪声对客观压缩效率的提升存在好处。通常使用常规的块匹配运动搜索来构建运动轨迹,并沿着轨迹比较每对像素,根据像素间的差异确定时域滤波器系数…

SpringSecurity如何整合JWT

整合JWT 我们前几个小节,实现的是非前后端分离情况下的认证与授权的处理,目前大部分项目,都是使用前后端分离的模式。那么前后端分离的情况下,我们如何使用SpringSecurity来解决权限问题呢?最常见的方案就是SpringSe…

如何学习Airflow:糙快猛的大数据之路(附思维导图)

什么是Airflow? 在开始之前,让我们先简单了解一下Airflow是什么。Apache Airflow是一个开源的工作流管理平台。它允许你以代码的方式定义、调度和监控复杂的数据处理管道。 想象一下,你有一系列需要按特定顺序执行的任务,而且这些任务之间还有依赖关系,Airflow就是为解决这…

【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NPU 算力MAC 阵列简介MAC 阵列特点 MAC 阵列的结构MAC 阵列架构示例 MAC 阵列计算举例示例计算 TOPS 计算方法 NPU 算力 OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS&#xf…

把 网页代码 嵌入到 单片机程序中,2024/7/25 17:33

把 网页代码 嵌入到 单片机程序中 废话不多说直接上结果: 代码中定义: const char* html" 处理过的网页代码 " ; 处理网页代码的 web 程序( 主要是 正则 把双引号 加 符号) <!DOCTYPE html> <html lang"en" style"background-color: rgba…

Python 爬虫 tiktok API 获取TIKTOK标签信息 数据采集

此接口可通过标签id一键查询到tiktok标签信息&#xff0c;如有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如图 https://www.tiktok.com/tag/musicand?_r1&namemusicand&u_codeeab7jd1ha5l36c&_deab7h4fj9h9k1f&share_challenge_id2878999&…

CXL与NVME融合场景下, 计算存储应用案例分析

场景1:数据写入之前 目标是避免数据从存储设备传输到主机内存再返回存储设备的传统过程中的数据搬运成本。通过利用CXL和NVMe技术的结合&#xff0c;可以在存储层直接对数据进行处理&#xff0c;即所谓的计算存储&#xff08;Computational Storage&#xff09;。这特别适用于…

革新优选购物模式:重塑电商体验

在当今竞争激烈的电商市场中&#xff0c;革新优选购物模式以其独特的运营策略脱颖而出&#xff0c;其核心在于通过价格优化、激励机制创新以及社交网络的深度融合&#xff0c;激发消费者的购物热情&#xff0c;实现销售与用户忠诚度的双重飞跃。 一、合规运营&#xff0c;构建信…

Vue3 study

Vue3 工程 创建 还是能像 vue2 一样通过 vue-cli 创建&#xff0c;即 vue create projectName 但是官方更推荐 vite 创建&#xff0c;即 npm create vuelatest&#xff0c;然后从项目名开始配置 总结&#xff1a;入口在 index.html&#xff0c;它会引入 main.ts&#xff0c;…

Inxedu 因酷网校在线教育系统之sql注入代码审计

1 后台-/article/delete?articelId= 注入 全局搜索 ${,开启文件过滤,关注*Mapper.xml文件 点击进入ArticleMapper.xml,SQL注入点在第97行,使用$直接拼接了参数 查找哪里声明那个方法 点击deleteArticleByIds,查看谁调用了它。在ArticleDaoImpl调用 接着点击deleteArticl…

静态IP地址在网络安全中的角色解析与实测分析

在这个网络边界日益模糊的时代&#xff0c;每一次点击、每一次数据传输都有着安全问题。作为网络安全体系中的基石&#xff0c;静态IP地址的角色显得尤为重要而复杂。今天&#xff0c;我们的测评团队将带您深入剖析静态IP地址在网络安全中的多重角色&#xff0c;并通过两家代理…

谁是中国井村屋?背靠红豆产业链,年销2.5亿根小豆冰棍,井村屋极致产品力是如何策划的?

红豆棒冰是日本老字号“井村屋”旗下的招牌产品。 井村屋在日本以红豆产业链见长&#xff0c;凭借优质产业链打造的红豆棒冰很逆天&#xff0c;每年大约售出 2.5 亿根&#xff0c;日本1.2亿人口&#xff0c;相当于每人每年至少吃两根。 这个国民级单品是如何打造极致产品力的呢…

【爆】Stable Diffusion【真人模型】:全网最真实的亚洲女性大模型

模型v1下载&#xff1a;XXMix_9realisticSDXL-Checkpoint-展夜枭-LiblibAI 环境要求&#xff1a; gpu&#xff1a;12G 最好16G python&#xff1a;3.10 cuda&#xff1a;11.8 一、介绍 XXMix_9realisticSDXL是一个基于Stable Diffusion XL模型训练的微调模型&#xff0c;…

06 capture软件元器件库的管理与调用 07 元器件库与PCB封装库的关联与调用

06 capture软件元器件库的管理与调用 && 07 元器件库与PCB封装库的关联与调用 第一部分 06 capture软件元器件库的管理与调用一、获取元器件库的方法 第二部分 07 元器件库与PCB封装库的关联与调用 第一部分 06 capture软件元器件库的管理与调用 一、获取元器件库的方…

vue3 + antd vue 纯前端 基于xlsx 实现导入excel 转 json,将json数据转换XLSX导出(模版下载)

一、导入 0、关键代码 // 安装插件 npm i xlsx/yarn add xlsx // 导入xlsx import * as XLSX from xlsx; 点击提交的时候才整理数据。上传的时候文件保存在 state.form.file[0] 中的 // 定义字段映射关系 const fieldMap {sheet2json: {技能名称: skill_name,技能等级: …