如何在Zabbix前端创建主机的一个简单控制台?

2022-02-10 08:43:17 浏览数 (1)

张金龙 | 宏时数据技术工程师

在不同的场景中,通过在不同的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成员尝试一下。

0 人点赞