日志控制

日志控制

我在电网供电非常差的地方使用 Ubuntu 16.04 运行 Zabbix 服务器。即使使用 UPS,Zabbix 服务器也经常会宕机。由于整栋楼都断电,我无法知道 Zabbix 服务器宕机了多长时间。

管理层需要知道服务器停机了多长时间。如何读取日志文件(使用脚本或单个命令)来确定 Zabbix 服务器的停机时间?

答案1

如果您是回顾性地谈论,那么假设 ubuntu 16.04 上有合理的默认值,您可以使用以下选项(也可能是其他选项...可能是 auditd?)来检查活动:

  1. systemd 日志
  2. 日志文件/var/log/{auth,kern,syslog}.log
  3. 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

这给了我日志文件中的行,指示服务器关闭然后启动的日期和时间。暂时,我必须制作一个电子表格来计算停机时间。也许我会在某个时候编写一个脚本来自动执行此操作。

相关内容