mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Currently, filtered syslog messages (via syslog_filter) are spewed into stdout (unlike unfiltered ones), presumably for debugging. When syslog.php has been invoked from rsyslog, writing to stdout results in an EPIPE which is unhandled and hence syslog.php dies. Remove them, as they're completely redundant and of dubious gains to debugging.
168 lines
6.1 KiB
PHP
Executable File
168 lines
6.1 KiB
PHP
Executable File
<?php
|
|
|
|
// FIXME : use db functions properly
|
|
|
|
# $device_id_host = @dbFetchCell("SELECT device_id FROM devices WHERE `hostname` = '".mres($entry['host'])."' OR `sysName` = '".mres($entry['host'])."'");
|
|
|
|
# $device_id_ip = @dbFetchCell("SELECT device_id FROM ipv4_addresses AS A, ports AS I WHERE A.ipv4_address = '" . $entry['host']."' AND I.port_id = A.port_id");
|
|
|
|
function get_cache($host, $value)
|
|
{
|
|
global $dev_cache;
|
|
|
|
if (!isset($dev_cache[$host][$value]))
|
|
{
|
|
switch($value)
|
|
{
|
|
case 'device_id':
|
|
// Try by hostname
|
|
$dev_cache[$host]['device_id'] = dbFetchCell('SELECT `device_id` FROM devices WHERE `hostname` = ? OR `sysName` = ?', array($host, $host));
|
|
// If failed, try by IP
|
|
if (!is_numeric($dev_cache[$host]['device_id']))
|
|
{
|
|
$dev_cache[$host]['device_id'] = dbFetchCell('SELECT `device_id` FROM `ipv4_addresses` AS A, `ports` AS I WHERE A.ipv4_address = ? AND I.port_id = A.port_id', array($host));
|
|
}
|
|
break;
|
|
case 'os':
|
|
$dev_cache[$host]['os'] = dbFetchCell('SELECT `os` FROM devices WHERE `device_id` = ?', array(get_cache($host, 'device_id')));
|
|
break;
|
|
case 'version':
|
|
$dev_cache[$host]['version'] = dbFetchCell('SELECT `version` FROM devices WHERE `device_id`= ?', array(get_cache($host, 'device_id')));
|
|
break;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
return $dev_cache[$host][$value];
|
|
}
|
|
|
|
function process_syslog($entry, $update)
|
|
{
|
|
global $config, $dev_cache;
|
|
|
|
foreach ($config['syslog_filter'] as $bi)
|
|
{
|
|
if (strpos($entry['msg'], $bi) !== FALSE)
|
|
{
|
|
return $entry;
|
|
}
|
|
}
|
|
|
|
$entry['device_id'] = get_cache($entry['host'], 'device_id');
|
|
if ($entry['device_id'])
|
|
{
|
|
$os = get_cache($entry['host'], 'os');
|
|
|
|
if (in_array($os, array('ios', 'iosxe', 'catos')))
|
|
{
|
|
$matches = array();
|
|
# if (preg_match('#%(?P<program>.*):( ?)(?P<msg>.*)#', $entry['msg'], $matches)) {
|
|
# $entry['msg'] = $matches['msg'];
|
|
# $entry['program'] = $matches['program'];
|
|
# }
|
|
# unset($matches);
|
|
|
|
if (strstr($entry[msg], "%"))
|
|
{
|
|
$entry['msg'] = preg_replace("/^%(.+?):\ /", "\\1||", $entry['msg']);
|
|
list(,$entry[msg]) = split(": %", $entry['msg']);
|
|
$entry['msg'] = "%" . $entry['msg'];
|
|
$entry['msg'] = preg_replace("/^%(.+?):\ /", "\\1||", $entry['msg']);
|
|
}
|
|
else
|
|
{
|
|
$entry['msg'] = preg_replace("/^.*[0-9]:/", "", $entry['msg']);
|
|
$entry['msg'] = preg_replace("/^[0-9][0-9]\ [A-Z]{3}:/", "", $entry['msg']);
|
|
$entry['msg'] = preg_replace("/^(.+?):\ /", "\\1||", $entry['msg']);
|
|
}
|
|
|
|
$entry['msg'] = preg_replace("/^.+\.[0-9]{3}:/", "", $entry['msg']);
|
|
$entry['msg'] = preg_replace("/^.+-Traceback=/", "Traceback||", $entry['msg']);
|
|
|
|
list($entry['program'], $entry['msg']) = explode("||", $entry['msg']);
|
|
$entry['msg'] = preg_replace("/^[0-9]+:/", "", $entry['msg']);
|
|
|
|
if (!$entry['program'])
|
|
{
|
|
$entry['msg'] = preg_replace("/^([0-9A-Z\-]+?):\ /", "\\1||", $entry['msg']);
|
|
list($entry['program'], $entry['msg']) = explode("||", $entry['msg']);
|
|
}
|
|
|
|
if (!$entry['msg']) { $entry['msg'] = $entry['program']; unset ($entry['program']); }
|
|
|
|
} elseif($os == 'linux' and get_cache($entry['host'], 'version') == 'Point') {
|
|
// Cisco WAP200 and similar
|
|
$matches = array();
|
|
if (preg_match('#Log: \[(?P<program>.*)\] - (?P<msg>.*)#', $entry['msg'], $matches)) {
|
|
$entry['msg'] = $matches['msg'];
|
|
$entry['program'] = $matches['program'];
|
|
}
|
|
unset($matches);
|
|
|
|
} elseif($os == 'linux') {
|
|
$matches = array();
|
|
// User_CommonName/123.213.132.231:39872 VERIFY OK: depth=1, /C=PL/ST=Malopolska/O=VLO/CN=v-lo.krakow.pl/emailAddress=root@v-lo.krakow.pl
|
|
if ($entry['facility'] == 'daemon' and preg_match('#/([0-9]{1,3}\.) {3}[0-9]{1,3}:[0-9]{4,} ([A-Z]([A-Za-z])+( ?)) {2,}:#', $entry['msg']))
|
|
{
|
|
$entry['program'] = 'OpenVPN';
|
|
}
|
|
// pop3-login: Login: user=<username>, method=PLAIN, rip=123.213.132.231, lip=123.213.132.231, TLS
|
|
// POP3(username): Disconnected: Logged out top=0/0, retr=0/0, del=0/1, size=2802
|
|
elseif($entry['facility'] == 'mail' and preg_match('#^(((pop3|imap)\-login)|((POP3|IMAP)\(.*\))):', $entry['msg']))
|
|
{
|
|
$entry['program'] = 'Dovecot';
|
|
}
|
|
// pam_krb5(sshd:auth): authentication failure; logname=root uid=0 euid=0 tty=ssh ruser= rhost=123.213.132.231
|
|
// pam_krb5[sshd:auth]: authentication failure; logname=root uid=0 euid=0 tty=ssh ruser= rhost=123.213.132.231
|
|
elseif(preg_match('#^(?P<program>(.*((\(|\[).*(\)|\])))):(?P<msg>.*)$#', $entry['msg'], $matches))
|
|
{
|
|
$entry['msg'] = $matches['msg'];
|
|
$entry['program'] = $matches['program'];
|
|
}
|
|
|
|
// SYSLOG CONNECTION BROKEN; FD='6', SERVER='AF_INET(123.213.132.231:514)', time_reopen='60'
|
|
// pam_krb5: authentication failure; logname=root uid=0 euid=0 tty=ssh ruser= rhost=123.213.132.231
|
|
// Disabled because broke this:
|
|
// diskio.c: don't know how to handle 10 request
|
|
#elseif($pos = strpos($entry['msg'], ';') or $pos = strpos($entry['msg'], ':')) {
|
|
# $entry['program'] = substr($entry['msg'], 0, $pos);
|
|
# $entry['msg'] = substr($entry['msg'], $pos+1);
|
|
#}
|
|
// fallback, better than nothing...
|
|
elseif(empty($entry['program']) and !empty($entry['facility']))
|
|
{
|
|
$entry['program'] = $entry['facility'];
|
|
}
|
|
unset($matches);
|
|
}
|
|
|
|
if (!isset($entry['program']))
|
|
{
|
|
$entry['program'] = $entry['msg'];
|
|
unset($entry['msg']);
|
|
}
|
|
|
|
$entry['program'] = strtoupper($entry['program']);
|
|
array_walk($entry, 'trim');
|
|
|
|
if ($update)
|
|
dbInsert(
|
|
array(
|
|
'device_id' => $entry['device_id'],
|
|
'program' => $entry['program'],
|
|
'facility' => $entry['facility'],
|
|
'priority' => $entry['priority'],
|
|
'level' => $entry['level'],
|
|
'tag' => $entry['tag'],
|
|
'msg' => $entry['msg'],
|
|
'timestamp' => $entry['timestamp']
|
|
),
|
|
'syslog'
|
|
);
|
|
unset($os);
|
|
}
|
|
return $entry;
|
|
}
|
|
|
|
?>
|