OpenTelemetry nginx module
自分でビルドすることも可能。
Adds OpenTelemetry distributed tracing support to nginx.
shimizukawa.icon説明すくなっ
設定ファイルがtoml
nginxのディレクティブを多数提供
shimizukawa.iconが動かすまでにやったこと
2022/11/08 時点のStableは1.22.1だが、GitHub Actionsでビルドされたsoが1.22.0向けのため。 otel_ngx_module-debian-11.3-stable.so.zip をダウンロード
このURLはそのうち参照期限が切れると思う
NginxのDockerイメージに追加設定してbuild
code:Dockerfile
# supports: 1.22.0
ARG VARIANT=1.22.0
FROM nginx:${VARIANT}
RUN apt-get update ; apt-get install unzip
# save as: otel_ngx_module-debian-11.3-stable.so.zip
COPY otel_ngx_module-debian-11.3-stable.so.zip /opt
RUN cd /opt ; \
unzip otel_ngx_module-debian-11.3-stable.so.zip -d nginx-${VARIANT}
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/nginx-${VARIANT}/
RUN echo "load_module /opt/nginx-${VARIANT}/otel_ngx_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
code:bash
$ docker build -t nginx-otel .
設定ファイルを用意
code:nginx-otel.toml
exporter = "otlp"
processor = "simple"
host = "otel-collector"
port = 4317
name = "nginx"
code:default.conf
opentelemetry_config /etc/nginx/conf.d/nginx-otel.toml;
# opentelemetry_propagate; # httpに書けるはずだけど、効いてなさそう
log_format otel '$remote_addr - $remote_user $time_local "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$opentelemetry_context_traceparent"';
access_log /var/log/nginx/access.log otel; # log出力が2重になってしまうけど、とりあえず。
server {
listen 80;
server_name api.lvh.me;
opentelemetry_operation_name backend;
# opentelemetry_propagate; # serverに書けるはずだけど、効いてなさそう
location / {
opentelemetry_propagate; # locationに書けば有効
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, HEAD';
add_header 'Access-Control-Allow-Headers' 'Origin, x-requested-with, Authorization, Accept, Content-Type, traceparent';
# traceparent: github.com/whatwg/fetch/issues/911
add_header 'Access-Control-Max-Age' 86400;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
https://scrapbox.io/files/636980a29bf258001dc635b4.png