@@ -30,8 +30,9 @@ func TestNewConfigForPgBackrestRepoHostPod(t *testing.T) {
3030 }
3131 var instrumentation * v1beta1.InstrumentationSpec
3232 require .UnmarshalInto (t , & instrumentation , `{}` )
33-
34- config := NewConfigForPgBackrestRepoHostPod (ctx , instrumentation , repos )
33+ cluster := testCluster ()
34+ cluster .Spec .Instrumentation = instrumentation
35+ config := NewConfigForPgBackrestRepoHostPod (ctx , cluster , repos )
3536
3637 result , err := config .ToYAML ()
3738 assert .NilError (t , err )
@@ -136,8 +137,8 @@ service:
136137 Volume : new (v1beta1.RepoPVC ),
137138 },
138139 }
139-
140- config := NewConfigForPgBackrestRepoHostPod (ctx , testInstrumentationSpec () , repos )
140+ cluster := testCluster ()
141+ config := NewConfigForPgBackrestRepoHostPod (ctx , cluster , repos )
141142
142143 result , err := config .ToYAML ()
143144 assert .NilError (t , err )
@@ -231,6 +232,119 @@ service:
231232 - groupbyattrs/compact
232233 receivers:
233234 - filelog/pgbackrest_log
235+ ` )
236+ })
237+
238+ t .Run ("LogPathDefined" , func (t * testing.T ) {
239+ gate := feature .NewGate ()
240+ assert .NilError (t , gate .SetFromMap (map [string ]bool {
241+ feature .OpenTelemetryLogs : true ,
242+ }))
243+ ctx := feature .NewContext (context .Background (), gate )
244+ repos := []v1beta1.PGBackRestRepo {
245+ {
246+ Name : "repo1" ,
247+ Volume : new (v1beta1.RepoPVC ),
248+ },
249+ }
250+ cluster := testCluster ()
251+ cluster .Spec .Backups .PGBackRest .RepoHost .Log = & v1beta1.LoggingConfiguration {
252+ Path : "/test/path" ,
253+ }
254+ config := NewConfigForPgBackrestRepoHostPod (ctx , cluster , repos )
255+
256+ result , err := config .ToYAML ()
257+ assert .NilError (t , err )
258+ assert .DeepEqual (t , result , `# Generated by postgres-operator. DO NOT EDIT.
259+ # Your changes will not be saved.
260+ exporters:
261+ debug:
262+ verbosity: detailed
263+ googlecloud:
264+ log:
265+ default_log_name: opentelemetry.io/collector-exported-log
266+ project: google-project-name
267+ extensions:
268+ file_storage/pgbackrest_logs:
269+ create_directory: false
270+ directory: /test/path/receiver
271+ fsync: true
272+ processors:
273+ batch/1s:
274+ timeout: 1s
275+ batch/200ms:
276+ timeout: 200ms
277+ batch/logs:
278+ send_batch_size: 8192
279+ timeout: 200ms
280+ groupbyattrs/compact: {}
281+ resource/pgbackrest:
282+ attributes:
283+ - action: insert
284+ key: k8s.container.name
285+ value: pgbackrest
286+ - action: insert
287+ key: k8s.namespace.name
288+ value: ${env:K8S_POD_NAMESPACE}
289+ - action: insert
290+ key: k8s.pod.name
291+ value: ${env:K8S_POD_NAME}
292+ - action: insert
293+ key: process.executable.name
294+ value: pgbackrest
295+ resourcedetection:
296+ detectors: []
297+ override: false
298+ timeout: 30s
299+ transform/pgbackrest_logs:
300+ log_statements:
301+ - statements:
302+ - set(instrumentation_scope.name, "pgbackrest")
303+ - set(instrumentation_scope.schema_url, "https://opentelemetry.io/schemas/1.29.0")
304+ - 'merge_maps(log.cache, ExtractPatterns(log.body, "^(?<timestamp>\\d{4}-\\d{2}-\\d{2}
305+ \\d{2}:\\d{2}:\\d{2}\\.\\d{3}) (?<process_id>P\\d{2,3})\\s*(?<error_severity>\\S*):
306+ (?<message>(?s).*)$"), "insert") where Len(log.body) > 0'
307+ - set(log.severity_text, log.cache["error_severity"]) where IsString(log.cache["error_severity"])
308+ - set(log.severity_number, SEVERITY_NUMBER_TRACE) where log.severity_text ==
309+ "TRACE"
310+ - set(log.severity_number, SEVERITY_NUMBER_DEBUG) where log.severity_text ==
311+ "DEBUG"
312+ - set(log.severity_number, SEVERITY_NUMBER_DEBUG2) where log.severity_text ==
313+ "DETAIL"
314+ - set(log.severity_number, SEVERITY_NUMBER_INFO) where log.severity_text ==
315+ "INFO"
316+ - set(log.severity_number, SEVERITY_NUMBER_WARN) where log.severity_text ==
317+ "WARN"
318+ - set(log.severity_number, SEVERITY_NUMBER_ERROR) where log.severity_text ==
319+ "ERROR"
320+ - set(log.time, Time(log.cache["timestamp"], "%Y-%m-%d %H:%M:%S.%L")) where
321+ IsString(log.cache["timestamp"])
322+ - set(log.attributes["process.pid"], log.cache["process_id"])
323+ - set(log.attributes["log.record.original"], log.body)
324+ - set(log.body, log.cache["message"])
325+ receivers:
326+ filelog/pgbackrest_log:
327+ include:
328+ - /test/path/*.log
329+ - /test/path/*.log.1
330+ multiline:
331+ line_start_pattern: ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}|^-{19}
332+ storage: file_storage/pgbackrest_logs
333+ service:
334+ extensions:
335+ - file_storage/pgbackrest_logs
336+ pipelines:
337+ logs/pgbackrest:
338+ exporters:
339+ - googlecloud
340+ processors:
341+ - resource/pgbackrest
342+ - transform/pgbackrest_logs
343+ - resourcedetection
344+ - batch/logs
345+ - groupbyattrs/compact
346+ receivers:
347+ - filelog/pgbackrest_log
234348` )
235349 })
236350}
0 commit comments