open-telemetry / opentelemetry-cpp-contrib

https://opentelemetry.io/
Apache License 2.0
123 stars 137 forks source link

`nginx: [emerg] "NginxModuleEnabled" directive is duplicate in /etc/nginx/conf.d/opentelemetry_module.conf:1` #379

Closed MarcusDunn closed 7 months ago

MarcusDunn commented 7 months ago

Basically following instructions from https://opentelemetry.io/blog/2022/instrument-nginx/ but with newer versions.

nginx.conf

load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/1.25.3/ngx_http_opentelemetry_module.so;

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/conf.d/opentelemetry_module.conf;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

Dockerfile

FROM nginx:1.25.3

RUN apt-get update ; apt-get install unzip
ADD https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/download/webserver%2Fv1.0.4/opentelemetry-webserver-sdk-x64-linux.tgz /opt/opentelemetry-webserver-sdk-x64-linux.tgz.zip
RUN cd /opt ; unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip; tar xvfz opentelemetry-webserver-sdk-x64-linux.tgz
RUN cd /opt/opentelemetry-webserver-sdk; ./install.sh
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib
COPY ./app/docker/default.conf.template /etc/nginx/templates/default.conf.template
COPY ./app/docker/nginx.conf /etc/nginx/nginx.conf
COPY ./app/docker/opentelemetry_module.conf /etc/nginx/conf.d/opentelemetry_module.conf
COPY --from=BUILD /usr/src/app/dist /usr/share/nginx/html

opentelemetry_module.conf

NginxModuleEnabled ON;
NginxModuleOtelSpanExporter otlp;
NginxModuleOtelExporterEndpoint http://opentel-collector-collector:4317;
NginxModuleServiceName frontend-nginx;
NginxModuleServiceNamespace Nonprod;
NginxModuleServiceInstanceId Gateway;
NginxModuleResolveBackends ON;
NginxModuleTraceAsError ON;

Logs

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
20-envsubst-on-templates.sh: Running envsubst on /etc/nginx/templates/default.conf.template to /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/02/08 21:30:14 [emerg] 1#1: "NginxModuleEnabled" directive is duplicate in /etc/nginx/conf.d/opentelemetry_module.conf:1
nginx: [emerg] "NginxModuleEnabled" directive is duplicate in /etc/nginx/conf.d/opentelemetry_module.conf:1

When removing the NginxModuleEnabled ON; directive I get the same error but the next line in the config.

MarcusDunn commented 7 months ago

pretty sure I'm just an idiot.

    include /etc/nginx/conf.d/*.conf;

includes the /etc/nginx/conf.d/opentelemetry_module.conf; again (also included by include /etc/nginx/conf.d/opentelemetry_module.conf;