Назад | Перейти на главную страницу

Syslog-ng - файл журнала 6-дневной давности изменен при записи в текущий файл журнала

Почти каждый раз, когда syslog-ng записывает в текущий файл журнала, он обращается к файлу журнала за 6 дней до этого. Он не записывает никаких данных в старые файлы журналов, а просто обновляет их последнюю измененную метку времени. Скриншот файлов журнала

Я не уверен на 100%, почему он перестал обновлять последнюю измененную метку времени файлов от 26-го и 27-го числа незадолго до полудня за последние два дня, но я думаю, что это может быть просто совпадением. Я перезапустил службу syslog-ng и службу syslog хоста VMware примерно в это же время в последние два дня, и это могло остановить обращение к старым файлам. При этом я снова перезапустил службы сегодня утром, и это все еще происходит.

В настоящее время мы собираем журналы с 24 хостов VMware. Файлы журнала каждого хоста хранятся в отдельном каталоге с новым файлом каждый день. Это происходит только с файлами журнала с одного хоста. Все имена хостов очень похожи (group1-esx01… 08, group2-esx01… 08, group3-esx01… 08), поэтому не похоже, что проблема фильтрации объясняет, почему это происходит только с журналами, расположенными в одной папке. .

Мы используем файл syslog-ng.conf по умолчанию и помещаем наши конфигурации в один файл, расположенный в каталоге conf.d. Этот файл выглядит так:

#Global network listener
source s_network {
    network(
        ip("1.1.1.1")
        port(1514)
        max-connections(100)
        transport("tls")
        tls(
            key_file("/etc/syslog-ng/cert/PrivateKey.pem")
            cert_file("/etc/syslog-ng/cert/PublicKey.pem")
            peer_verify(optional-untrusted)
        )
    );
};
#VMware
#Dir for each host, file for each day.
destination d_vmware {
    file(
        "/var/log/vmware/$HOST/$YEAR$MONTH$DAY.log"
        perm(0644)
        create_dirs(yes)
    );
};

#Only get data from machines who's hostname starts with the prefixes of the various blade groups.
filter f_vmware {
    host("group1-esx*" type(glob)) or
    host("group2-esx*" type(glob)) or
    host("group3-esx*" type(glob));
};

#From global listener to VMware dest
log {
    source(s_network);
    filter(f_vmware);
    destination(d_vmware);
};

Я считаю, что найти кого-то, кто сталкивался с этим раньше, - довольно долгий путь. Однако я надеюсь, что кто-то хотя бы знает, с чего начать.

Спасибо за ваше время.

Редактировать: Быстрое обновление, в 12:12 в файле 20170728.log перестала обновляться последняя измененная метка времени, а в файле 20170729.log началось обновление последней измененной метки времени.

С тех пор я установил неизменяемость 20170729.log и получаю сообщение «Отказано в разрешении» при попытке прикоснуться к файлу как root, как и ожидалось. Однако время последнего изменения все еще обновляется! Я также не вижу сообщений syslog-ng об ошибках. Странные вещи.

Edit2: Я нашел решение! По умолчанию syslog-ng использует метку времени в сообщениях, которые он получает, как метку времени записи журнала, что имеет смысл. Таким образом, была большая вероятность, что проблема заключалась в отправке хостом сообщений журнала на сервер syslog-ng. Я думаю, что он регулярно отправлял пустое сообщение с неправильной датой в метке времени. В любом случае, вместо того, чтобы углубляться во все, что может генерировать сообщения журнала в ESXi, я просто перенес виртуальные машины с затронутого хоста и перезагрузил его. Кажется, что на данный момент проблема решена, и для меня этого достаточно, поскольку мы заменим этот набор серверов в ближайшем будущем.