Итак, представьте, что есть ~100 серверов с разными часовыми поясами (не все разные, а много-много часовых поясов). В журналах сервера есть такие записи:
server1:BFE4C025 0420201413 P H sysplanar0 UNDETERMINED ERROR
server2:BFE4C025 0421032413 P H sysplanar0 UNDETERMINED ERROR
-> поэтому они находятся в серверном времени (разные часовые пояса) ->
0420201413 = 2013.04.20. 20:14
0421032413 = 2013.04.21 03:24
Преобразование напр.: 0421032413 в 2013.04.21 03:24 тривиально. Но: снова время сервера отличается, если я даю команду "date" на этих двух серверах в одно и то же время:
server1:Tue Apr 23 07:23:24 EDT 2013
server2:Tue Apr 23 13:23:24 MESZ 2013
Я понял. Но мне нужны упомянутые логи (только несколько строк/серверов) в одном часовом поясе. Зачем? Потому что очень-очень полезно знать, когда именно что-то произошло в вашем часовом поясе, например: CET TZ.
В: как мне перевести время журналов сервера в центральноевропейское время?
решение1
Если вы просто хотите преобразовать существующие файлы syslog, вы можете, например, использовать небольшую программу на Python/Perl/Ruby, чтобы изменить Tue Apr 23 07:23:24 EDT 2013
что-либо с помощью UTC (или CET).
Если вы хотите иметь больше контроля над форматом времени, который записывается в файл журнала, вы можете взглянуть на syslog-ng
. Его tsformat()
функция позволяет вам настроить формат времени, например, на iso8601.
Мне самому приходилось работать с серверами в 5 часовых поясах, поэтому я настоятельно рекомендую использовать временные метки UTC. Поскольку летнее время не начинается в одно и то же время, отслеживание того, что такое CET (или CEST) в PST (или уже PDT), — это кошмар.
решение2
Вы можете использовать date
для печати метки даты и времени и сохранить ее вместе с сообщением журнала.
$ TZ='Europe/Warsaw' date
wto, 23 kwi 2013, 17:11:48 CEST
$ TZ='America/Los_Angeles' date
wto, 23 kwi 2013, 08:11:56 PDT
$ date --universal
wto, 23 kwi 2013, 15:13:14 UTC
Используйте tzselect
для поиска часовых поясов.