Problema squid syslog-ng pipe MySQL

Imagen de sierrica
0 puntos

Tengo un problema referente a cuando envio la informacion que me llega del squid via udp al syslog-ng y quiero enviarlo al mysql.

Para enviarlo al MySQL he leido por ahi, que se manda primero a una pipe para que MySQL lo valla cogiendo. El syslog-ng da una opcion de enviar a la pipe con un template predefinido, pero te mete todo el mensage generado por squid en una unica variable llamada $MSG.

Lo que quiero es poder trabajar con la pipe para poder manipularla y cortar los campos que yo quiera para una insercion mas correcta en la base de datos.

Cuando corto los campos de un log me deja, pero no me deja cuando lo intento hacer a la pipe.

He leido por ahi, que las pipes no envian informacion hasta q no se lee, puede ser q venga por ahi el problema.

aqui dejo mi supuesto script y la parte de destino del conf que he hecho yo. No es que no me lo meta en la base de datos es que ni siquiera me los muestra por pantalla
#!/bin/bash

while [ -e /tmp/mysql/mysql.pipe ]
do
ip=`cut -d\| -f2 /tmp/mysql/mysql.pipe`;
puerto=`cut -d\| -f3 /tmp/mysql/mysql.pipe`;
tiempo_respuesta=`cut -d\| -f11 /tmp/mysql/mysql.pipe`;
fecha=`cut -d\| -f9 /tmp/mysql/mysql.pipe | cut -d: -f1`;
hora=`cut -d\| -f9 /tmp/mysql/mysql.pipe | cut -d: -f2,3,4 | cut -d+ -f1`;
SO=`cut -d\% -f8 /tmp/mysql/mysql.pipe`;
distribucion=`cut -d\% -f13 /tmp/mysql/mysql.pipe`;
navegador=`cut -d\% -f15 /tmp/mysql/mysql.pipe`;
lenguaje=`cut -d\% -f21 /tmp/mysql/mysql.pipe`;
estado_cache=`cut -d\| -f19 /tmp/mysql/mysql.pipe`;
url=`cut -d\| -f23 /tmp/mysql/mysql.pipe`;
echo $url;
echo $estado_cache;
echo ${lenguaje:3};
echo ${navegador:3};
echo ${distribucion:3};
echo ${SO:3};
echo $fecha;
echo ${hora:-1};
echo $puerto;
echo $tiempo_respuesta;
done

mysql -u syslog --password=syslog logs
INSERT INTO squid (ip, host, level, SO, distribucion, navegador, url, lenguaje, puerto, estado_cache, tiempo_respuesta ) VALUES ( '$ip', '$HOST', '$LEVEL','$SO','$distribucion', '$navegador', '$url', '$lenguaje', '$puerto', '$estado_cache', '$tiempo_respuesta' );

syslog-ng.conf

destination d_mysql {
pipe ("/tmp/mysql/mysql.pipe");
};

De esta otra manera funciona pero mete todo el chorizo del squid en la variable $MSG y m lo mete todo en un campo de la base de datos.

syslog-ng.conf

destination d_mysql {
pipe("/tmp/mysql/mysql.pipe"
template("INSERT INTO squid (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));
};

script bueno que funciona metiendolo en la base de datos

#!/bin/bash

if [ -e /tmp/mysql/mysql.pipe ]; then
while [ -e /tmp/mysql/mysql.pipe ]
do
mysql -u syslog --password=syslog logs < /tmp/mysql/mysql.pipe
done
else
mkdir /tmp/mysql
mkfifo /tmp/mysql/mysql.pipe
fi