[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