Merge pull request #466 from bergware/master

Syslog: add '<custom>' entry in local folder selection
This commit is contained in:
tom mortensen
2019-03-01 16:37:24 -08:00
committed by GitHub
5 changed files with 94 additions and 12 deletions
+48 -5
View File
@@ -22,11 +22,16 @@ $syslog = @(array)parse_ini_file('/boot/config/rsyslog.cfg');
span.span{display:inline-block;width:224px}
</style>
<script>
function localFolder(state) {
if (state) $('#local_folder').show(); else $('#local_folder').hide();
function localFolder(local,time) {
if (local) $('#local_folder').show(time); else $('#local_folder').hide(time);
}
function logOptions(log,time) {
if (log) $('#log_options').show(time); else $('#log_options').hide(time);
}
$(function(){
localFolder(document.syslog.local_server.value);
logOptions(document.syslog.log_rotation.value);
});
</script>
@@ -35,11 +40,11 @@ $(function(){
<input type="hidden" name="#command" value="/webGui/scripts/rsyslog_config">
Local syslog server:
: <span class="span"><select name="local_server" class="narrow" size="1" onchange="localFolder(this.value)">
: <span class="span"><select name="local_server" class="narrow" onchange="localFolder(this.value,'slow')">
<?=mk_option($syslog['local_server'], "", "Disabled")?>
<?=mk_option($syslog['local_server'], "1", "Enabled")?>
</select></span>
<select name="server_protocol" class="narrow" size="1">
<select name="server_protocol" class="narrow">
<?=mk_option($syslog['server_protocol'], "udp", "UDP")?>
<?=mk_option($syslog['server_protocol'], "tcp", "TCP")?>
<?=mk_option($syslog['server_protocol'], "both", "Both")?>
@@ -53,13 +58,51 @@ Local syslog server:
<div markdown="1" id="local_folder" style="display:none">
Local syslog folder:
: <select name="server_folder" class="narrow" size="1">
: <select name="server_folder" class="narrow">
<?=mk_option(0,'','&lt;custom&gt;','disabled')?>
<?foreach ($shares as $share){echo mk_option($syslog['server_folder'], '/mnt/user/'.$share['name'], $share['name']);}?>
</select>
> Select the share folder where the syslogs will be stored.
> It is recommended that you use a share located on the cache drive to prevent array disk spinups.
Local syslog rotation:
: <select name="log_rotation" class="narrow" onchange="logOptions(this.value,'slow')">
<?=mk_option($syslog['log_rotation'], "", "Disabled")?>
<?=mk_option($syslog['log_rotation'], "1", "Enabled")?>
</select>
> By default LOG rotation is disabled and will create a single LOG file of unlimited size.
>
> Enable LOG rotation to limit the size of the LOG file and specify the number of files to keep in the rotation scheme.
<div markdown="1" id="log_options" style="display:none">
Local syslog maximum file size:
: <select name="log_size" class="narrow">
<?=mk_option($syslog['log_size'], '1M', '1 MB')?>
<?=mk_option($syslog['log_size'], '2M', '2 MB')?>
<?=mk_option($syslog['log_size'], '5M', '5 MB')?>
<?=mk_option($syslog['log_size'], '10M', '10 MB')?>
<?=mk_option($syslog['log_size'], '20M', '20 MB')?>
<?=mk_option($syslog['log_size'], '50M', '50 MB')?>
<?=mk_option($syslog['log_size'], '100M', '100 MB')?>
<?=mk_option($syslog['log_size'], '200M', '200 MB')?>
<?=mk_option($syslog['log_size'], '500M', '500 MB')?>
</select>
> Specifies the maximum LOG size. When exceeded LOG rotation will occur.
Local syslog number of files:
: <select name="log_files" class="narrow">
<?=mk_option($syslog['log_files'], '1', '1')?>
<?=mk_option($syslog['log_files'], '2', '2')?>
<?=mk_option($syslog['log_files'], '3', '3')?>
<?=mk_option($syslog['log_files'], '4', '4')?>
</select>
> Specifies the number of additional LOG files to keep in the rotation scheme.
</div>
</div>
Remote syslog server:
@@ -1,6 +1,13 @@
#!/bin/bash
ETC=/etc/rsyslog.conf
USB=/boot/config/rsyslog.local
LOG=/etc/logrotate.d/rsyslog.local
if grep -qP '^#\*\.\* \?remote$' $ETC; then
sed -ri 's/^#(\*\.\* \?remote)$/\1/' $ETC
/etc/rc.d/rc.rsyslogd restart &> /dev/null
if [[ -f $USB ]]; then
cp -f $USB $LOG
chmod 644 $LOG
fi
fi
@@ -1,6 +1,11 @@
#!/bin/bash
ETC=/etc/rsyslog.conf
LOG=/etc/logrotate.d/rsyslog.local
if grep -qP '^\*\.\* \?remote$' $ETC; then
sed -ri 's/^(\*\.\* \?remote)$/#\1/' $ETC
/etc/rc.d/rc.rsyslogd restart &> /dev/null
fi
if [[ -f $LOG ]]; then
rm -f $LOG
fi
@@ -329,7 +329,7 @@ $.ajaxPrefilter(function(s, orig, xhr){
<div class="upgrade_notice" style="display:none"></div>
<div id="header" class="<?=$display['banner']?>">
<div class="logo">
<a href="https://unraid.net"><?readfile("$docroot/webGui/images/UN-logotype-gradient.svg")?></a>
<a href="https://unraid.net" target="_blank"><?readfile("$docroot/webGui/images/UN-logotype-gradient.svg")?></a>
Version: <?=$var['version']?><?=$notes?>
</div>
<div class="block">
@@ -625,4 +625,4 @@ $(function() {
});
</script>
</body>
</html>
</html>
+32 -5
View File
@@ -1,7 +1,9 @@
#!/bin/bash
CONF=/boot/config/rsyslog.conf
CFG=/boot/config/rsyslog.conf
ETC=/etc/rsyslog.conf
USB=/boot/config/rsyslog.local
LOG=/etc/logrotate.d/rsyslog.local
# read settings
source /boot/config/rsyslog.cfg
@@ -19,7 +21,7 @@ fi
# local syslog server
if [[ -n $local_server ]]; then
if ! grep -q '^\$RuleSet remote$' $ETC; then
sed -ri '$a\$RuleSet remote\n\$FileOwner nobody\n\$FileGroup users\n$FileCreateMode 0644\n*.* ?remote' $ETC
sed -ri '$a\$RuleSet remote\n\$FileOwner nobody\n\$FileGroup users\n$FileCreateMode 0666\n\$IncludeConfig /etc/rsyslog.d/*.conf # remote\n*.* ?remote' $ETC
fi
# enable/disable local logging
sed -ri "s/^#?(\*\.\* \?remote)$/$h\1/" $ETC
@@ -35,7 +37,7 @@ if [[ -n $local_server ]]; then
fi
sed -ri "/^\\\$template remote,.*$/d;/^#\\\$UDPServerRun [0-9]+.*$/a\\\$template remote,\"${server_folder:-/mnt/user/system}/syslog-%FROMHOST-IP%.log\"" $ETC
else
sed -ri '/^\$RuleSet remote$/d;/^\$FileOwner nobody$/d;/^\$FileGroup users$/d;/^\$FileCreateMode 0644$/d;/^\*\.\* \?remote$/d;/^\$template remote,".*"$/d;/^\$Input(TCP|UDP)ServerBindRuleset remote$/d;/^\$(InputTCP|UDP)ServerRun [0-9]+$/d;s/^#?\$(ModLoad imtcp|ModLoad imudp)/#\$\1/' $ETC
sed -ri '/^\$RuleSet remote$/d;/^\$FileOwner nobody$/d;/^\$FileGroup users$/d;/^\$FileCreateMode 06[46][46]$/d;/^\$IncludeConfig \/etc\/rsyslog\.d\/\*\.conf # remote$/d;/^\*\.\* \?remote$/d;/^\$template remote,".*"$/d;/^\$Input(TCP|UDP)ServerBindRuleset remote$/d;/^\$(InputTCP|UDP)ServerRun [0-9]+$/d;s/^#?\$(ModLoad imtcp|ModLoad imudp)/#\$\1/' $ETC
fi
# remote syslog server
@@ -57,11 +59,36 @@ else
fi
# copy conf to flash (read settings on reboot)
todos <$ETC >$CONF
todos <$ETC >$CFG
# keep local logging disabled at startup
# disk mount and disk unmount events are used to start/stop logging
sed -ri 's/^(\*\.\* \?remote)/#\1/' $CONF
sed -ri 's/^(\*\.\* \?remote)/#\1/' $CFG
# update syslog rotation
if [[ -n $local_server ]]; then
if [[ -n $log_rotation ]]; then
cat <<- EOF > $LOG
$server_folder/*.log {
su nobody users
missingok
create 0666 nobody users
size $log_size
rotate $log_files
sharedscripts
postrotate
/bin/kill -HUP \$(cat /var/run/rsyslogd.pid 2>/dev/null) 2>/dev/null || true
endscript
}
EOF
chmod 644 $LOG
# keep copy on flash
cp -f $LOG $USB
else
# clean up
rm -f $LOG $USB
fi
fi
# update syslog daemon
/etc/rc.d/rc.rsyslogd restart &> /dev/null