[Ovirt-devel] [PATCH node] RSyslog configuration for standalone mode.
Jim Meyering
jim at meyering.net
Fri Nov 7 20:01:30 UTC 2008
Bryan Kearney <bkearney at redhat.com> wrote:
> It looks for a DNS service locator record by default, and lets the
> user override if desired. Supports setting the maximum log file size.
> ---
> scripts/ovirt-config-logging | 139 ++++++++++++++++++++++++++++++++++++++++++
> scripts/ovirt-config-setup | 2 +
> 2 files changed, 141 insertions(+), 0 deletions(-)
>
> diff --git a/scripts/ovirt-config-logging b/scripts/ovirt-config-logging
> index 8b13789..aab1dfe 100755
> --- a/scripts/ovirt-config-logging
> +++ b/scripts/ovirt-config-logging
> @@ -1 +1,140 @@
> +#!/bin/bash
> +#
> +# Configures the rsyslog daemon.
>
> +RSYSLOG_FILE="/etc/rsyslog.conf"
> +
> +# Creates the rsyslog file based on the following inputs
> +# $1 ipaddress of remote syslog server
> +# $2 port of remote syslog server
> +# $3 protocol (tcp or udp)
> +function ovirt_rsyslog {
> +
> +DELIM=""
No need to initialize this.
> +if [[ "$3" = "tcp" ]]; then
> + DELIM="@@"
> +else
> + DELIM="@"
> +fi
> +
> +cat > $RSYSLOG_FILE << EOF
> +#ovirt rsyslog config file
> +
> +#### MODULES ####
> +\$ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)
> +\$ModLoad imklog.so # provides kernel logging support (previously done by rklogd)
> +
> +#### GLOBAL DIRECTIVES ####
> +# Use default timestamp format
> +\$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
> +
> +#### RULES ####
> +# Log anything (except mail) of level info or higher.
> +# Don't log private authentication messages!
> +*.info;mail.none;authpriv.none;cron.none /var/log/messages
> +
> +# The authpriv file has restricted access.
> +authpriv.* /var/log/secure
> +
> +# Log all the mail messages in one place.
> +mail.* -/var/log/maillog
> +
> +# Log cron stuff
> +cron.* /var/log/cron
> +
> +# Everybody gets emergency messages
> +*.emerg *
> +
> +# Save news errors of level crit and higher in a special file.
> +uucp,news.crit /var/log/spooler
> +
> +# Save boot messages also to boot.log
> +local7.* /var/log/boot.log
> +
> +\$WorkDirectory /var/spppl/rsyslog
Should that be "spool"?
> +\$ActionQueueFileName ovirtNode
> +\$ActionQueueMaxDiskSpace 10m
> +\$ActionQueueSaveOnShutdown on
> +\$ActionQueueType LinkedList
> +\$ActionResumeRetryCount -1
> +*.* $DELIM$1:$2
> +EOF
> +
> +/sbin/service rsyslog restart
> +}
> +
> +function prompt_user {
> + while true ; do
> + MAX_LOG_SIZE="10k"
> + printf "\nWhat is the max size for log files on this machine [10k]? "
> + read
> + if [[ "$REPLY" != "" ]]; then
> + MAX_LOG_SIZE=$REPLY
> + fi
> + printf "\nWhat is the IP address or server name for the syslog server? "
> + read
> + SYSLOG_SERVER_IP=$REPLY
> + printf "\nWhat port does the syslog daemon run on? "
> + read
> + if [[ "$REPLY" =~ '^[0-9.]+$' ]]; then
no need for "." in that range
> + SYSLOG_SERVER_PORT=$REPLY
> + NICS="$NICS Quit"
You can remove that NICS= line. not used.
> + PROTOCOLS="tcp udp"
> + PS3="Please select a the protocol to use: "
s/a //
> + select SYSLOG_SERVER_PROTOCOL in $PROTOCOLS;
> + do
> + case $SYSLOG_SERVER_PROTOCOL in
> + "tcp")
> + break ;;
> + "udp")
> + break;;
> + esac
> + done
> +
> + printf "\n"
> + printf "\nLogging will be configured as follows:"
> + printf "\n======================================"
> + printf "\n Max Logfile Size: $MAX_LOG_SIZE"
> + printf "\n Remote Server: $SYSLOG_SERVER_IP"
> + printf "\n Remote Port: $SYSLOG_SERVER_PORT"
> + printf "\n Logging Protocol: $SYSLOG_SERVER_PROTOCOL"
> + printf "\n"
> + printf "\nPlease confirm these changes (Y/N)"
> + read
> + case $REPLY in
> + Y|y)
> + ovirt_rsyslog $SYSLOG_SERVER_IP $SYSLOG_SERVER_PORT $SYSLOG_SERVER_PROTOCOL
Please wrap long lines, e.g.,
ovirt_rsyslog \
$SYSLOG_SERVER_IP \
$SYSLOG_SERVER_PORT \
$SYSLOG_SERVER_PROTOCOL
> + sed -i -e "s/size=.*/size=$MAX_LOG_SIZE/" /etc/logrotate.d/ovirt-logrotate.conf
Same here. And anchor the size= regexp, so as not to munge
an "other_var_size=..." or commented out # size=... line.
sed -i "s/^size=.*/size=$MAX_LOG_SIZE/" \
/etc/logrotate.d/ovirt-logrotate.conf
> + break
> + ;;
> + N|n)
> + printf "\nDiscarding settings"
Put the \n at the end of the message, not at the beginning, here,
since this isn't a prompt.
> + break
> + ;;
> + esac
> + else
> + printf "\nInvalid port number"
Likewise.
> + fi
> + done
> +
> +}
> +
> +# check if we were called to attempt to default
> +# to remote logging
> +if [[ "$1" = "default" ]] ; then
> + printf "\nAttempting to locate remote syslog server..."
> + DEFAULT_SERVER=$(host -N 3 -t srv _syslog._udp | rev | awk '/VRS/ {print $1}' | cut -d. -f2- | rev)
> + DEFAULT_PORT=$(host -N 3 -t srv _syslog._udp | rev | awk '/VRS/ {print $2}' | cut -d. -f2- | rev)
What does the output of that host command look like
when there is such a record?
> + if [[ "$DEFAULT_PORT" != "" ]] && [[ "$DEFAULT_SERVER" != "" ]] ; then
> + printf "found! Useing server '$DEFAULT_SERVER'.\n"
might as well include port #, too:
printf "found! Using server:port '$DEFAULT_SERVER:$DEFAULT_PORT'.\n"
> + ovirt_rsyslog $DEFAULT_SERVER $DEFAULT_PORT "udp"
> + else
> + printf "not found!\n"
> + fi
> +else
> + prompt_user
> +fi
> +
> +exit 0
> diff --git a/scripts/ovirt-config-setup b/scripts/ovirt-config-setup
> index 8408d14..5850aa8 100755
> --- a/scripts/ovirt-config-setup
> +++ b/scripts/ovirt-config-setup
> @@ -2,6 +2,8 @@
> #
> # Entry point for configuring an oVirt node when running in standalone mode.
>
> +#Attempt to default the syslog setting
> +ovirt-config-logging "default"
> while true; do
> PS3="Please select an option: "
> # TODO should we make this optional, based on whether the password was already set?
More information about the ovirt-devel
mailing list