节知识点:
zabbix自动发现
web监控
zabbix自动发现 官网:https://www.zabbix.com/documentation/4.0/zh/manual/discovery/network_discovery
1、zabbix提供了网络发现功能:network discovery
基于HTTP、ICMP、SSH、LDAP、TCP、SNMP、Telnet、Zabbix_agent等协议的一种扫描指定网络内的主机,从而实现当协议或者服务存在时,可以自动判断为主机或设备是存在的,就会把IP添加到被监控主机列表上。
一旦主机被发现,如何对其进行操作,将由action来决定。
2、LLD:Low Level Discovery 低级发现功能
上面两种发现功能(即动作):Zabbix 所有动作都是基于发现事件,例如:
-
发送通知
-
添加/删除主机
-
启用/禁用主机
-
添加主机到组
-
从组中删除主机
-
将主机链接到/取消链接模板
-
执行远程脚本命令
基于事件的网络发现动作, 可以根据设备类型、IP地址、状态、运行时间/停机时间等进行配置,查看操作and条件页面。
创建主机
如果在动作→操作选择添加主机操作,那么主机会被添加, 即使添加主机操作未被执行,通过下列的操作仍然可以添加主机,这样的操作是:
-
启用主机
-
禁用主机
-
添加主机到主机组
-
将主机链接到模板
移除主机
从Zabbix 2.4.0开始,如果已发现的实体不在自动发现规则的IP范围内,则由网络发现规则创建的主机将会被自动删除。主机将立即删除
网络发现由两个阶段组成:发现(discovery)和动作(actions)。
网络发现模块每次检测到 service 和 host(IP)都会生成一个 discovery 事件
不支持发现网络拓扑
添加主机时的创建接口:
当网络自动发现,添加主机时,它们的接口根据以下规律来创建的:
网络发现演示: 官网 https://www.zabbix.com/documentation/4.0/zh/manual/discovery/network_discovery/rule
配置环境:
zabbix server:node1 192.168.128.131
zabbix agent: node2 192.168.128.132
zabbix agent: node1 192.168.128.132 (被发现)
1、首先同步3台主机的时间
# date; ssh node2 'date'; ssh node3 'date'
Mon Jan 28 11:43:04 CST 2019
Mon Jan 28 11:43:04 CST 2019
Mon Jan 28 11:43:05 CST 2019
2、在node3节点安装zabbix agent程序并启动
# cd /etc/yum.repos.d/
# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# yum install zabbix-agent zabbix-sender
3、修改zabbix-agent的配置文件
# vim /etc/zabbix/zabbix_agentd.conf
#Server=127.0.0.1
Server=192.168.128.131 //修改为server端的IP#ServerActive=127.0.0.1
ServerActive=192.168.128.131 //自动注册#Hostname=Zabbix server
Hostname=node3 //本主机的名字# EnableRemoteCommands=0
EnableRemoteCommands=1 //此处更改为1,表示启用执行远程命令的功能# LogRemoteCommands=0
LogRemoteCommands=1 //更改为1,表示启用记录远程执行命令的日志功能
4、将node2上定义的user parameters文件复制到node3主机上
# scp /etc/zabbix/zabbix_agentd.d/{mysql.conf,os.conf} root@node3:/etc/zabbix/zabbix_agentd.d/
# systemctl start zabbix-agent
# ps -aux
zabbix 6464 0.0 0.0 80920 1292 ? S 12:01 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix 6465 0.0 0.0 80920 1456 ? S 12:01 0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix 6466 0.0 0.0 80920 1844 ? S 12:01 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 6467 0.0 0.0 80920 1844 ? S 12:01 0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 6468 0.0 0.0 80920 1844 ? S 12:01 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]# ss -tunl //查看是否监听了10050端口
5、配置zabbix web界面
配置Zabbix的网络发现规则来发现主机和服务:
首先进入 配置 → 自动发现 单击 创建发现规则(Create rule) (或在自动发现规则名称上编辑现有规则) 编辑自动发现规则属性key的查找方法:
# mysql
MariaDB [zabbix]> use zabbix;
MariaDB [zabbix]> show tables;
MariaDB [zabbix]> desc items;
MariaDB [zabbix]> select key_ from items; //可以取出相关的key
参数 描述 名称(Name) 规则名称,唯一。 例如: “Local network”。 通过代理发现 (Discovery by proxy) 谁执行当前发现规则:What performs discovery:
no proxy - Zabbix server 执行发现
<proxy name> - 这个proxy执行IP范围(IP range) 发现规则中的IP地址范围. 可能的格式如下:
单个IP: 192.168.1.33
IP段: 192.168.1-10.1-255. 范围受限于覆盖地址的总数(小于64K)。
子网掩码: : 192.168.4.0/24
支持的子网掩码:
/16 - /30 for IPv4 addresses
/112 - /128 for IPv6 addresses\IP列表: 192.168.1.1-255, 192.168.2.1-100, 192.168.2.200, 192.168.4.0/24
Zabbix 3.0.0起,此字段支持空格,表格和多行。Update interval This parameter defines how often Zabbix will execute the rule.
The interval is measured after the execution of previous discovery instance ends so there is no overlap.
Time suffixes are supported, e.g. 30s, 1m, 2h, 1d, since Zabbix 3.4.0.
User macros are supported, since Zabbix 3.4.0.
Note that if a user macro is used and its value is changed (e.g. 1w → 1h), the next check will be executedaccording to the previous value (far in the future with the example values).
检查(Checks) Zabbix将使用这个检查列表进行发现。
支持的checks: SSH, LDAP, SMTP, FTP, HTTP, HTTPS, POP, NNTP, IMAP, TCP, Telnet,Zabbix agent, SNMPv1 agent, SNMPv2 agent, SNMPv3 agent, ICMP ping.
基于协议的发现使用 net.tcp.service[] f功能测试每个主机, 但不包括查询SNMP OID的SNMP协议。 通过在未加密模式下查询监控项(item)来测试Zabbix agent 。有关更多详情,请参阅agent items"端口"参数可以是以下之一:
单端口: 22
端口段: 22-45
端口列表: 22-45,55,60-70设备唯一标识
(Device uniqueness
criteria)
唯一标准如下:
IP地址 - 使用 IP 地址作为设备唯一性标识,不处理多IP设备。如果具有相同IP的设备已经存在,则将认为已经发现,并且不会添加新的主机。
发现检查类型 - 使用 SNMP 或者 Zabbix agent 的 check 作为唯一标识。启用(Enabled) With the check-box marked the rule is active and will be executed by Zabbix server.
If unmarked, the rule is not active. It won't be executed.
6、定义Template,在发现主机后可以直接套用模板
(1)、先确保主机组存在,因为一旦发现某个主机,通常都要对其进行归组
(2)、在监控时要定义模板,在被监控主机添加后直接链接至此模板,就可以实现监控功能了
(3)、下面分别对此模板中的Applications、items、Graphs等分别进行定义
模板已经准备好了,一旦发现主机,可以直接把此模板套用到主机上
7、定义动作(action)将所发现的Linux服务器添加到相应的组和模板中,上述只是定义了发现主机,发现主机后还要可以添加主机。
发现主机并添加
主动注册:auto_registation 官网:https://www.zabbix.com/documentation/4.0/zh/manual/discovery/auto_registration
由于使用discovery方法,zabbix server每个一段时间就要扫描所定义网段(即便之前已经扫描过了),扫描非常消耗资源,所以可以关闭自动发现,改为agent端自动注册。
Active Agent Auto-Registration 适用于不知道哪个网段会出现新的主机
本次使用新主机node4:192.168.128.134作为自动注册主机
配置过程:
(1)定义agent端
ServerActive=
Server=
Hostname=
ListenIP= 设置为本机某特定IP;
ListenPort=
HostMetadata=
HostMetadataItem=item key,一般使用system.uname
(2)配置action,要求其事件来源为auto-registation
1、同步时间
2、在node4安装zbbix-agent和zabbix-sender,并修改配置文件
# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# yum install zabbix-agent zabbix-sender
# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.128.131
ServerActive=192.168.128.131
Hostname=node4
# ListenPort=10050 //监听的地址是10050,如果是默认就不用修改
ListenIP=192.168.128.134 //监听的地址
# systemctl start zabbix-agent
# ss -tunl //查看是否监听了10050
把discovery和自动注册结合起来使用,即可以定义自动发现的时间是一天扫描一次,而且扫描尽可能广的主机。
上面定义完自动注册功能后,需要在前端即web界面进行配置
Host metadata:每一agent端向server端发送数据时,可以发送自己相关的metadata。
# vim /etc/zabbix/zabbix_agentd.conf
HostMetadata=node4auto
# systemctl restart zabbix-agent
以上就完成了自动注册。
但是有一个问题,一共配置了四台主机,而在最新数据显示中只有node2主机,自动发现的node3主机和自动注册的node4主机都没有显示最新的数据。
因为两台主机应用的模板中的item是用户自定义的,而自定义没有复制到目标主机上
将模板中用户自定义的item复制到目标主机上
# scp /etc/zabbix/zabbix_agentd.d/{mysql.conf,os.conf} root@node4:/etc/zabbix/zabbix_agentd.d/
# yum install mariadb-server
# vim /etc/my.cnf
skip_name_resolve = on
# systemctl start mariadb
# systemctl restart zabbix-agent
以上配置对于agent来说都是被动监控模式,但是所有active agent是支持主动监控模式的。
主动模式监控配置如下:Configuration --> Hosts --> node4 --> Item --> Create item
LLD:Low Level Discovery 官网:https://www.zabbix.com/documentation/4.0/zh/manual/discovery/low_level_discovery
由于item配置时具有不确定性,比如监控入站流量时,centos6网卡名为eth0,centos7的网卡名ens33,所以使用固定名称是有问题的。所以在这种情况下就用到了LLD。
LLD的主要功能:是识别特定item,并按特定主机返回的数据定义相应的参数。
LLD的两个步骤:
(1)自动发现特定变量的名称;(大多都是针对于网络接口或者文件系统作区别对待,也可以自定义一下发现规则,可能需要写脚本请求某个变量并获取某个变量的值)
项目"net.if.discovery"可能会返回两对:"{#IFNAME}" - >"lo"(接口名) "{#FSNAME}"文件系统名称 "{#IFNAME}" - >"eth0"网卡名。
(2)添加针对对变量的Items;(服务器端向客户端请求数据时,首先向客户端索取某些特定的信息,而agent端发现时所返回的数据类型为JOSN类型,主要便于数据交换)
web监控 https://www.zabbix.com/documentation/4.0/zh/manual/web_monitoring/items
创建web方案
场景参数
参数 | 说明 |
---|---|
主机 (Host) | 场景所属的主机名或模板的名字。 |
名称 (Name) | 唯一的场景名称。 Zabbix 2.2 开始,这个名字支持用户宏和 {HOST.*} 宏 。 |
应用 (Application) | 选择一个场景属于的应用 。 Web 场景监控项在 监测中 (Monitoring)→最新数据 (Latest data) 栏中将会分组在选择的应用中。 |
新的应用 (New application) | 对场景创建个新的应用。 |
更新间隔 (Update interval) (秒) | 执行场景时间间隔,以秒为单位。 |
重试次数 (Attempts) | 尝试执行 web 场景中步骤的次数。对于网络问题(超时,没有连接,等等) Zabbix 可以多次重复执行步骤。这个数字对场景的中的所有步骤都会生效。尝试次数最大可以设置为 10,默认值为 1。 注意 : Zabbix 不会因为一个错误的响应代码或者期望的字符串没有出现就会触发这个重试。 Zabbix 2.2 开始支持此参数。 |
代理 (Agent) | 选择一个客户端。 zabbix 会模拟选择的浏览器,当一个网站对不同的浏览器返回不同的内容的时候是非常有用的。 zabbix 2.2 开始 ,这块可以使用用户自定义宏。 |
HTTP 代理 (HTTP proxy) | 您可以指定要使用一个 HTTP 代理,使用格式 http://[username[:password]@]proxy.mycompany.com[:port] 默认使用 1080 端口。 如果指定,代理将覆盖代理相关联的环境变量,比如 http_proxy HTTPS_PROXY。如果没有指定,那么代理将不会覆盖代理相关的环境变量。 输入的值是通过“是 (as is)”, 不需要进行完整性检查。你也可以输入 SOCKS 代理地址。如果您指定了错误的协议,连接会失败,项目将成为不受支持的。没有指定的协议,代理将被视为一个 HTTP 代理、 注意 : HTTP 代理仅支持简单身份验证。 此字段中可以使用用户宏。 Zabbix 2.2 开始支持此参数。 |
变量 (Variables) | 可以在场景中的步骤(URL,POST 变量)中使用变量。 它们具有以下格式: {macro1}=value1 {macro2}=value2 {macro3}=regex:<regular expression> 例如: {username}=Alexei {password}=kj3h5kJ34bd {hostid}=regex:hostid is ([0-9]+) 然后可以在{username},{password}和{hostid}的步骤中引用宏。 Zabbix 将自动将其替换为实际值。请注意,使用 regex: 的变量:需要一个步骤来获取正则表达式的值,因此提取的值只能应用于后续步骤。如果值部分以 regex: 开头,那么它之后的部分将被视为正则表达式,将搜索网页,如果找到,则将匹配存储在变量中。 注意,必须存在至少一个子组,以便可以提取匹配的值。 Zabbix 2.2 开始支持变量中的正则表达式匹配。 Zabbix 2.2 开始,{HOST.*} 宏 和用户宏可以在此字段中使用。 在查询字段或提交表单数据时,变量会自动进行 URL 编码,但使用 raw 方式提交数据或者直接在 URL 中使用时,必须手动进行 URL 编码 |
HTTP 头 (Headers) | 执行请求时将发送的自定义的 HTTP headers。 应使用与在 HTTP 协议中出现的语法相同的语法列出标题,可选地使用 CURLOPT_HTTPHEADER cURL 选项支持的一些其他功能。 例如: Accept-Charset=utf-8 Accept-Language=en-US Content-Type=application/xml; charset=utf-8 用户宏和 {HOST.*} 宏 和可以在此字段中使用。 从 Zabbix 2.4 开始支持指定自定义头。 |
启用 (Enabled) | 如果选中此复选框,则此场景处于启用状态,否则禁用。 |