我在电网供电非常差的地方使用 Ubuntu 16.04 运行 Zabbix 服务器。即使使用 UPS,Zabbix 服务器也经常会宕机。由于整栋楼都断电,我无法知道 Zabbix 服务器宕机了多长时间。
管理层需要知道服务器停机了多长时间。如何读取日志文件(使用脚本或单个命令)来确定 Zabbix 服务器的停机时间?
答案1
如果您是回顾性地谈论,那么假设 ubuntu 16.04 上有合理的默认值,您可以使用以下选项(也可能是其他选项...可能是 auditd?)来检查活动:
- systemd 日志
- 日志文件
/var/log/{auth,kern,syslog}.log
等 - Zabbix 服务器本身
日志控制
我认为 ubuntu 上禁用了启动日志的持久性,因此journalctl -b
可能没什么用。但是没有什么可以阻止你存储日志条目,并从所有 cron 和守护进程相关的日志中查看哪些时间段是“停机时间”。
下面将以小时为单位转储 systemd 日志中过去 1 周的日志条目数。您可以轻松查看是否存在停机时间...
START_STRING="1 week ago"
FORMAT="%Y-%m-%d %H:%M:%S"
next_date=$(date +%s -d "$START_STRING")
while [ "$next_date" -le "$(date +%s)" ]; do
curr_date=$next_date
next_date=$(date +%s -d "@$((next_date + 3600))")
curr_data_iso=$(date +"$FORMAT" -d "@$curr_date")
next_date_iso=$(date +"$FORMAT" -d "@$next_date")
echo -n "$curr_data_iso $next_date_iso "
count=$(journalctl --quiet --no-pager --since "$curr_data_iso" --until "$next_date_iso" | wc -l )
echo -n " $count "
[ $count -gt 100 ] && nummer=100 || nummer=$count
printf '=%.0s' $(seq 1 $nummer)
echo ""
done
echo ""
输出是这样的
2018-02-05 03:44:26 2018-02-05 04:44:26 15 ===============
2018-02-05 04:44:26 2018-02-05 05:44:26 9 =========
2018-02-05 05:44:26 2018-02-05 06:44:26 18 ==================
2018-02-05 06:44:26 2018-02-05 07:44:26 9 =========
2018-02-05 07:44:26 2018-02-05 08:44:26 9 =========
2018-02-05 08:44:26 2018-02-05 09:44:26 9 =========
2018-02-05 09:44:26 2018-02-05 10:44:26 9 =========
2018-02-05 10:44:26 2018-02-05 11:44:26 121 ====================================================================================================
2018-02-05 11:44:26 2018-02-05 12:44:26 9 =========
2018-02-05 12:44:26 2018-02-05 13:44:26 9 =========
2018-02-05 13:44:26 2018-02-05 14:44:26 9 =========
2018-02-05 14:44:26 2018-02-05 15:44:26 9 =========
2018-02-05 15:44:26 2018-02-05 16:44:26 9 =========
2018-02-05 16:44:26 2018-02-05 17:44:26 9 =========
2018-02-05 17:44:26 2018-02-05 18:44:26 9 =========
2018-02-05 18:44:26 2018-02-05 19:44:26 9 =========
2018-02-05 19:44:26 2018-02-05 20:44:26 12 ============
2018-02-05 20:44:26 2018-02-05 21:44:26 9 =========
2018-02-05 21:44:26 2018-02-05 22:44:26 11 ===========
2018-02-05 22:44:26 2018-02-05 23:44:26 9 =========
2018-02-05 23:44:26 2018-02-06 00:44:26 9 =========
2018-02-06 00:44:26 2018-02-06 01:44:26 9 =========
2018-02-06 01:44:26 2018-02-06 02:44:26 16 ================
2018-02-06 02:44:26 2018-02-06 03:44:26 9 =========
2018-02-06 03:44:26 2018-02-06 04:44:26 9 =========
2018-02-06 04:44:26 2018-02-06 05:44:26 0 =
答案2
Zabbix 默认监控自身。如果启动,则有数据;如果未启动,则没有数据。寻找数据中的缺口。
答案3
我能够使用以下命令读取 Ubuntu 日志文件。
grep -E "syslogd:.*(exiting|start)" syslog
这给了我日志文件中的行,指示服务器关闭然后启动的日期和时间。暂时,我必须制作一个电子表格来计算停机时间。也许我会在某个时候编写一个脚本来自动执行此操作。