boombastic Posted September 8, 2015 Коллеги, добрый день. После настройки syslog_ng с хранением сообщений в БД столкнулся с такой проблемой что при ротации таблиц syslog_ng не создаёт индексы к таблице. Конфиг сислога выглядит как: source s_syslog { udp(ip(192.168.6.1) port(514)); }; destination d_mysql { sql(type(mysql) host("127.0.0.1") username("sysloglogin") password("syslogpasswd") database("syslogdb") table("messages_${R_YEAR}-${R_MONTH}-${R_DAY}") columns("datetime", "host", "program", "facility", "level", "message") values("${R_HOUR}:${R_MIN}:${R_SEC}", "$HOST", "$PROGRAM", "$FACILITY", "$LEVEL", "$MSGONLY") indexes("datetime", "host", "program", "facility", "level", "message") ); }; log { source(s_syslog); destination(d_mysql); }; ну и ротация логов выполняется постредством logrotate sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd-ng.pid 2> /dev/null` 2> /dev/null || true endscript Таблица пересоздаётся каждый день , всё вроде бы нормально, однако когда я захожу в мускуль проверить show index from messages_2015_09_08 ; Empty set (0.00 sec) :( Хотя если сделать вручную что-нибудь типа dst_date=`date +%Y_%m_%d` CREATE INDEX index1 ON messages_$dst_date(facility(6), message(120)); То всё проходит на ура. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vseti Posted September 17, 2015 (edited) Коллеги, добрый день. После настройки syslog_ng с хранением сообщений в БД столкнулся с такой проблемой что при ротации таблиц syslog_ng не создаёт индексы к таблице. Конфиг сислога выглядит как: source s_syslog { udp(ip(192.168.6.1) port(514)); }; destination d_mysql { sql(type(mysql) host("127.0.0.1") username("sysloglogin") password("syslogpasswd") database("syslogdb") table("messages_${R_YEAR}-${R_MONTH}-${R_DAY}") columns("datetime", "host", "program", "facility", "level", "message") values("${R_HOUR}:${R_MIN}:${R_SEC}", "$HOST", "$PROGRAM", "$FACILITY", "$LEVEL", "$MSGONLY") indexes("datetime", "host", "program", "facility", "level", "message") ); }; log { source(s_syslog); destination(d_mysql); }; ну и ротация логов выполняется постредством logrotate sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd-ng.pid 2> /dev/null` 2> /dev/null || true endscript Таблица пересоздаётся каждый день , всё вроде бы нормально, однако когда я захожу в мускуль проверить show index from messages_2015_09_08 ; Empty set (0.00 sec) :( Хотя если сделать вручную что-нибудь типа dst_date=`date +%Y_%m_%d` CREATE INDEX index1 ON messages_$dst_date(facility(6), message(120)); То всё проходит на ура. когда то тоже ставил syslog-ng ещё 2 версии с оболочкой php-syslog-ng по тупой статье в интернете была проблема в базе данных тоже, поправил, сейчас уже 4 года работает, перезаливаю каждые 3 месяца файл чистой базы данных, работает на ура. проблему по установке на сервер старой версии решаю так, ставлю новый syslog-ng, удаляю, из пакета сохранённого у себя ставлю старый, закидываю рабочий конфиг и базу и всё. Edited September 17, 2015 by vseti Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...