张金龙 | 宏时数据技术工程师
在不同的场景中,通过在不同的Zabbix组件上定义和执行脚本的功能是非常强大的。我们可以在许多不同的用例中执行这些脚本,以修复问题、将告警转发给外部系统等等。在这篇文章中,我们将介绍一个不太为人所知的用例:创建一个可以直接从前端执行不同脚本的控制台。
1.配置缓存
在这个用例中需要使用两个常用的Zabbix运行时命令"zabbix_server -R config_cache_reload"命令和"zabbix_proxy -R config_cache_reload"命令。可以使用这些命令强制Zabbix server和Zabbix proxy组件重新加载配置缓存。
首先,让我们讨论一下这些命令是如何工作的:
这一切都从配置缓存频率开始,它是为中央Zabbix server配置的。看看输出:
代码语言:javascript复制 grep CacheUpdateFrequency= /etc/zabbix/zabbix_server.conf
在Zabbix proxy端,也有类似的设置。让我们来看看:
代码语言:javascript复制 grep ConfigFrequency= /etc/zabbix/zabbix_proxy.conf
在现有安装中,我们为zabbix-server配置了"CacheUpdateFrequency=60",为zabbix-proxy设置了"ConfigFrequency=3600"。这个参数表示Zabbix组件接收我们在GUI中所做的配置更改的速度有多快。
除了频率,我们还有另一个变量:运行一个配置同步周期实际需要的时间。要找到精确的时间值,我们可以使用这个命令:
代码语言:javascript复制 ps auxww | egrep -o "[s]ynced.*sec"
输出将产生如下一行:
代码语言:javascript复制 synced configuration in 14.295782 sec, idle 60 sec
这意味着从数据库加载配置缓存大约需要14秒。然后休息60秒。在那之后,重复这个过程。
当监控设施规模变大时,我们需要对" CacheUpdateFrequency"和"ConfigFrequency"使用更大的值。通过减少配置的重新加载频率,我们可以减轻数据库负载。最佳的性能配置是在"zabbix_server.conf"中设置"CacheUpdateFrequency=3600",并在"zabbix_proxy.conf"中设置"ConfigFrequency=3600"(这是默认值)。
这样的配置会产生一些影响。当我们使用这么大的值时,将会有一个小时的延迟,直到新创建的实体被监控或更改应用到现有的实体。
2.设置脚本
我想介绍一种通过GUI强制重新加载配置的方法。 必须配置一些前提条件:
1.确保"Zabbix server"主机属于"Zabbix servers"主机组。
2.在运行zabbix-server服务的服务器上,配置一个新的sudoers规则:
代码语言:javascript复制 cd /etc/sudoers.d
echo 'zabbix ALL=(ALL) NOPASSWD: /usr/sbin/zabbix_server -R config_cache_reload' | sudo tee zabbix_server_config_cache_reload
chmod 0440 zabbix_server_config_cache_reload
sudoers文件是必需的,因为开箱即用的服务"zabbix-server"运行于用户"zabbix",而用户"zabbix"没有访问本地系统的权限。
3.我们还将创建代表Zabbix proxy的Zabbix主机。这些主机必须属于"Zabbix proxies"主机组。
请注意,在屏幕截图中,主机"127.0.0.1"正在使用"Monitored by proxy"。这是非常重要的,因为在使用代理的用例中我们不关心代理接口,接口可以包含任意地址/DNS名称。我们关心的是"Monitored by proxy"字段。我们的命令将在这里选择的代理上执行。
4.在运行zabbix-proxy服务的服务器上,配置一个新的sudoers规则:
代码语言:javascript复制 cd /etc/sudoers.d
echo 'zabbix ALL=(ALL) NOPASSWD: /usr/sbin/zabbix_proxy -R config_cache_reload' | sudo tee zabbix_proxy_config_cache_reload
chmod 0440 zabbix_proxy_config_cache_reload
5.在"/etc/zabbix/zabbix_proxy.conf"代理配置文件中做如下修改: "EnableRemoteCommands=1". 然后重新启动"zabbix-proxy"服务。
6.打开"Administration" => "Scripts",并定义以下命令: 对于"Zabbix servers"主机组:
代码语言:javascript复制 sudo /usr/sbin/zabbix_server -R config_cache_reload
因为这是我们将要执行的自定义命令,所以脚本的类型将是"script"。第一个脚本将在Zabbix server上执行→通过此命令强制Zabbix server服务器重新加载它的配置缓存。在本例中,所有对Zabbix服务器主机具有"Read"访问权限的用户都能够执行该脚本。您可以根据内部Zabbix策略对其进行限制。
下面你可以看到它该如何配置:
对于"Zabbix proxies"主机组:
代码语言:javascript复制 sudo /usr/sbin/zabbix_proxy -R config_cache_reload
对于proxy脚本,唯一改变的是"Command"和"Execute on"参数,因为现在命令将在Zabbix proxy上执行,Zabbix proxy正在监控目标主机:
3.前端作为控制面板
我更喜欢添加一个附加的主机组"Control panel",其中包含中央Zabbix server服务器和所有Zabbix proxy。
现在,当我们需要重新加载配置缓存时,我们可以打开"Monitoring" => "Hosts",如果添加了主机组"Control panel"可以直接筛选出。然后点击有问题的代理主机,选择"config cache reload proxy":
它需要5秒钟来完成,然后我们将看到脚本执行的结果。执行成功在会输出-"command sent successfully':
顺便说一下,我们也可以把这个页面添加书签。
使用这种方法,您可以为不同类型的任务创建"Control panel"主机组和脚本,您可以直接从Zabbix前端执行这些任务!这使得我们不仅可以使用Zabbix前端进行配置和数据概述,还可以将其作为主机的控制面板。 如果你有任何问题,欢迎评论,同时希望可以分享你在前端使用脚本的用例-请留下评论!您的用例可能会激励许多其他Zabbix成员尝试一下。