[syslog-ng]FIFO / pipe destination problem

Howell, Matt syslog-ng@lists.balabit.hu
Mon, 14 Feb 2005 17:50:59 -0700


This may end up being something really easy that I am missing, but I =
have been struggling with it for a couple days.  Googling the problem =
has yet to review any fruitful answers.

I am trying to pass messages to MySQL via the pipe() function.  I am =
working with syslog-ng 1.6.5-6 compiled from source for Fedora Core 3.  =
I have setup a FIFO in the filesystem as follows:

[root@furw tmp]# mkfifo mysql.pipe
[root@furw tmp]# chmod 0600 mysql.pipe
[root@furw tmp]# ls -al
...
drwxrwxrwt  24 root       root        4096 Feb 14 17:38 .
drwxr-xr-x    23 root       root        4096 Feb 11 16:00 ..
prw-------        1 root       root             0  Feb 14 17:38 =
mysql.pipe
...

I then created my syslog-ng.conf file:

...
options {
    sync (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

source src {
    unix-stream ("/dev/log");
    internal();
    udp(ip(0.0.0.0) port(514));
};

destination d_mysql {
    pipe("/tmp/mysql.pipe" template("INSERT INTO logs (host, facility, =
priority, level, tag, date,  time, program, msg) VALUES ( '$HOST', =
'$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY', =
'$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes));
};

destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" sync(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_mlal { usertty("*"); };

filter f_filter1   { facility(kern); };
filter f_filter2   { level(info..emerg) and not =
facility(mail,authpriv,cron); };
filter f_filter3   { facility(authpriv); };
filter f_filter4   { facility(mail); };
filter f_filter5   { level(emerg); };
filter f_filter6   { facility(uucp) or (facility(news) and =
level(crit..emerg)); };
filter f_filter7   { facility(local7); };
filter f_filter8   { facility(cron); };

#log { source(src); filter(f_filter1); destination(d_cons); };
log { source(src); filter(f_filter2); destination(d_mysql); };
log { source(src); filter(f_filter2); destination(d_mesg); };
log { source(src); filter(f_filter3); destination(d_auth); };
log { source(src); filter(f_filter4); destination(d_mail); };
log { source(src); filter(f_filter5); destination(d_mlal); };
log { source(src); filter(f_filter6); destination(d_spol); };
log { source(src); filter(f_filter7); destination(d_boot); };
log { source(src); filter(f_filter8); destination(d_cron); };
...

Then I started syslog-ng and received the following errors in =
/var/log/messages:

...
Feb 14 16:21:59 furw syslog-ng[21895]: Cannot open file =
/var/run/mysql.pipe for writing (Permission denied)
...


When I run an strace on the file, I  get the following:

...
uname({sys=3D"Linux", node=3D"furw", ...})  =3D 0
stat64("/etc/localtime", {st_mode=3DS_IFREG|0644, st_size=3D130, ...}) =
=3D 0
open("/tmp/mysql.pipe", O_RDWR|O_NONBLOCK|O_NOCTTY|O_LARGEFILE) =3D -1 =
EACCES (Permission denied)
chown32("/tmp/mysql.pipe", 0, 0)        =3D -1 EACCES (Permission =
denied)
chmod("/tmp/mysql.pipe", 0600)          =3D -1 EACCES (Permission =
denied)
time(NULL)                              =3D 1108422581
stat64("/etc/localtime", {st_mode=3DS_IFREG|0644, st_size=3D130, ...}) =
=3D 0
...


Does anyone have an idea of why syslog-ng cannot read my pipe?  I am =
open to ideas...

-Matt