自动发现和自动(主动注册)

自动发现

添加自动监控项

创建动作

启用主机

自动(主动注册)

第一步,修改参数

  • Server:#允许谁来向我取值
  • ServerActive:#我主动像谁汇报
  • Hostname:#区分每一个agnet
  • Hostnamedate:#web,标签作用,主机元数据

第二步,添加自动注册规则

添加作动

添加操作

第三步,重启

重启zabbix-server

重启zabbix-agent

第四步,查看

秒添加

zabbix-agnet主动和被动的区别

被动模式在百台和千台会达到性能瓶颈

被动模式

主动模式

将模板监控项全选更新类型为主动式,时间间隔为30s

(如果需要新的标识模板或者要对模板进行修改,则需要将进行全克隆,对克隆后的模板进行修改)

无zabbix-agnet客户端的监控(Zabbix-sender) + crontab

应用环境:如银行等特殊环境,没有安装软件的授权

参考博客:https://www.qstack.com.cn/archives/133.html

安装

rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-sender-3.0.5-1.el7.x86_64.rpm

查看语法

zabbix_sender –help

zabbix_sender -z 127.0.0.1 -s "Linux DB3" -k db.connections -o 43

参数:

  • -z zabbix-server 服务器地址
  • -s host 监控指定主机的名字
  • -k pass
  • -o key的值

客户端可以直接写脚本把指取出,再发送

添加监控项类型

命令行测试

zabbix_sender -z 192.168.1.10 -s "192.168.1.92" -k avaiMEM -o 220

脚本检测-命令行取值-主动发送效率高,但是容易造假

脚本编写

命令行取值测试

free -m | awk '/^Mem/{print $NF}'

取值成功,编写脚本

vim /server/scripts/avaimem.sh

1
2
3
#!/bin/bash
MEM=`free -m | awk '/^Mem/{print $NF}'`
zabbix_sender -z 192.168.1.10 -s "192.168.1.92" -k avaiMEM -o $MEM

更新脚本

由于银行环境连sender都不能装,所以我们需要nc来传输

Nc参考脚本(因为版本更迭,不能用)

1
2
3
4
5
#/bin/bash
host=$1
item=$2
value=$3
echo '{"request" :"sender data","data":[{"host":'\"$host\"',"key":'\"$item\"',"value":'\"$value\"'}]}'|nc 172.16.1.71 10051 && echo ""

参数:

1
2
3
4
5
6
三个变量
json格式
传递给nc
192.168.1.10 传输目的地
10051 目的端口
echo

更新后的脚本

1
2
3
#!/bin/bash
MEM=`free -m | awk '/^Mem/{print $NF}'`
/bin/bash /server/scripts/zabbix_sender.sh 192.168.1.92 avaiMEM $MEMsh

缺点

步骤复杂,而且容易出问题

zabbix低级自动发现

自动发现:创建监控主机

低级自动发现:自动创建监控项

自动发现规则其实就是一个key

名称为key名称

过滤器内容

查看正则表达式

监控项原型

最后会根据过滤后剩下的值自动创建监控项

mysql多实例低级自动发现

参考https://www.qstack.com.cn/archives/108.html

新增库

1
2
3
4
cp /etc/my.cnf /etc/my3307.cnf
cp /etc/my.cnf /etc/my3308.cnf
vim /etc/my3307.cnf
vim /etc/my3308.cnf

全部替换

1
2
3
4
5
6
7
8
9
[mysqld]
datadir=/data/330*/
socket=/data/330*/mysql.sock
port=330*
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/330*/mysqld.log
pid-file=/data/330*/mysqld.pid
1
2
3
4
5
6
7
8
9
10
11
12
13
创建文件夹
mkdir -p /data/{3307,3308}
初始化
mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
mysqld_safe --defaults-file=/etc/my3307.cnf & (启动)

mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf
mysqld_safe --defaults-file=/etc/my3308.cnf & (启动)

登录
mysql -S /data/3307/mysql.sock

自定义监控项,输出json格式

创建key

写key

1
2
vim mysql_discover.conf
UserParameter=mysql.discovery,sh /server/scripts/mysql_discovery.sh

写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vim /server/scripts/mysql_discovery.sh
#!/bin/bash
#mysql low-level discovery
res=`netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}'`
port=($res)
printf '{'
printf '"data":['
for key in ${!port[@]}
do
if [[ "${ #port[@]}" -gt 1 && "${key}" -ne "$((${ #port[@]}-1))" ]];then
printf '{'
printf "\"{ #MYSQLPORT}\":\"${port[${key}]}\"},"
else [[ "${key}" -eq "((${ #port[@]}-1))" ]]
printf '{'
printf "\"{ #MYSQLPORT}\":\"${port[${key}]}\"}"
fi
done
printf ']'
printf '}\n

命令行测试取值

sh /server/scripts/mysql_discovery.sh

解决权限问题

which netstat

chmod u+s /usr/bin/netstat

创建自动发现

添加规则

添加正则表达式

添加过滤器

变量来由

原型添加
解析原生脚本

cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf |grep -Ev '^$|#'

去掉最简易的命令行

取出尾部命令行(看不懂的变量可以搜索)

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

在原生模板中查询传入的参数,并进行测试

echo "show global status where Variable_name='Com_begin';" | mysql -N | awk '{print $2}'

逐步最小化

echo "show global status where Variable_name='Com_begin';" | mysql -N

发现是打印数据库信息

(简单的命令行也可以直接取头部进行测试)

进入端口

mysql -h 127.0.0.1 -P 3307

显示当前数据库

show VARIABLES like '%sock%';

修改angent配置文件

vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

添加变量()

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -h 127.0.0.1 -P $2 -N | awk '{print $$2}'

命令行测试取值

zabbix_get -s 192.168.1.91 -k mysql.status[Com_begin,3308]

参照原生原型,创造原型

参数

mysql.status[uptime,{ #MYSQLPORT}]

mysql.status 键

uptime 传入的参数

{ #MYSQLPORT} 传入的第二个参数,触发器的宏变量

添加增删改查

监控项批量更新加入应用集

Pass

查看数据

流程总结

定义key

1
2
cat /etc/zabbix/zabbix_agentd.d/mysql_discover.conf 
UserParameter=mysql.discovery,sh /server/scripts/mysql_discovery.sh

定义自动发现规则来接收key

拿到监控项原型中进行创建

遍历到n个值就反复创建n遍

一个低级自动发现最少需要两个key,

1.脚本中的键值 mysql.discovery

2.监控项原型取值 mysql.status[uptime,{ #MYSQLPORT}]