diff --git a/files/image_config/rsyslog/rsyslog-config.sh b/files/image_config/rsyslog/rsyslog-config.sh index 9c2da978011..0760a04546c 100755 --- a/files/image_config/rsyslog/rsyslog-config.sh +++ b/files/image_config/rsyslog/rsyslog-config.sh @@ -25,8 +25,18 @@ fi hostname=$(hostname) +syslog_with_osversion=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "syslog_with_osversion") +if [ -z "$syslog_with_osversion" ]; then + syslog_with_osversion="false" +fi + +os_version=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v build_version) +if [ -z "$os_version" ]; then + os_version="Unknown" +fi + sonic-cfggen -d -t /usr/share/sonic/templates/rsyslog.conf.j2 \ - -a "{\"udp_server_ip\": \"$udp_server_ip\", \"hostname\": \"$hostname\", \"docker0_ip\": \"$docker0_ip\"}" \ + -a "{\"udp_server_ip\": \"$udp_server_ip\", \"hostname\": \"$hostname\", \"docker0_ip\": \"$docker0_ip\", \"forward_with_osversion\": \"$syslog_with_osversion\", \"os_version\": \"$os_version\"}" \ > /etc/rsyslog.conf systemctl restart rsyslog diff --git a/files/image_config/rsyslog/rsyslog.conf.j2 b/files/image_config/rsyslog/rsyslog.conf.j2 index 7958e74bf95..a7067750dd6 100644 --- a/files/image_config/rsyslog/rsyslog.conf.j2 +++ b/files/image_config/rsyslog/rsyslog.conf.j2 @@ -58,7 +58,14 @@ $UDPServerRun 514 $template SONiCFileFormat,"%timegenerated:::date-year% %timegenerated%.%timegenerated:::date-subseconds% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" $ActionFileDefaultTemplate SONiCFileFormat $template SONiCForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" +$template SONiCForwardFormatWithOsVersion,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% {{os_version}} %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" + +{% if forward_with_osversion and forward_with_osversion == "true" %} +$ActionForwardDefaultTemplate SONiCForwardFormatWithOsVersion +{% else%} $ActionForwardDefaultTemplate SONiCForwardFormat +{% endif%} + template(name="WelfRemoteFormat" type="string" string="%TIMESTAMP% id=firewall time=\"%timereported\ :::date-year%-%timereported:::date-month%-%timereported:::date-day% %timereported:::date-hour%:%timereported:::date-minute%:%timereported\ @@ -86,7 +93,15 @@ template(name="WelfRemoteFormat" type="string" string="%TIMESTAMP% id=firewall t {% set fmodifier = '!' if filter == 'exclude' else '' %} {% set device = vrf if vrf != '' and vrf != 'default' -%} -{% set template = 'WelfRemoteFormat' if format == 'welf' else 'SONiCForwardFormat' -%} + +{% if format == 'welf' %} +{% set template = 'WelfRemoteFormat'%} +{% elif forward_with_osversion and forward_with_osversion == "true"%} +{% set template = 'SONiCForwardFormatWithOsVersion'%} +{% else%} +{% set template = 'SONiCForwardFormat'%} +{% endif%} + {# Server extra options -#} {% set options = '' -%} diff --git a/src/sonic-config-engine/tests/sample_output/py3/rsyslog.conf b/src/sonic-config-engine/tests/sample_output/py3/rsyslog.conf index 6a2aecf9e19..deb03a737d8 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/rsyslog.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/rsyslog.conf @@ -43,8 +43,11 @@ $UDPServerRun 514 $template SONiCFileFormat,"%timegenerated:::date-year% %timegenerated%.%timegenerated:::date-subseconds% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" $ActionFileDefaultTemplate SONiCFileFormat $template SONiCForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" +$template SONiCForwardFormatWithOsVersion,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" + $ActionForwardDefaultTemplate SONiCForwardFormat + template(name="WelfRemoteFormat" type="string" string="%TIMESTAMP% id=firewall time=\"%timereported\ :::date-year%-%timereported:::date-month%-%timereported:::date-day% %timereported:::date-hour%:%timereported:::date-minute%:%timereported\ :::date-second%\" fw=\"kvm-host\" pri=%syslogpriority% msg=\"%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\"\n") @@ -57,6 +60,8 @@ template(name="WelfRemoteFormat" type="string" string="%TIMESTAMP% id=firewall t # forwarding via UDP and plain TCP. It is a built-in module that does not need # to be loaded. + + *.* action(type="omfwd" Target="3.3.3.3" Port="514" Protocol="udp" Template="SONiCForwardFormat") diff --git a/src/sonic-config-engine/tests/sample_output/py3/rsyslog_with_docker0.conf b/src/sonic-config-engine/tests/sample_output/py3/rsyslog_with_docker0.conf index f6a340e0053..1bdfd0c3220 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/rsyslog_with_docker0.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/rsyslog_with_docker0.conf @@ -45,8 +45,11 @@ $UDPServerRun 514 $template SONiCFileFormat,"%timegenerated:::date-year% %timegenerated%.%timegenerated:::date-subseconds% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" $ActionFileDefaultTemplate SONiCFileFormat $template SONiCForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" +$template SONiCForwardFormatWithOsVersion,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogseverity-text:::uppercase% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" + $ActionForwardDefaultTemplate SONiCForwardFormat + template(name="WelfRemoteFormat" type="string" string="%TIMESTAMP% id=firewall time=\"%timereported\ :::date-year%-%timereported:::date-month%-%timereported:::date-day% %timereported:::date-hour%:%timereported:::date-minute%:%timereported\ :::date-second%\" fw=\"kvm-host\" pri=%syslogpriority% msg=\"%syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\"\n") @@ -59,6 +62,8 @@ template(name="WelfRemoteFormat" type="string" string="%TIMESTAMP% id=firewall t # forwarding via UDP and plain TCP. It is a built-in module that does not need # to be loaded. + + *.* action(type="omfwd" Target="3.3.3.3" Port="514" Protocol="udp" Template="SONiCForwardFormat") diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json index 59a56d8a0c3..b5edd201481 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json @@ -669,5 +669,14 @@ } } } + }, + "DEVICE_METADATA_SYSLOG_WITH_OS_VERSION_ENABLED": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "syslog_with_osversion": true + } + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang index 0711a6e0f5d..dedb9cb4fcc 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -299,6 +299,12 @@ module sonic-device_metadata { type string; description "Set source of anchor route"; } + + leaf syslog_with_osversion { + type boolean; + description "Enable syslog with OS version feature."; + default "false"; + } } /* end of container localhost */ }