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 }