Skip to main content

SigNoz APM (Application Performance Monitoring)

Neste capítulo vamos utilizar o APM SigNoz configurando as atuais possibilidades de auto instrumentação de código do OpenTelemetry.

Instrumentando aplicações Javascript

code-class

Primeiro vamos precisar de um MongoDB um Redis

docker run -d --name mongo -p 27017:27017 mongo
docker run -d --name redis -p 6379:6379 redis

Vamos podemos rodar nossa aplicação

docker build -t appjs:v1 .
docker run -d --name appjs -p 3001:3001 appjs:v1

Acessamos o swagger da nossa aplicação. Entao agora já podemos instrumentar nossa aplicação com OpenTelemetry.

Vamos adicionar 2 novas depencias ao nosso package.json

    "@opentelemetry/api": "^1.9.0",
"@opentelemetry/auto-instrumentations-node": "^0.57.0",

E adicionar as variaveis de ambiente ao nosso Dockerfile

ENV OTEL_TRACES_EXPORTER="otlp"
ENV OTEL_EXPORTER_OTLP_ENDPOINT="http://192.168.3.220:4318"
ENV OTEL_NODE_RESOURCE_DETECTORS="env,host,os"
ENV OTEL_SERVICE_NAME="app-js"
ENV NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register"

Entao build and run

docker build -t appjs:v1 .
docker run -d --name appjs -p 3001:3001 appjs:v1

Agora vamos rodar um comando para deixar gerando algumas requisições

while true; do
url=$(shuf -e "http://localhost:3001/" "http://localhost:3001/healthcheck" "http://localhost:3001/route1" "http://localhost:3001/route2" "http://localhost:3001/api1" "http://localhost:3001/api2" "http://localhost:3001/api1-cached" "http://localhost:3001/api2-cached" "http://localhost:3001/exception" "http://localhost:3001/mongoWrite" "http://localhost:3001/mongoConsume" "http://localhost:3001/notfound" -n 1)
curl -s $url
sleep $((RANDOM % 5 + 1))
done

Sucesso! Aplicação Javascript instrumentada com sucesso no SigNoz.

Verificamos ainda que a página de exceçoẽs fez a coleta.

Entao vamos a proxima linguaguem

Instrumentando aplicações Python

Primeiro vamos precisar de um MongoDB um Redis

docker run -d --name mongo -p 27017:27017 mongo
docker run -d --name redis -p 6379:6379 redis

Vamos podemos rodar nossa aplicação

docker build -t apppython:v1 .
docker run -d --name apppython -p 3001:3001 apppython:v1

Acessamos o swagger da nossa aplicação. Entao agora já podemos instrumentar nossa aplicação com OpenTelemetry.

Vamos adicionar 2 novas depencias ao nosso requirements.txt

opentelemetry-distro
opentelemetry-exporter-otlp

E adicionar as variaveis de ambiente ao nosso Dockerfile e rodar o comando opentelemetry-bootstrap que ira instalar a instrumentação automática

RUN pip install opentelemetry-distro opentelemetry-exporter-otlp
RUN opentelemetry-bootstrap -a install
ENV OTEL_SERVICE_NAME="app-python"
ENV OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
ENV OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://192.168.3.220:4317"

Entao build and run

docker build -t appjs:v1 .
docker run -d --name appjs -p 3001:3001 appjs:v1

Agora vamos rodar um comando para deixar gerando algumas requisições

while true; do
url=$(shuf -e "http://localhost:3001/" "http://localhost:3001/healthcheck" "http://localhost:3001/route1" "http://localhost:3001/route2" "http://localhost:3001/api1" "http://localhost:3001/api2" "http://localhost:3001/api1-cached" "http://localhost:3001/api2-cached" "http://localhost:3001/exception" "http://localhost:3001/mongoWrite" "http://localhost:3001/mongoConsume" "http://localhost:3001/notfound" -n 1)
curl -s $url
sleep $((RANDOM % 5 + 1))
done

Sucesso! Aplicação Python instrumentada com sucesso no SigNoz.

Verificamos ainda que a página de exceçoẽs fez a coleta.

Entao vamos a proxima linguaguem

code-class

Instrumentando aplicações JAVA

code-class

Primeiro vamos precisar de um MongoDB um Redis

docker run -d --name mongo -p 27017:27017 mongo
docker run -d --name redis -p 6379:6379 redis

Vamos podemos rodar nossa aplicação

docker build -t appjava:v1 .
docker run -d --name appjava -p 3001:3001 apppython:v1

Acessamos o swagger da nossa aplicação. Entao agora já podemos instrumentar nossa aplicação com OpenTelemetry.

Instrumentando aplicações .NET

code-class

Instrumentando aplicações PHP

code-class

Instrumentando aplicações Golang

code-class