github.com/verrazzano/verrazzano@v1.7.1/application-operator/controllers/wlsworkload/weblogic_logging.go (about)

     1  // Copyright (c) 2020, 2022, Oracle and/or its affiliates.
     2  // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     3  
     4  package wlsworkload
     5  
     6  import (
     7  	"fmt"
     8  
     9  	v1 "k8s.io/api/core/v1"
    10  )
    11  
    12  const (
    13  	storageVolumeName   = "weblogic-domain-storage-volume"
    14  	workloadType        = "weblogic"
    15  	scratchVolMountPath = "/scratch"
    16  )
    17  
    18  // WlsFluentdParsingRules defines the FLUENTD parsing rules for WLS
    19  const WlsFluentdParsingRules = `<match fluent.**>
    20    @type null
    21  </match>
    22  <source>
    23    @type tail
    24    path "#{ENV['SERVER_LOG_PATH']}"
    25    pos_file /tmp/server.log.pos
    26    read_from_head true
    27    tag server_log
    28    <parse>
    29  	@type multiline
    30  	format_firstline /^####/
    31  	format1 /^####<(?<timestamp>(.*?))>/
    32  	format2 / <(?<level>(.*?))>/
    33  	format3 / <(?<subSystem>(.*?))>/
    34  	format4 / <(?<serverName>(.*?))>/
    35  	format5 / <(?<serverName2>(.*?))>/
    36  	format6 / <(?<threadName>(.*?))>/
    37  	format7 / <(?<info1>(.*?))>/
    38  	format8 / <(?<info2>(.*?))>/
    39  	format9 / <(?<info3>(.*?))>/
    40  	format10 / <(?<sequenceNumber>(.*?))>/
    41  	format11 / <\[severity-value: (?<severity>(\d+))\].*?>/
    42  	format12 / <(?<messageID>(.*?))>/
    43  	format13 / <(?<message>([\s\S]*?))>\s*$/
    44  	time_key timestamp
    45    </parse>
    46  </source>
    47  <source>
    48    @type tail
    49    path "#{ENV['DOMAIN_LOG_PATH']}"
    50    pos_file /tmp/domain.log.pos
    51    read_from_head true
    52    tag domain_log
    53    <parse>
    54  	@type multiline
    55  	format_firstline /^####/
    56  	format1 /^####<(?<timestamp>(.*?))>/
    57  	format2 / <(?<level>(.*?))>/
    58  	format3 / <(?<subSystem>(.*?))>/
    59  	format4 / <(?<serverName>(.*?))>/
    60  	format5 / <(?<serverName2>(.*?))>/
    61  	format6 / <(?<threadName>(.*?))>/
    62  	format7 / <(?<info1>(.*?))>/
    63  	format8 / <(?<info2>(.*?))>/
    64  	format9 / <(?<info3>(.*?))>/
    65  	format10 / <(?<sequenceNumber>(.*?))>/
    66  	format11 / <\[severity-value: (?<severity>(\d+))\].*?>/
    67  	format12 / <(?<messageID>(.*?))>/
    68  	format13 / <(?<message>([\s\S]*?))>\s*$/
    69  	time_key timestamp
    70    </parse>
    71  </source>
    72  <source>
    73    @type tail
    74    path "#{ENV['ACCESS_LOG_PATH']}"
    75    pos_file /tmp/access.log.pos
    76    read_from_head true
    77    tag server_access_log
    78    <parse>
    79  	@type none
    80    </parse>
    81  </source>
    82  <source>
    83    @type tail
    84    path "#{ENV['NODEMANAGER_LOG_PATH']}"
    85    pos_file /tmp/nodemanager.log.pos
    86    read_from_head true
    87    tag server_nodemanager_log
    88    <parse>
    89  	@type none
    90    </parse>
    91  </source>
    92  <filter **>
    93    @type record_transformer
    94    <record>
    95      domainUID "#{ENV['DOMAIN_UID']}"
    96      oam.applicationconfiguration.namespace "#{ENV['NAMESPACE']}"
    97      oam.applicationconfiguration.name "#{ENV['APP_CONF_NAME']}"
    98      oam.component.namespace "#{ENV['NAMESPACE']}"
    99      oam.component.name "#{ENV['COMPONENT_NAME']}"
   100      verrazzano.cluster.name "#{ENV['CLUSTER_NAME']}"
   101    </record>
   102  </filter>
   103  <filter server_log>
   104    @type record_transformer
   105    <record>
   106      wls_log_stream "server_log"
   107    </record>
   108  </filter>
   109  <filter domain_log>
   110    @type record_transformer
   111    <record>
   112      wls_log_stream "domain_log"
   113    </record>
   114  </filter>
   115  <filter server_access_log>
   116    @type record_transformer
   117    <record>
   118      wls_log_stream "server_access_log"
   119    </record>
   120  </filter>
   121  <filter server_nodemanager_log>
   122    @type record_transformer
   123    <record>
   124      wls_log_stream "server_nodemanager_log"
   125    </record>
   126  </filter>
   127  <match **>
   128    @type stdout
   129  </match>
   130  `
   131  
   132  // getWlsSpecificContainerEnv builds WLS specific env vars
   133  func getWlsSpecificContainerEnv(logHome string, domainName string) []v1.EnvVar {
   134  	return []v1.EnvVar{
   135  		{
   136  			Name: "DOMAIN_UID",
   137  			ValueFrom: &v1.EnvVarSource{
   138  				FieldRef: &v1.ObjectFieldSelector{
   139  					FieldPath: "metadata.labels['weblogic.domainUID']",
   140  				},
   141  			},
   142  		},
   143  		{
   144  			Name: "SERVER_NAME",
   145  			ValueFrom: &v1.EnvVarSource{
   146  				FieldRef: &v1.ObjectFieldSelector{
   147  					FieldPath: "metadata.labels['weblogic.serverName']",
   148  				},
   149  			},
   150  		},
   151  		{
   152  			Name:  "SERVER_LOG_PATH",
   153  			Value: getWLSServerLogPath(logHome, domainName),
   154  		},
   155  		{
   156  			Name:  "ACCESS_LOG_PATH",
   157  			Value: getWLSServerAccessLogPath(logHome, domainName),
   158  		},
   159  		{
   160  			Name:  "NODEMANAGER_LOG_PATH",
   161  			Value: getWLSServerNodeManagerPath(logHome, domainName),
   162  		},
   163  		{
   164  			Name:  "DOMAIN_LOG_PATH",
   165  			Value: getWLSDomainLogPath(logHome, domainName),
   166  		},
   167  	}
   168  }
   169  
   170  func getWLSLogPath(logHome string, domainName string) string {
   171  	return getWLSServerLogPath(logHome, domainName) + "," + getWLSServerAccessLogPath(logHome, domainName) + "," + getWLSServerNodeManagerPath(logHome, domainName) + "," + getWLSDomainLogPath(logHome, domainName)
   172  }
   173  
   174  func getWLSServerLogPath(logHome string, domainName string) string {
   175  	return getLogPath(logHome, domainName, "$(SERVER_NAME)")
   176  }
   177  
   178  func getWLSServerAccessLogPath(logHome string, domainName string) string {
   179  	return getLogPath(logHome, domainName, "$(SERVER_NAME)_access")
   180  }
   181  
   182  func getWLSServerNodeManagerPath(logHome string, domainName string) string {
   183  	return getLogPath(logHome, domainName, "$(SERVER_NAME)_nodemanager")
   184  }
   185  
   186  func getWLSDomainLogPath(logHome string, domainName string) string {
   187  	return getLogPath(logHome, domainName, "$(DOMAIN_UID)")
   188  }
   189  
   190  func getLogPath(logHome string, domainName string, logName string) string {
   191  	if logHome == "" {
   192  		logHome = getWLSLogHome(domainName)
   193  	}
   194  	return fmt.Sprintf("%s/%s.log", logHome, logName)
   195  }
   196  
   197  // getWLSLogHome builds a log home give a WebLogic domain name
   198  func getWLSLogHome(domainName string) string {
   199  	return fmt.Sprintf("%s/logs/%s", scratchVolMountPath, domainName)
   200  }