-
Notifications
You must be signed in to change notification settings - Fork 63
/
settings.go
119 lines (101 loc) · 3.06 KB
/
settings.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Copyright (c) F5, Inc.
//
// This source code is licensed under the Apache License, Version 2.0 license found in the
// LICENSE file in the root directory of this source tree.
package collector
import (
_ "embed"
"log/slog"
"os"
"path/filepath"
"text/template"
"github.com/nginx/agent/v3/internal/config"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/converter/expandconverter"
"go.opentelemetry.io/collector/confmap/provider/envprovider"
"go.opentelemetry.io/collector/confmap/provider/fileprovider"
"go.opentelemetry.io/collector/confmap/provider/httpprovider"
"go.opentelemetry.io/collector/confmap/provider/httpsprovider"
"go.opentelemetry.io/collector/confmap/provider/yamlprovider"
"go.opentelemetry.io/collector/otelcol"
)
const (
otelTemplatePath = "otelcol.tmpl"
configFilePermission = 0o600
)
//go:embed otelcol.tmpl
var otelcolTemplate string
func OTelCollectorSettings(cfg *config.Config) otelcol.CollectorSettings {
return otelcol.CollectorSettings{
Factories: OTelComponentFactories,
BuildInfo: BuildInfo(cfg),
DisableGracefulShutdown: false,
ConfigProviderSettings: ConfigProviderSettings(cfg),
LoggingOptions: nil,
SkipSettingGRPCLogger: false,
}
}
// ConfigProviderSettings are the settings to configure the behavior of the ConfigProvider.
func ConfigProviderSettings(cfg *config.Config) otelcol.ConfigProviderSettings {
return otelcol.ConfigProviderSettings{
ResolverSettings: confmap.ResolverSettings{
ProviderFactories: createProviderFactories(),
ConverterFactories: createConverterFactories(),
URIs: createURIs(cfg),
},
}
}
func createProviderFactories() []confmap.ProviderFactory {
providerConfig := []confmap.ProviderFactory{
envprovider.NewFactory(),
fileprovider.NewFactory(),
httpprovider.NewFactory(),
httpsprovider.NewFactory(),
yamlprovider.NewFactory(),
}
return providerConfig
}
func createConverterFactories() []confmap.ConverterFactory {
converterConfig := []confmap.ConverterFactory{
expandconverter.NewFactory(),
}
return converterConfig
}
func createURIs(cfg *config.Config) []string {
return []string{cfg.Collector.ConfigPath}
}
// Generates a OTel Collector config to a file by injecting the Metrics Config to a Go template.
func writeCollectorConfig(conf *config.Collector) error {
otelcolTemplate, err := template.New(otelTemplatePath).Parse(otelcolTemplate)
if err != nil {
return err
}
confPath := filepath.Clean(conf.ConfigPath)
// Check if file exists.
_, err = os.Stat(confPath)
if err != nil {
if !os.IsNotExist(err) {
return err
}
// Create if doesn't exist.
_, createErr := os.Create(confPath)
if createErr != nil {
return createErr
}
}
file, err := os.OpenFile(confPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, configFilePermission)
defer func() {
err = file.Close()
if err != nil {
slog.Warn("Failed to close file", "file_path", confPath)
}
}()
if err != nil {
return err
}
err = otelcolTemplate.Execute(file, conf)
if err != nil {
return err
}
return nil
}