5、物理主机搭建KF2服务端-服务端配置批量修改

目录 运维

按上一篇教程,我们已经完成了Zabbix平台的基础配置,并完成了客户端的自动发现和注册。接下来我们要批量配置服务端的名称,也算是对Zabbix的第一项功能的实现。我的服务端名称的配置格式标准如下

(CN) FY-GameCommunity-Server_1_QQ:518877410
(CN) FY-GameCommunity-Server_2_QQ:518877410
(CN) FY-GameCommunity-Server_3_QQ:518877410
(CN) FY-GameCommunity-Server_4_QQ:518877410
......

注意:发布命令前请确保命令的正确性,可以创建一台模版服务端来进行命令测试,以免造成不可逆后果。

大部分内容固定,其中编号变化。这个编号可以按照IP地址来生成。比如IP 192.168.0.170 取最后一段170减去169 结果为1。但我们如果要计算,则使用bc完成。但bc并不是系统初始就自带的,所以我们首先得批量安装bc

左侧菜单选择配置-模版-监控项,点击创建监控项。

监控项名字随意填写,接下去选择键值。

键值选择system.run,表示在主机上执行指定的命令。

在键值中输入下面的代码,意思是判断/usr/bin目录下是否有bc这个文件,如果没有就使用apt安装bc。间隔随意填写,然后保存即可。

system.run["[ -f /usr/bin/bc ] || sudo apt-get install bc -y"]

静等一会,等待服务端到点后下发安装命令。

echo "(CN)FY-GameCommunity-Server_"$(echo $(ip addr | grep -E -o ”192.168.0.1[7-9][0-9]“ | awk -F \. '{printf $4}') - 169 | bc)"_QQ:518877410"

上面这条命令,就可以根据IP地址,生成带有编号的名称。但是这样还不够,我们还得配合sed命令将这串字符写入配置文件中的指定位置。然后我们得出下面这个命令

sudo sed -i "s/ServerName=.*/ServerName=$(echo "(CN)FY-GameCommunity-Server_"$(echo $(hostname -I | awk -F \. "{printf $4}") - 169 | bc)"_QQ:518877410")/g" /home/steamcmd/KF2Server/KFGame/Config/LinuxServer-KFGame.ini

但是在zabbix监控项中,我们需要用字符串框住整条命令,并转译其中的双引号。

system.run["sudo sed -i \"s/ServerName=.*/ServerName=$(echo \"(CN)FY-GameCommunity-Server_\"$(echo $(hostname -I | awk -F \\. '{printf $4}') - 169 | bc)\"_QQ:518877410\")/g\" /home/steamcmd/KF2Server/KFGame/Config/LinuxServer-KFGame.ini"]

接下来我们创建监控项等待所有服务端更新完成即可。

注意:像这类一次性的监控项调整完成后建议将它停用

关闭所有服务端的托管功能

KF2服务端默认开启托管功能,这是一个很坑的功能。大厅玩家匹配时会自动将这些服务端的难度长度和密码更改。但是TWI坑,相当坑,一旦上密码后就没法恢复成无密码的状态哪怕里面人全部走光了,导致整个服务端被锁死。这个配置项在LinuxServer-KFEngine.ini配置文件中的bUsedForTake项。true为开启,false为关闭。

这次我们要配合触发器来使用,首先新建一个监控项目,键值选择system.run。并将下面的指令填入。

sudo cat /home/steamcmd/KF2Server/KFGame/Config/LinuxServer-KFEngine.ini | grep bUsedForTake | awk -F = '{printf $2}'

这串指令意思是读取LinuxServer-KFEngine.ini下带有bUsedForTake的一行,然后将结果用awk 以=号为依据切割,去除切割出的第2份内容,也就是该键值的参数TRUE或FALSE。因为返回的值是字符,信息类型选择字符,否则会产生报错。更新间隔随意。

新建一个触发器,名称随意,能代表意思即可,严重性随意。

点击问题表现形式中的添加按钮,监控项选择上一步创建的托管状态监控项,计数选择1,结果是等于TRUE。意思就是当最新的值等于TRUE时会导致触发器触发。

然后新建一个恢复表达式,监控项还是选择托管状态,计数为1,结果等于FALSE。意思就是当最新的值等于FALSE时,触发器关闭。

问题事件生成模式选择单个即可,多重的话,只要托管状态是TRUE,那么就会一直触发触发器。然后点击保存即可

接下来到管理-脚本 新建一个脚本。名称随意,表达意思即可,类型选择脚本。命令如下

sudo sed -i "s/bUsedForTakeover=TRUE/bUsedForTakeover=FALSE/g" /home/steamcmd/KF2Server/KFGame/Config/LinuxServer-KFEngine.ini

意思是用sed命令将LinuxServer-KFEngine.ini中的bUsedForTakeover=TRUE替换为bUsedForTakeover=FALSE

填完后点击添加即可。

接下来我们需要添加一个动作,将触发器与脚本联动起来。

点击配置-动作选择Trigger actions 在其中创建一个新的动作,动作名称随意,但推荐包含这个动作的含义。条件点击添加,加入原先配置的KF2托管功能的触发器。

接下来切换到操作块在下面的操作项点击添加,Operation选择刚刚创建的关闭托管功能的脚本,目标列表选择当前主机,也就是哪台主机触发,给哪台主机执行,然后点击Add在点击保存静等即可。

接下去的自动流程就是,Zabbix服务端让客户端获取LinuxServer-KFEngine.ini配置文件中的托管功能的值并将值返回服务端,服务端进行判断,如果值是TRUE也就是托管功能开启,那么就触发触发器报警,动作因为触发器的报警被执行,向触发的主机发送并执行关闭托管功能的脚本。

等下一次Zabbix服务端让客户端获取值时,如果值为FALSE,那么就触发触发器的恢复表达式,问题解决。

这样一套流程下来,20台服务端的托管功能都会被自动关闭掉,就算以后用KF2服务端模版继续拷贝一台,新服务端只要被Zabbix发现并加入模版,那么托管功能就会被自动关闭。

开启网页管理

默认情况下,KF2服务端默认不开启网页管理,如果我们需要开启的话,按照上面的几个步骤,新增一个监控项,监控键值选择system.run并填入以下指令

sudo sed -i "s/bEnabled=.*/bEnabled=true/g" /home/steamcmd/KF2Server/KFGame/Config/KFWeb.ini

即可批量开启网页管理功能。

下一篇:https://deployment.net.cn/?p=1252