zabbix server:
hostname=Zabbix server

ip:192.168.100.7

zabbix agent:

hostname=host3

ip:192.168.100.3

目前状态如下,使用的全是zabbix自带的监控插件,在某些情况下,我们自己的一些应用,或者系统上的一些值无法被zabbix监控,这时,需要自定义一些监控项,监控项可以直接使用shell命令,bash脚本,开发语言来生成,最终结果是需要返回一个值,交给zabbix进行监控,然后进行一系列操作,下面,跟随本文开始配置。

自定义监控:

#在zabbix agent端通过某种手段取得值,然后zabbix_agent把值传给server端,或者server端自己来取,server端通过这个值,进行分析判断,建立图表,根据值的变化做报警等。

情况1:服务器上存在nginx服务(如下),监听端口8219,zabbix不提供此端口监控,需要自定义一个监控项来监控此端口的可用性。

[root@host3 [::]~]#netstat -antp |grep nginx
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx

新建如下脚本

#echo $?    必须存在,显示的结果就是这个脚本返回的结果。

[root@host3 [17:52:29]~]#cat /shell/nginx_status.sh
curl \-'I' localhost:8219/abc \--connect-timeout 2 &>/dev/null
echo $?

执行此脚本测试

#返回的值是0代表本地的8219端口是可以正常连接的。

[root@host3 [::]~]#bash /shell/nginx_status.sh

编辑zabbix_agentd.conf 配置文件,增加下方配置。

#关键词 UserParameter 定义一个key=nginx_status ,values=(key后方命令的结果`echo  $?`)

#key

#定义完毕后,重启zabbix_agentd 服务,才可生效

[root@host3 [::]~]#cat /usr/local/zabbix/etc/zabbix_agentd.conf |grep nginx
UserParameter=nginx_status,bash /shell/nginx_status.sh

Server端可用命令连接Agent端来获取这个值,看是否可以正常获取到数据,这个步骤正常进行后,再添加到网页端上,进行监控。

#-s 指定agent端地址,-k指定key

[root@Centos7 bin]# ./zabbix_get  -s 192.168.100.3  -k nginx_status

server端可以正常获取值后,在网页端上添加针对这个值的监控。

根据监控项查看是否获取到了对应的结果。

情况2 : 记录mysql的连接数信息,后根据此图做图表。

编辑agent配置文件,并重启agentd端

#Threads 代表连接数

[root@host3 [20:55:12]~]#mysqladmin -uroot -pnihao123! status
Uptime: 86 Threads: 1 Questions: 12 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 0.139

[root@host3 [::]~]#cat /usr/local/zabbix/etc/zabbix_agentd.conf  | grep mysql
UserParameter=mysql_Threads,mysqladmin -uroot -pnihao123! status |awk '{print $4}'

#使用zabbix_get命令来检查key是否设置成功,看是否有values,这一步建议是必须做的,且这个例子下,你可以自己完成,熟悉下命令。

添加监控项

情况3 : 监控系统的tcp连接条数,记录TIME_WAIT ,ESTABLISHED等连接状态的连接数。

编辑获取连接数脚本

#  2>/dev/null 默认启动zabbix agentd进程的不是root用户,导致执行netstat命令时,是看不到进程名称的,会报一个权限不足,但是还是会把我们有权限看的给打印出来,我们只需要看状态码,所以把权限不足错误给关闭。

#根据$1 传入的位置变量来过滤连接状态,总结并返回行数,代表有多少条这样的连接

#如果$1为空,就返回0,不执行查询操作

[root@host3 [20:16:17]/shell]#cat /shell/tcp.sh
#!/bin/bash
if [ ! $1 ];
then
echo 0
exit
fi
netstat -'antp' 2>/dev/null   |awk '{print $6}'| grep $1 |wc -l

编辑agentd端配置文件,并重启agentd端。

#  key[*]      获取key时可附带参数,将作为获取values时传入的位置参数,从而被脚本读取

[root@host3 [::]/usr/local/zabbix/etc]#cat zabbix_agentd.conf |grep tcp
UserParameter=tcp_status[*],bash /shell/tcp.sh $1

server端,获取key 测试.

[root@Centos7 bin]# ./zabbix_get  -s 192.168.100.3 -k "tcp_status[ESTABLISHED]"

[root@Centos7 bin]# ./zabbix_get  -s 192.168.100.3 -k "tcp_status[TIME_WAIT]"

在网页端添加监控项

查看获取到的values

#values 是0因为我们没有传入任何位置参数给脚本,脚本判断没有位置参数就返回一个0,那么怎么定义位置参数传入脚本呢-在看完此例子后接着阅读下方的自定义图表。

 自定义图表:

1.通过mysql连接数来制作第一个图表。

查看图表

2.创建监控多种连接状态的图表。

#调整之前的connect_status(tcp_status) 监控

原有:

现有:

#传入位置参数:ESTABLISHED ,代表,查询ESTABLISHED的连接数。

#ESTABLISHED是一种连接状态,如果要获取更多的连接状态的条数,再创建一个一样的监控项,只需要改传入的参数。

添加监控项:

#同时添加2个监控

查看监控

这里还有一些个小知识点:

1.你可以看到上图中的connect_status[ESTABLISHED] 现在的值是9,代表有9个ESTABLISHED(已建立的)连接,但是系统中,实际看一下已建立连接,一直是少一个的。

[root@host3 [:51:]/shell]#netstat -antp |grep ESTABLISHED |wc -l

因为目前已建立的连接是8个,当zabbix-server请求获取数据时,会向agent建立连接,建立连接后,server端执行此命令后会看到9个已建立连接(把自己跟agent端建立的连接也计算在内),计算机计算速度很快,当你去agent上去手动查看有多少连接时,这个连接已经是TIME_OUT状态了。

2.上图中的connect_status[TIME_WAIT]值最大的时候是12,但是突然一下就降为2以下。

在主动模式中,server端会频繁的向agent端请求数据,每次都是开启一个新的连接,而且是一直在请求,那么这种情况,你可能会想到通过设置长连接来保持连接就行了,但是,很抱歉,zabbix不支持长连接~

无奈,软件不支持长连接,只能让我们的系统来延长连接时间了。

net.ipv4.tcp_keepalive_time = 1800  #tcp连接时间保持1800秒
net.ipv4.tcp_tw_recycle = 1 #回收TIME_WAIT占用的连接
[root@host3 [::]/shell]#tail - /etc/sysctl.conf
net.ipv4.tcp_keepalive_time =
net.ipv4.tcp_tw_recycle =
[root@host3 [::]/shell]#sysctl -p
net.ipv4.ip_forward =
net.ipv4.conf.default.rp_filter =
net.ipv4.conf.default.accept_source_route =
kernel.sysrq =
kernel.core_uses_pid =
net.ipv4.tcp_syncookies =
kernel.msgmnb =
kernel.msgmax =
kernel.shmmax =
kernel.shmall =
net.ipv4.tcp_keepalive_time =
net.ipv4.tcp_tw_recycle =
 

zabbix自定义监控,自定义图表。的更多相关文章

  1. zabbix的简单操作(查看监控,自定义监控和钉钉监控报警)

    zabbix是一种监控软件,我用的是centos7.5版本 一:我已经添加好主机了,接下来就是看看怎么查看监控内容的 1.打开zabbix服务的web网页 2.检测最新数据,要在最新数据中筛选 3.查 ...

  2. 阿里云自定义监控tomcat进程数

    阿里云提供自定义监控SDK,这有助于我们定制化的根据自身业务来做监控,下面我就根据业务需求来介绍一个简单的自定义监控配置. 阿里提供了2个版本的自定义监控接口:自定义监控SDK(python版) :c ...

  3. Zabbix自定义监控8080端口的连接数

    Zabbix自定义监控8080端口的连接数 一 zabbix自定义监控实现思路 实际上我们要想使用zabbix来监控一些服务的原理很简单,步骤分别是:1.写一个脚本用于获取待监控服务的一些状态信息2. ...

  4. Zabbix自定义监控项(模板)

    虽然Zabbix提供了很多的模板(简单理解为监控项的集合),在zabbix界面点击share按钮就可以直接跳到模板大全的官方网站,但是由于模板内的监控项数量太多不好梳理且各种模板质量参差不齐,还是建议 ...

  5. Zabbix设置自定义监控项之——监控tcp连接状态

    目录 一.用户自定义参数 二.配置 监控 TCP 连接状态 在实际监控中,除了官方自带的一些监控项,我们很多时候有一些定制化监控,比如特定的服务.TCP 连接状态等等,这时候就需要自定义监控项.自定义 ...

  6. Zabbix分布式监控系统实践 自定义配置

    https://www.zabbix.com/wiki/templates/start 环境介绍OS: Ubuntu 10.10 Server 64-bitServers:zabbix-server: ...

  7. zabbix自定义监控项、添加图形、设置触发器、远程执行命令

    监控项是在zabbix中手机数据的基础,没有监控项就没有数据,系统自带模板带有大量默认item,自定义item可以定义在模板中,在应用模板即可使用对应item:也可直接在host中定义 目标:自定义监 ...

  8. zabbix实现自定义监控

    实现自定义监控项实例 .创建主机组 .创建主机 .创建监控项 .到需要监控的主机的agent中添加自定义的监控项目 cd /etc/zabbix/zabbix_agentd.d vi userpara ...

  9. 分布式系统监视zabbix讲解六之自定义监控项--技术流ken

    宏 概述 Zabbix支持许多在多种情况下使用宏.宏是一个变量,由如下特殊语法标识: {MACRO} 根据在上下文中, 宏解析为一个特殊的值. 有效地使用宏可以节省时间,并使Zabbix变地更加高效. ...

随机推荐

  1. 解决npm ERR!Unexpected end of JSON input while paring near (解析附近时JSON输入意外结束)'...."^2.0.0-rc.0","glob"'等npm install错误

    摘要 最近更新了一次node,但是更新后npm的命令总是会报 npm WARN deprecated fsevents@2.0.6: Please update: there are crash fi ...

  2. canvas之五角星的绘制

    <html> <head> <meta charset=utf-8> <title>绘制简单图形线及矩形</title> <style ...

  3. LINUX 使用grep命令查看某个指定时间段的日志

    今天查看订单重复的问题,由于订单生成已经有一段时间了,所以我必须精准进行日志查询.开始用的是sed 命令查询法,后来改成了grep查询,很方便. 命令: grep '时间' '日志文件名 ' 例如:我 ...

  4. mORMot学习笔记3 数据集转Json

    usesSynCommons, SynDB, SynOleDB; procedure TForm1.DataToJsonClick(Sender: TObject); var Conn: TOleDB ...

  5. ELK 错误: retrying failed action with response code: 403, kibana无log显示

    今天10点时候同事报出kibana突然不显示log了,开始紧急排查 1. 从数据源头查起,先看被filebeat监视的log文件是否在更新(一般只要log对应服务在正常运行,log文件中就会有数据持续 ...

  6. Linux克隆修改配置文件及IP

    Linux下安装基本的开发软件比较费劲,特别是安装mysql的时候,这时候就需要学会克隆及直接备份base虚拟机了,下次直接打开,修改网卡文件信息就完事. 克隆虚拟机eth0网卡出现的问题解决1:修改 ...

  7. git 忽略部分文件

    忽略:  git update-index --assume-unchanged .mymetadata    取消忽略: git update-index --no-assume-unchanged

  8. c++中lambda表达式的用法

    #include <iostream> using namespace std; int main(){ ; auto func1 = [=](;}; auto func2 = [& ...

  9. .net System.Net.Mail 之用SmtpClient发送邮件Demo

    private static bool sendMail()     {     try    {     //接收人邮箱    string SendTo = "XXXXX@163.com ...

  10. @Valid验证

    @Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于User类中的属性): ...