Skip to content

Commit e6ea78b

Browse files
committed
Store pgAdmin log file positions in the logs directory
This prevents log records from being emitted multiple times.
1 parent d4483cc commit e6ea78b

File tree

5 files changed

+99
-141
lines changed

5 files changed

+99
-141
lines changed

internal/collector/pgadmin.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,20 @@ func EnablePgAdminLogging(ctx context.Context, spec *v1beta1.InstrumentationSpec
2121
return nil
2222
}
2323
otelConfig := NewConfig(spec)
24-
otelConfig.Extensions["file_storage/pgadmin"] = map[string]any{
25-
"directory": "/var/log/pgadmin/receiver",
26-
"create_directory": true,
27-
"fsync": true,
28-
}
29-
otelConfig.Extensions["file_storage/gunicorn"] = map[string]any{
30-
"directory": "/var/log/gunicorn" + "/receiver",
31-
"create_directory": true,
24+
25+
otelConfig.Extensions["file_storage/pgadmin_data_logs"] = map[string]any{
26+
"directory": "/var/lib/pgadmin/logs/receiver",
27+
"create_directory": false,
3228
"fsync": true,
3329
}
3430

3531
otelConfig.Receivers["filelog/pgadmin"] = map[string]any{
3632
"include": []string{"/var/lib/pgadmin/logs/pgadmin.log"},
37-
"storage": "file_storage/pgadmin",
33+
"storage": "file_storage/pgadmin_data_logs",
3834
}
3935
otelConfig.Receivers["filelog/gunicorn"] = map[string]any{
4036
"include": []string{"/var/lib/pgadmin/logs/gunicorn.log"},
41-
"storage": "file_storage/gunicorn",
37+
"storage": "file_storage/pgadmin_data_logs",
4238
}
4339

4440
otelConfig.Processors["resource/pgadmin"] = map[string]any{
@@ -101,7 +97,7 @@ func EnablePgAdminLogging(ctx context.Context, spec *v1beta1.InstrumentationSpec
10197
}
10298

10399
otelConfig.Pipelines["logs/pgadmin"] = Pipeline{
104-
Extensions: []ComponentID{"file_storage/pgadmin"},
100+
Extensions: []ComponentID{"file_storage/pgadmin_data_logs"},
105101
Receivers: []ComponentID{"filelog/pgadmin"},
106102
Processors: []ComponentID{
107103
"resource/pgadmin",
@@ -113,7 +109,7 @@ func EnablePgAdminLogging(ctx context.Context, spec *v1beta1.InstrumentationSpec
113109
}
114110

115111
otelConfig.Pipelines["logs/gunicorn"] = Pipeline{
116-
Extensions: []ComponentID{"file_storage/gunicorn"},
112+
Extensions: []ComponentID{"file_storage/pgadmin_data_logs"},
117113
Receivers: []ComponentID{"filelog/gunicorn"},
118114
Processors: []ComponentID{
119115
"resource/pgadmin",
@@ -125,9 +121,8 @@ func EnablePgAdminLogging(ctx context.Context, spec *v1beta1.InstrumentationSpec
125121
}
126122

127123
otelYAML, err := otelConfig.ToYAML()
128-
if err != nil {
129-
return err
124+
if err == nil {
125+
configmap.Data["collector.yaml"] = otelYAML
130126
}
131-
configmap.Data["collector.yaml"] = otelYAML
132-
return nil
127+
return err
133128
}

internal/collector/pgadmin_test.go

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22
//
33
// SPDX-License-Identifier: Apache-2.0
44

5-
package collector
5+
package collector_test
66

77
import (
88
"context"
99
"testing"
1010

1111
"gotest.tools/v3/assert"
1212
corev1 "k8s.io/api/core/v1"
13+
"sigs.k8s.io/yaml"
1314

15+
"github.com/crunchydata/postgres-operator/internal/collector"
16+
pgadmin "github.com/crunchydata/postgres-operator/internal/controller/standalone_pgadmin"
1417
"github.com/crunchydata/postgres-operator/internal/feature"
1518
"github.com/crunchydata/postgres-operator/internal/initialize"
16-
"github.com/crunchydata/postgres-operator/internal/naming"
1719
"github.com/crunchydata/postgres-operator/internal/testing/cmp"
1820
"github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
1921
)
@@ -27,10 +29,9 @@ func TestEnablePgAdminLogging(t *testing.T) {
2729

2830
ctx := feature.NewContext(context.Background(), gate)
2931

30-
pgadmin := new(v1beta1.PGAdmin)
31-
configmap := &corev1.ConfigMap{ObjectMeta: naming.StandalonePGAdmin(pgadmin)}
32+
configmap := new(corev1.ConfigMap)
3233
initialize.Map(&configmap.Data)
33-
err := EnablePgAdminLogging(ctx, pgadmin.Spec.Instrumentation, configmap)
34+
err := collector.EnablePgAdminLogging(ctx, nil, configmap)
3435
assert.NilError(t, err)
3536

3637
assert.Assert(t, cmp.MarshalMatches(configmap.Data, `
@@ -41,13 +42,9 @@ collector.yaml: |
4142
debug:
4243
verbosity: detailed
4344
extensions:
44-
file_storage/gunicorn:
45-
create_directory: true
46-
directory: /var/log/gunicorn/receiver
47-
fsync: true
48-
file_storage/pgadmin:
49-
create_directory: true
50-
directory: /var/log/pgadmin/receiver
45+
file_storage/pgadmin_data_logs:
46+
create_directory: false
47+
directory: `+pgadmin.LogDirectoryAbsolutePath+`/receiver
5148
fsync: true
5249
processors:
5350
batch/1s:
@@ -86,16 +83,15 @@ collector.yaml: |
8683
receivers:
8784
filelog/gunicorn:
8885
include:
89-
- /var/lib/pgadmin/logs/gunicorn.log
90-
storage: file_storage/gunicorn
86+
- `+pgadmin.GunicornLogFileAbsolutePath+`
87+
storage: file_storage/pgadmin_data_logs
9188
filelog/pgadmin:
9289
include:
93-
- /var/lib/pgadmin/logs/pgadmin.log
94-
storage: file_storage/pgadmin
90+
- `+pgadmin.LogFileAbsolutePath+`
91+
storage: file_storage/pgadmin_data_logs
9592
service:
9693
extensions:
97-
- file_storage/gunicorn
98-
- file_storage/pgadmin
94+
- file_storage/pgadmin_data_logs
9995
pipelines:
10096
logs/gunicorn:
10197
exporters:
@@ -128,12 +124,22 @@ collector.yaml: |
128124

129125
ctx := feature.NewContext(context.Background(), gate)
130126

131-
pgadmin := new(v1beta1.PGAdmin)
132-
pgadmin.Spec.Instrumentation = testInstrumentationSpec()
127+
var spec v1beta1.InstrumentationSpec
128+
assert.NilError(t, yaml.Unmarshal([]byte(`{
129+
config: {
130+
exporters: {
131+
googlecloud: {
132+
log: { default_log_name: opentelemetry.io/collector-exported-log },
133+
project: google-project-name,
134+
},
135+
},
136+
},
137+
logs: { exporters: [googlecloud] },
138+
}`), &spec))
133139

134-
configmap := &corev1.ConfigMap{ObjectMeta: naming.StandalonePGAdmin(pgadmin)}
140+
configmap := new(corev1.ConfigMap)
135141
initialize.Map(&configmap.Data)
136-
err := EnablePgAdminLogging(ctx, pgadmin.Spec.Instrumentation, configmap)
142+
err := collector.EnablePgAdminLogging(ctx, &spec, configmap)
137143
assert.NilError(t, err)
138144

139145
assert.Assert(t, cmp.MarshalMatches(configmap.Data, `
@@ -148,13 +154,9 @@ collector.yaml: |
148154
default_log_name: opentelemetry.io/collector-exported-log
149155
project: google-project-name
150156
extensions:
151-
file_storage/gunicorn:
152-
create_directory: true
153-
directory: /var/log/gunicorn/receiver
154-
fsync: true
155-
file_storage/pgadmin:
156-
create_directory: true
157-
directory: /var/log/pgadmin/receiver
157+
file_storage/pgadmin_data_logs:
158+
create_directory: false
159+
directory: `+pgadmin.LogDirectoryAbsolutePath+`/receiver
158160
fsync: true
159161
processors:
160162
batch/1s:
@@ -193,16 +195,15 @@ collector.yaml: |
193195
receivers:
194196
filelog/gunicorn:
195197
include:
196-
- /var/lib/pgadmin/logs/gunicorn.log
197-
storage: file_storage/gunicorn
198+
- `+pgadmin.GunicornLogFileAbsolutePath+`
199+
storage: file_storage/pgadmin_data_logs
198200
filelog/pgadmin:
199201
include:
200-
- /var/lib/pgadmin/logs/pgadmin.log
201-
storage: file_storage/pgadmin
202+
- `+pgadmin.LogFileAbsolutePath+`
203+
storage: file_storage/pgadmin_data_logs
202204
service:
203205
extensions:
204-
- file_storage/gunicorn
205-
- file_storage/pgadmin
206+
- file_storage/pgadmin_data_logs
206207
pipelines:
207208
logs/gunicorn:
208209
exporters:

0 commit comments

Comments
 (0)