Syslog-ng MySQL: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
(Новая: =Запись логов в MySQL= В syslog-ng есть возможность передавать логи на обработку внешним программам. Соотве...)
 
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Linux]]
  +
[[Категория:Syslog-ng]]
 
=Запись логов в MySQL=
 
=Запись логов в MySQL=
  +
Эта статья устарела. Есть нативный способ!!!!
   
 
В syslog-ng есть возможность передавать логи на обработку внешним программам. Соответвенно, запись в БД на самом деле - передача данных на вход sql-клиента
 
В syslog-ng есть возможность передавать логи на обработку внешним программам. Соответвенно, запись в БД на самом деле - передача данных на вход sql-клиента
Строка 9: Строка 12:
 
# Log to aradia SQL
 
# Log to aradia SQL
 
destination d_mysql_aradia_table_switch_log {
 
destination d_mysql_aradia_table_switch_log {
program("/usr/bin/mysql -h aradia.airbites.kh.ua --user=syslogpaster --password='PaSteToMysqL' syslog < /etc/syslog-ng/mysql.pipe");
+
program("/usr/bin/mysql -h my.host.net --user=syslog_user --password='syslog_password' syslog < /etc/syslog-ng/mysql.pipe");
 
pipe ("/etc/syslog-ng/mysql.pipe"
 
pipe ("/etc/syslog-ng/mysql.pipe"
 
template("INSERT INTO switch_log (host, facility, priority, level, tag, date, time, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL','$TAG','$YEAR-$MONTH-$DAY', '$HOUR:$MIN
 
template("INSERT INTO switch_log (host, facility, priority, level, tag, date, time, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL','$TAG','$YEAR-$MONTH-$DAY', '$HOUR:$MIN
Строка 16: Строка 19:
 
};
 
};
 
</PRE>
 
</PRE>
  +
Обратить внимание на перенос строки в темплейте. Без него работать не будет.
  +
  +
<PRE>
  +
CREATE TABLE switch_log (
  +
host varchar(32) default NULL,
  +
facility varchar(10) default NULL,
  +
priority varchar(10) default NULL,
  +
level varchar(10) default NULL,
  +
tag varchar(10) default NULL,
  +
date date default NULL,
  +
time time default NULL,
  +
program varchar(15) default NULL,
  +
msg text,
  +
seq int(10) unsigned NOT NULL auto_increment,
  +
local_time timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  +
PRIMARY KEY (seq),
  +
KEY host (host),
  +
KEY seq (seq),
  +
KEY program (program),
  +
KEY time (time),
  +
KEY date (date),
  +
KEY priority (priority),
  +
KEY facility (facility)
  +
) TYPE=InnoDB;
  +
</PRE>
  +
  +
  +
  +
{{Note| Из проблем можно отметить, что в случае краша удаленного MySQL fifo накапливает запросы на что расходуется память. У меня это вызвало отказ syslog
  +
<PRE>
  +
[4687242.151816] Out of Memory: Kill process 3536 (mysqld) score 5345 and children.
  +
[4687242.151824] Out of memory: Killed process 3536 (mysqld).
  +
[4687242.334453] Out of Memory: Kill process 3540 (mysqld) score 5345 and children.
  +
[4687242.334465] Out of memory: Killed process 3540 (mysqld).
  +
[4687242.334897] Out of Memory: Kill process 4076 (php-cgi) score 5301 and children.
  +
[4687242.334905] Out of memory: Killed process 4263 (php-cgi).
  +
[4687242.345109] Out of Memory: Kill process 4076 (php-cgi) score 3976 and children.
  +
[4687242.345120] Out of memory: Killed process 4264 (php-cgi).
  +
[4687242.354943] Out of Memory: Kill process 4076 (php-cgi) score 2650 and children.
  +
[4687242.354955] Out of memory: Killed process 4076 (php-cgi).
  +
</PRE>
  +
}}

Текущая версия на 13:08, 17 апреля 2012

Запись логов в MySQL

Эта статья устарела. Есть нативный способ!!!!

В syslog-ng есть возможность передавать логи на обработку внешним программам. Соответвенно, запись в БД на самом деле - передача данных на вход sql-клиента (pipe нужно создать предварительно)

# mkfifo /etc/syslog-ng/mysql.pipe


# Log to aradia  SQL
destination d_mysql_aradia_table_switch_log {
              program("/usr/bin/mysql -h my.host.net  --user=syslog_user --password='syslog_password' syslog < /etc/syslog-ng/mysql.pipe");
              pipe ("/etc/syslog-ng/mysql.pipe"
              template("INSERT INTO switch_log  (host, facility, priority, level, tag, date, time, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL','$TAG','$YEAR-$MONTH-$DAY', '$HOUR:$MIN
")
              template-escape(yes));
};

Обратить внимание на перенос строки в темплейте. Без него работать не будет.

CREATE TABLE switch_log (
    host varchar(32) default NULL,
    facility varchar(10) default NULL,
    priority varchar(10) default NULL,
    level varchar(10) default NULL,
    tag varchar(10) default NULL,
    date date default NULL,
    time time default NULL,
    program varchar(15) default NULL,
    msg text,
    seq int(10) unsigned NOT NULL auto_increment,
    local_time timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (seq),
    KEY host (host),
    KEY seq (seq),
    KEY program (program),
    KEY time (time),
    KEY date (date),
    KEY priority (priority),
    KEY facility (facility)
) TYPE=InnoDB;


Note: Из проблем можно отметить, что в случае краша удаленного MySQL fifo накапливает запросы на что расходуется память. У меня это вызвало отказ syslog
[4687242.151816] Out of Memory: Kill process 3536 (mysqld) score 5345 and children.
[4687242.151824] Out of memory: Killed process 3536 (mysqld).
[4687242.334453] Out of Memory: Kill process 3540 (mysqld) score 5345 and children.
[4687242.334465] Out of memory: Killed process 3540 (mysqld).
[4687242.334897] Out of Memory: Kill process 4076 (php-cgi) score 5301 and children.
[4687242.334905] Out of memory: Killed process 4263 (php-cgi).
[4687242.345109] Out of Memory: Kill process 4076 (php-cgi) score 3976 and children.
[4687242.345120] Out of memory: Killed process 4264 (php-cgi).
[4687242.354943] Out of Memory: Kill process 4076 (php-cgi) score 2650 and children.
[4687242.354955] Out of memory: Killed process 4076 (php-cgi).