zabbix进阶

zabbix宏和用户自定义监控(02)_

zabbix发现、自动注册和web监控(03)_

zabbix分布式监控(04)_

 

1. web宏和自定义监控

要求宏的名字只能使用大写字母数字下划线只能以大写字母开头//不能有小写

zabbix有许多内置的宏

宏定义zabbix支持在全局模板或主机级别使用用户自定义的宏,(user marco

引用用户自定义宏要使用{$MACRO}调用宏,//系统定义的宏,不需要使用$

应用应用在item keysdescriptiontrigger名称和表达式上主机接口IP/DNS及端口discovery机制SNMP协议的相关信息上

分类全局宏模板宏主机级别宏

宏替换次序主机级别-à主机上的一级模板{多个模板按其ID号排序}----à二级模板--。。。

全局宏

自定义宏的创建

全局宏Administration----general----Macros//自定义宏

主机或模板级别的宏编辑响应的主机或模板的属性即可 

administrator—template-àmacros //模板级别的宏

//在模板中定义宏假如以后需要修改的话只需要修改宏即可不在需要修改值

测试

在自定义模板中configurationàtemplates---新建的模板名 macros {$NETINLIMIT} =>  8000

configurationàtemplates---新建的模板名triggers--expression{10.0.0.201:net.if.in[ieno16777736].last(,0)}>{$NETINLIMIT} //直接使用即可

创建宏的方法

1. configuration—template—模板名{Macros} //定义宏
//如果使用的是模板,则模板中的macro大于admin中的Macro

2. Administrator—General---右侧选择Macros---创建一个宏即可

 

 

用户自定义参数Userparameter功能

//agent上执行脚本

free | awk '/^Mem:/{print $4}' //获取空闲空间

语法UserParameter=, //多个key的话,使用;隔开

一般来说返回的数据量不能大于512k,不能返回太大的数据

vim  /etc/zabbix/agntd.conf 修改该配置文件即可,在agentd

UserParameter=memory.free,/usr/bin/free | awk '/^Mem:/{pring $4}'  //这样就会有一个返回值,返回退出,然后重启agent

server使用zabbix_get -s 10.0.0.201 -k "memory.free" //可以测试得到大小

//server上添加item对应keymemory.free

//最后在monitoring---latest data上可以看到效果

//但是获取到的数据是以k计算的

修改item---use custom information---1024//,然后清空数据,会自动变成,再次查看lastest data会自动变成 M

清空数据

configuration—hsots---选中主机名---最后一个clear  history and trends //清空数据

cat /proc/meminfo | awk '/^MemFree/{print $2}' //也可以获取内存还剩多少

UserParameter=key[*],command //其实可以接受多个参数

接受多个参数

vim /etc/zabbix/zabbix_agentd.conf

UserParameter=memory.usage[*],/bin/cat /proc/meminfo | awk  ‘/^$1:/{print $$2}’

//cat命令的执行结果就是函数的返回值

//命令自身也有变量的话,需要在$之前再加一个$, awk一定要使用单引号

zabbix_get -s 10.0.0.201 -k "memory.usage[MemTotal]" //在服务器端测试

这样在/etc/proc/meminfo  的信息都能够被采集到

//作业

创建多个item实现监控agentmemory的使用情况

注意在此之前删除mem的相关item

监控nginx的信息:

例如:监控nginx的各种信息

 

1实验parameter

UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'

UserParameter=Nginx.reading[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2

UserParameter=Nginx.writing[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4

UserParameter=Nginx.waiting[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6

UserParameter=Nginx.accepted[*], /usr/bin/curl -s "http://$1:$2/status" |

awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'

//开头是数字

UserParameter=Nginx.handled[*], /usr/bin/curl -s "http://$1:$2/status" |

awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'

UserParameter=Nginx.requests[*], /usr/bin/curl -s "http://$1:$2/status" |

awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'

活动的个数 //$1,$2 服务器地址和端口

readingnginx读到客户端的Header信息数

writing返回给客户端Heade信息数

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


 

实验监控nginix

1. yum install nginx

vim /etc/nginx/conf.d/default.conf

启用nginx status

server {      //server

。。。。。

stub_status on;

location  /status {   

access_log off;

       allow 127.0.0.1;

        allow 10.0.0.0/24;

        deny all;}

。。。。

}

service nginx start

curl http://127.0.0.1/status       //测试一下

2. agentvim /etc/zabbix/zabbix_agentd.d/nginx.conf //新建的配置文件

1实验parameter贴上

UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'

UserParameter=Nginx.reading[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2

UserParameter=Nginx.writing[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4

UserParameter=Nginx.waiting[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6

//前三个都需要减去前值后三个不需要减去前值delta

UserParameter=Nginx.accepted[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'

UserParameter=Nginx.handled[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'

UserParameter=Nginx.requests[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'

server上测试

zabbix_get -s 10.0.0.201 -k "Nginx.accepted[10.0.0.201,80]"

//也就是说  s agent测试也为自己

3. 创建item

name nginx-1

key Nginx.accepted[{HOST.IP},80]  //HOST.IP是一个宏

Nginx. handled [{10.0.0.201},80] //第二个item

Nginx.active[{10.0.0.201},80]

Store valuedelta

New Applicationnginx-status


4. 假如要使用脚本的话, 一次只能返回一个值,而且是单个,其次,

脚本放在

rpm –ql zabbix-agent  //server端, 默认路径/usr/lib/zabbix/externalscripts

agent放在任何路径下都可以


5. 添加自定义脚本,agent上,实现监控

要求

1. 必须有输出值

2. zabbix用户必须有执行权限或者777

3. 接受的参数$1--$9

6.实现

vim  zabbix_agentd.conf

UnsafeUserParameters=1 //自定义脚本的时候需要开启

UserParameter=test.icmp[*],/etc/zabbix/script/2.sh $1

出现错误item

很有可能是因为采集的数值不匹配//创建item时,采用的单位不对

pklossrestime   type of informationfloat

units %   ms 

2.sh脚本

#!/bin/bash

count=1

server=`grep -i "^server" /etc/zabbix/zabbix_agentd.conf | head -1 |cut -d= -f2`

# get the server ip

data=`ping -c $count  $server`

case $1 in

"pkloss")

echo $data | grep loss | head -1 | awk -F, '{print $3}'| cut -d% -f1 | cut -d' ' -f2

;;

"restime")

echo  $data | grep rtt |cut -d/ -f5

;;

*)

esac

 

3.脚本

#!/bin/bash

count=1

server=`grep -i "^server" /etc/zabbix/zabbix_agentd.conf | head -1 |cut -d= -f2`

# get the server ip

data=`ping -c $count  $server`

case $1 in

"pkloss")

echo $data | grep loss | head -1 | awk -F, '{print $3}'| cut -d% -f1 | cut -d' ' -f2

;;

"restime")

echo  $data | grep rtt |cut -d/ -f5

;;

"min")

echo $data |  awk -Frtt '{print $2}' | tail -1 | cut -d/ -f4 |cut -d' ' -f3

;;

"max")

echo $data | awk -Frtt '{print $2}' | tail -1 | cut -d/ -f6

;;

*)

esac

 

7. 附加基于UDP的测试,还有其他指标

cat a | awk -Frtt '{print $2}' | tail -1 | cut -d/ -f4 |cut -d' ' -f3min

cat a | awk -Frtt '{print $2}' | tail -1 | cut -d/ -f6max

 

 

 

 

 

任务

1.安装hping3

写一个脚本调用 udpnock实现,userparameter的功能

wget http://www.hping.org/hping3-20051105.tar.gz  //使用源码安装

1. yum install gcc  

2. yum install libpcap-devel  

3. yum install tcl-devel 

4. vim   bytesex.h

 ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h   //为其创建链接文件

./configure

make && make install

 

问题1

touch: 无法创建"/tmp/a.tmp": 权限不够

方案使用变量保存起来

 

问题2udpnock 用法

/etc/zabbix/bin/udpnock  -c  10  -i  40  -P 5900 60.205.230.140 5130

-c 请求次数

-i :源端口,ip,目标端口

-P

/udpnock的使用方法:

agent上,实现,nock测试 //端口是否是指定的,本地的端口是自定义打开的,但是对端的端口是需要手动打开的,而且要接受参数

 

hping3的使用方法

hping

-c :发送多少个

-i 间隔默认是s可以使用msus

-n 不进行lookup

-q 只显示最后的统计数据

-z ctrl+z增减发送出去包的TTL,按一次增加1,按两次增加2,按住不放过是减少TTL

-0|-1|-2|-8| :RAW IP模式ICMPUDP扫描模式默认tcp

//all所有端口1-65535known/etc/service记录的所有端口,

//多个不相连的端口1,4,443,445-224

//!kown 取反

-9 : --listen signature //监听模式,监听含有特定signature的包并且将含有该signature的包dump

-a :(--spoof hostname)伪装自己的地址,会造成自己收不到返回的包,在进行idle扫描时候有用,// ip地址是成功的伪装了,但是mac还是自己的

--rand-source : 使用随机地址伪装自己的地址

--rand-dest : 随机选择目标

-t :制定包的TTL ,具体要设定为多大要看是做什么,最大是255

 -r : 显示id的增量,而不显示id

 hping3 192.168.0.107 -m 8 -f  //-mmtu-f fragmentmtu默认是16kbyte,当发送包的大小大于16kbyte的时候,就进行fragment

 -G--rroute 显示路由

-s:(--baseport)设定发送包的最开始的端口,如果要使用一个固定的端口的话,就要加上 -k--keep

hping –i  u1 10.0.0.1 //每一us发送一个 ,这是一种***行为

hping3 -8 known -S 192.168.0.1  <---这里-S 表示采用SYN扫描

hping3 -8 1-1024 -S 192.168.0.1 //指定扫描端口

hping3 -a www.baidu.com 192.168.0.107  //自己是收不到包的会返回给192.168.0.107

hping3 --rand-source 192.168.0.107  //在防火墙货这路由器上可以看到效果

hping3  --rand-dest -I eth0 192.168.0.x   <--使用x代表0-255,要是在整个网络中选择目标可以换成4x;在这种模式下一定要制定interface

hping3 192.168.0.107 -m 8 -f 

hping -G www.baidu.com 

hping3 -s 2 192.168.0.107

 

iperf的安装和使用

wget https://iperf.fr/download/fedora/iperf3-3.1.3-1.fc24.x86_64.rpm

yum localinstall


在服务端运行iperf,输入命令iperf –s –p 12345 –i 1 以在本机端口12345上启用iperf

客户端:iperf –c server-ip –p server-port –i 1 –t 10 –w 20K

-c客户端模式后面是server-ip

-pserver的监听端口

-i带宽报告的时间间隔s

-t设定测试的时长默认为s

-w设置tcp窗口大小,一般可以不用设置,默认即可

//以上为单线程TCP

iperf –c 10.0.0.200  -p 12345 –i 1 –t 3 –P 2 //启动两个线程 ,客户单

iperf –s  -p 12345 –m –i 1 //server


UDP测试

iperf –s -u –p 12345 –i 1 以在本机端口12345上启用iperf,并运行于udp模式

iperf -c server-ip -p server-port -i 1 -t 10 –b

-c:以什么身份运行

-b:设置udp的发送带宽单位bit/s

显示的内容

Jitter抖动  Lost/Total:丢包率Datagrams为包数量