feat: OpenTelemetry module integration (#9062)
* OpenTelemetry module integration * e2e test * e2e test fix * default OpentelemetryConfig * e2e values * mount otel module for otel test only * propagate IS_CHROOT * propagate IS_CHROOT e2e test * code doc * comments * golint * opentelemetry doc * zipkin * zipkin * typo * update e2e test OpenTelemetry value * use opentelemetry value * revert merge conflict * fix * format * review comments * clean
This commit is contained in:
parent
c075793ae5
commit
c8cb9167d3
23 changed files with 1131 additions and 2 deletions
|
|
@ -673,6 +673,11 @@ func (n *NGINXController) OnUpdate(ingressCfg ingress.Configuration) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = createOpentelemetryCfg(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = n.testTemplate(content)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -1056,6 +1061,29 @@ const datadogTmpl = `{
|
|||
"dd.priority.sampling": {{ .DatadogPrioritySampling }}
|
||||
}`
|
||||
|
||||
const otelTmpl = `
|
||||
exporter = "otlp"
|
||||
processor = "batch"
|
||||
|
||||
[exporters.otlp]
|
||||
# Alternatively the OTEL_EXPORTER_OTLP_ENDPOINT environment variable can also be used.
|
||||
host = "{{ .OtlpCollectorHost }}"
|
||||
port = {{ .OtlpCollectorPort }}
|
||||
|
||||
[processors.batch]
|
||||
max_queue_size = {{ .OtelMaxQueueSize }}
|
||||
schedule_delay_millis = {{ .OtelScheduleDelayMillis }}
|
||||
max_export_batch_size = {{ .OtelMaxExportBatchSize }}
|
||||
|
||||
[service]
|
||||
name = "{{ .OtelServiceName }}" # Opentelemetry resource name
|
||||
|
||||
[sampler]
|
||||
name = "{{ .OtelSampler }}" # Also: AlwaysOff, TraceIdRatioBased
|
||||
ratio = {{ .OtelSamplerRatio }}
|
||||
parent_based = {{ .OtelSamplerParentBased }}
|
||||
`
|
||||
|
||||
func createOpentracingCfg(cfg ngx_config.Configuration) error {
|
||||
var tmpl *template.Template
|
||||
var err error
|
||||
|
|
@ -1091,6 +1119,21 @@ func createOpentracingCfg(cfg ngx_config.Configuration) error {
|
|||
return os.WriteFile("/etc/nginx/opentracing.json", []byte(expanded), file.ReadWriteByUser)
|
||||
}
|
||||
|
||||
func createOpentelemetryCfg(cfg ngx_config.Configuration) error {
|
||||
|
||||
tmpl, err := template.New("otel").Parse(otelTmpl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tmplBuf := bytes.NewBuffer(make([]byte, 0))
|
||||
err = tmpl.Execute(tmplBuf, cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(cfg.OpentelemetryConfig, tmplBuf.Bytes(), file.ReadWriteByUser)
|
||||
}
|
||||
|
||||
func cleanTempNginxCfg() error {
|
||||
var files []string
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue