早上6点,收到zabbix的告警,说有一台服务器重启了。回到公司后马上查看系统日志,发现只有这些记录:这不是作弊吗!肯定是意外关机了,但为什么会意外关机呢?这个问题需要后续跟进,暂时不讨论,因为有一个比较紧急的故障需要处理:filebeat无法启动。由于系统无法启动,我们去服务管理端试试:运行-进入services.msc找到filebeat服务后,手动启动失败,报错:谷歌搜索后,找到解决办法:我的电脑-->右键-->管理-->本地用户和组;选择“组”-->双击管理员-->点击“添加”-->点击“高级”-->点击“立即查找”-->在下面的列表中选择网络服务用户-->点击“OK”两次-->已加入,但没有成功。进入filebeat的根目录,尝试手动运行filebeat.exe,发现可以执行,说明程序没有问题,于是怀疑是服务管理报错导致重启机器,所以我尝试重新安装filebeat服务,但该服务仍然无法启动。查看filebeat日志,发现报错:Errordecodingoldstate:invalidcharacter'\x00'lookingforbeginningofvalue大致思路是:decodetheoldstate时,有一个invalidcharacter'\x00',这个和json解析失败的错误很像!这与json有关吗?这个json肯定和日志的json无关。应该是和一些配置的json有关,但是会改的配置不多,所以应该存放记录文件offset:registery.json的配置。然后到根目录的data目录下查看下面的registery.old和registery,不过是两个正常的json文件,并没有所谓的'\x00',尴尬了好吧。。考虑到有手动执行没问题,但是通过服务管理器启动失败,是不是启动方式姿势不对导致的?废话少说,复制服务器启动方法试试:filebeat-右键属性-可执行文件的路径在暗黑的CMD窗口中运行:虽然我们得到同样的错误,但是我们似乎发现了不对的地方,-path.data"c"\\ProgramData\\filebeat",这个目录应该是存放文件偏移位置的目录,但是为什么不在filebeat的根目录下呢?难道这是注册服务时默认的?可能导致的json文件问题就出在这里,直接去目录查看,果然有注册表文件,用notepadd++打开,终于找到原因:文件内容全是乱码,原因应该是系统关机了异常,并且程序没有正常退出,导致写入乱码,导致filbeat重新读取时无法解析。删除文件后,filebeat正常启动!本次排查告一段落,谢谢大家。
