open-telemetry / opentelemetry-cpp-contrib

https://opentelemetry.io/
Apache License 2.0
121 stars 130 forks source link

Nginx http module : Agent Core Init failed, result code is 4 #284

Closed fludo closed 1 year ago

fludo commented 1 year ago

Describe your environment Environnement: ubuntu lunar on docker (Docker version 23.0.6, build ef23cbc) running in WSL Installed ngx_http_opentelemetry_module with Dockerfile. Module version version 1.0.3GA

Steps to reproduce Followed the step describe on https://opentelemetry.io/blog/2022/instrument-nginx/

...
COPY opentelemetry-webserver-sdk-x64-linux.tgz /opt/opentelemetry-webserver-sdk-x64-linux.tgz
RUN cd /opt ; 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 opentelemetry_module.conf /etc/nginx/conf.d/opentelemetry_module.conf

# Set our mini config
COPY conf/base.conf /etc/nginx/base.conf

USER 500
EXPOSE 8080

CMD ["nginx", "-c", "/etc/nginx/base.conf"]

in base.conf:

worker_processes auto;
daemon           off;

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

Settings in opentelemetry_module.conf:

NginxModuleEnabled ON;
NginxModuleOtelSpanExporter otlp;
NginxModuleOtelExporterEndpoint https://<elastic-apm-endpoint>;
NginxModuleOtelExporterOtlpHeaders "Authorization=Bearer ***"
NginxModuleServiceName Nginx;
NginxModuleServiceNamespace Nonprod;
NginxModuleServiceInstanceId Gateway;
NginxModuleResolveBackends ON;
NginxModuleTraceAsError ON;

Describe exactly how to reproduce the error. Include a code sample if applicable.

What is the expected behavior? Opentelemetry metrics sent to destination

What is the actual behavior?

2023/05/12 15:32:52 [error] 1#1: mod_opentelemetry: ngx_http_opentelemetry_init: Starting Opentelemetry Modlue init
nginx: [error] mod_opentelemetry: ngx_http_opentelemetry_init: Starting Opentelemetry Modlue init
2023/05/12 15:32:52 [error] 1#1: mod_opentelemetry: ngx_http_opentelemetry_init: Registering handlers for modules in different phases
nginx: [error] mod_opentelemetry: ngx_http_opentelemetry_init: Registering handlers for modules in different phases
2023/05/12 15:32:52 [error] 1#1: mod_opentelemetry: ngx_http_opentelemetry_init: Opentelemetry Modlue init completed !
nginx: [error] mod_opentelemetry: ngx_http_opentelemetry_init: Opentelemetry Modlue init completed !
2023/05/12 15:32:52 [error] 8#8: mod_opentelemetry: ngx_http_opentelemetry_init_worker: Initializing Nginx Worker for process with PID: 8
2023/05/12 15:32:52 [error] 9#9: mod_opentelemetry: ngx_http_opentelemetry_init_worker: Initializing Nginx Worker for process with PID: 9
2023/05/12 15:32:52 [error] 10#10: mod_opentelemetry: ngx_http_opentelemetry_init_worker: Initializing Nginx Worker for process with PID: 10
2023/05/12 15:32:52 [error] 11#11: mod_opentelemetry: ngx_http_opentelemetry_init_worker: Initializing Nginx Worker for process with PID: 11
Error: Invalid context name: Error Code: 26
2023/05/12 15:33:05 [error] 8#8: *1 mod_opentelemetry: ngx_initialize_opentelemetry: Agent Core Init failed, result code is 4, client: 172.17.0.1, server: , request: "GET / HTTP/1.1", host: "localhost:8080"

Additional context Docker run with docker run -p8080:8080, acessing on localhost:8080 from Windows.

fludo commented 1 year ago

Error in my nginx base.conf file. I missed the include of opentelemetry module config: include /etc/nginx/conf.d/opentelemetry_module.conf;

Now I got 2023/06/02 12:51:19 [emerg] 1#1: unknown directive "NginxModuleOtelExporterOtlpHeaders" in /etc/nginx/conf.d/opentelemetry_module.conf:4 nginx: [emerg] unknown directive "NginxModuleOtelExporterOtlpHeaders" in /etc/nginx/conf.d/opentelemetry_module.conf:4

fludo commented 1 year ago

Not in 1.0.3GA, will need amore recent version.

Closing.

gaffneyd4 commented 10 months ago

Error in my nginx base.conf file. I missed the include of opentelemetry module config: include /etc/nginx/conf.d/opentelemetry_module.conf;

This was my issue as well. Solved by adding the include statement to the http section of my nginx.conf:

error_log  /dev/stdout warn;
pid        /var/run/nginx.pid;
load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/ngx_http_opentelemetry_module.so;

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

@fludo thanks for sharing the knowledge!

patsevanton commented 5 months ago

@gaffneyd4 Thanks!