
- Excluir
- Subscrever fonte RSS
- Marcar como novo
- Marcar como lido
- Marcador
- Subscrever
- Página amigável para impressora
- Denunciar conteúdo inapropriado
- Destacar este tópico
Alguns meses atrás escrevi mostrando como instrumentar um NGINX e enviar traces para o AppDynamics. Nos últimos meses anunciamos a compra da SPLUNK e com isso o crescimento de nosso portfólio de observabilidade. O Splunk Observability Cloud (o11y) é a nossa plataforma de observabilidade para aplicações modernas totalmente compatível com OpenTelemetry.
Com isso em mente resolvi refazer a implementação agora tendo o Splunk Observability Cloud como o frontend. O desenho abaixo mostra a ideia geral.
Resumidamente o que vamos fazer:
- Criar uma imagem do NGINX com instrumentação OTEL
- Configurar a instrumentação OTEL no NGINX
- Configurar o Splunk Otel Collector para receber os dados do NGINX e enviar para Splunk Observability Cloud
- Criar um docker compose para subir e testar tudo
Criando e configurando a imagem do NGINX
Vamos começar criando a imagem. De acordo com a documentação vamos criar um Dockefile com o seguinte conteúdo.
FROM nginx:1.26.0
RUN apt-get update ; apt-get install unzip
ADD https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/download/webserver%2Fv1.1.0/opentelemetry-webserver-sdk-x64-linux.tgz /opt
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
RUN echo "load_module /opt/opentelemetry-webserver-sdk/WebServerModule/Nginx/1.26.0/ngx_http_opentelemetry_module.so;\n$(cat /etc/nginx/nginx.conf)" > /etc/nginx/nginx.conf
COPY opentelemetry_module.conf /etc/nginx/conf.d
Agora criamos este arquivo de configuração chamado opentelemetry_module.conf no mesmo diretório do Dockerfile
NginxModuleEnabled ON;
NginxModuleOtelSpanExporter otlp;
NginxModuleOtelExporterEndpoint otelcol:4317;
NginxModuleServiceName nginx_front;
NginxModuleServiceNamespace digibank;
NginxModuleServiceInstanceId NginxFrontInstanceId;
NginxModuleResolveBackends ON;
NginxModuleTraceAsError ON;
NginxModuleAttributes environment digibankXX;
Se quiser ver todos as opções disponíveis basta consultar a documentação.
Com os dois arquivos prontos o próximo passo e criar a imagem
docker build -t leandrovo/nginx_otel:1.26.0 .
Configurando o Splunk OTEL Collector
Como vamos usar uma imagem já existente do Splunk OTEL Collector precisamos apenas informar a configuração que vamos usar. Crie um arquivo chamado otelcol-config.yml com o conteúdo abaixo:
extensions:
health_check:
endpoint: 0.0.0.0:13133
http_forwarder:
ingress:
endpoint: 0.0.0.0:6060
egress:
endpoint: "https://api.${SPLUNK_REALM}.signalfx.com"
zpages:
receivers:
fluentforward:
endpoint: 0.0.0.0:24224
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
sapm:
endpoint: 0.0.0.0:7276
signalfx:
endpoint: 0.0.0.0:9943
prometheus:
config:
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 10s
static_configs:
- targets: ['localhost:8888']
metric_relabel_configs:
- source_labels: [ __name__ ]
regex: '.*grpc_io.*'
action: drop
processors:
batch:
attributes/copyfromexistingkey:
actions:
- key: environment
from_attribute: DEPLOYMENT_ENV
action: upsert
attributes/newenvironment:
actions:
- key: environment
value: "digibanknginx"
action: insert
resourcedetection:
detectors:
- env
- system
timeout: 10s
override: true
exporters:
debug:
verbosity: detailed
logging:
verbosity: detailed
sapm:
access_token: "${SPLUNK_ACCESS_TOKEN}"
endpoint: "https://ingest.${SPLUNK_REALM}.signalfx.com/v2/trace"
signalfx:
access_token: "${SPLUNK_ACCESS_TOKEN}"
realm: "${SPLUNK_REALM}"
sync_host_metadata: true
service:
extensions: [health_check, http_forwarder, zpages]
pipelines:
traces:
receivers: [otlp, sapm]
processors: [attributes/newenvironment,attributes/copyfromexistingkey,batch, resourcedetection]
exporters: [ debug,logging,sapm, signalfx ]
metrics:
receivers: [otlp, signalfx, prometheus]
processors: [batch, resourcedetection]
exporters: [signalfx]
Criando o docker compose para testar tudo
Com todas as configurações prontas vamos agora informar algumas variáveis de ambiente importantes. Se você ainda não tem um trial agora é o momento de fazê-lo. Clique nesse link e cria seu trial no Splunk Observability Cloud.
Com o trial criado você precisa agora obter seu token de conexão. Basta clicar em Acess Tokens depois em Default
Agora crie um arquivo chamado .env incluindo seu token e as demais informações. O valor de SPLUNK_REALM você obtém na URL do seu trial. https://app.<<SEU REALM>>.signalfx.com
SPLUNK_ACCESS_TOKEN=<<SEU TOKEN>>
SPLUNK_REALM==<<SEU REAL>>
OTEL_EXPORTER_ENDPOINT=http://otelcol:4318
DEPLOYMENT_ENV=nginx
Agora vamos criar um arquivo chamado docker-compose.yaml
version: "3.4"
services:
nginx:
image: leandrovo/nginx_otel:1.26.0
container_name: nginx
volumes:
- type: bind
source: ./opentelemetry_module.conf
target: /etc/nginx/conf.d/opentelemetry_module.conf
#target: /opt/opentelemetry_module.conf
ports:
- "80:80"
otelcol:
image: quay.io/signalfx/splunk-otel-collector:latest
container_name: otel-col
deploy:
resources:
limits:
memory: 125M
restart: unless-stopped
command: ["--config=/etc/otelcol-config.yml"]
volumes:
- ./otelcol-config.yml:/etc/otelcol-config.yml
- ./logs:/logs
- ./checkpoint:/checkpoint
ports:
- "4317" # OTLP over gRPC receiver
- "4318" # OTLP over HTTP receiver
- "9464"
- "8888"
- "13133"
- "14250"
- "14268"
- "6060"
- "9080"
- "9411"
- "9943"
- "7276"
environment:
SPLUNK_ACCESS_TOKEN: ${SPLUNK_ACCESS_TOKEN}
SPLUNK_REALM: ${SPLUNK_REALM}
Subindo os containers
docker composse up -d
Com os containers no ar vamos gerar uma carga de teste.
while true; do curl http://localhost ; sleep 1 ; done
Este é o resultado após algumas requisições. Vemos o service map e logo abaixo um trace com as operações.
Para deixar as coisas mais interessantes adicionei backends em java também instrumentados com OpenTelemetry, sugiro agora que você faça o teste acima e depois faça um clone do repositório abaixo com o resultado. Vejam que interessante.
https://github.com/lof000/splunk-labs/tree/main
Vejam como foi simples usar o Splunk Observability Cloud como um frontend para OpenTelemetry. Se você está testando ou já usa OpenTelemetry agora é um bom momento de experimentar essa plataforma.
Para adicionar um comentário aqui, tem de ser um utilizador registado. Se já se registou, inicie a sessão. Se ainda não se registou, faça-o e inicie a sessão.