Projeto Datadog das Lojas Quero-Quero
``ts
...
Para ativar o datadog é necessário a variável
DD_TRACE_ON="true".ATENÇÃO - Em homologação vamos usar somente via necessidade. Os recursos do Datadog são limitados e compartilhados com produção
2 - Instalar dependências
| Release | Node.js |
| :---------------------------: | :------: |
|
@qq-framework/datadog 1.x.x | >= v14 |
| @qq-framework/datadog 2.x.x | >= v18 || Release | Node.js | NestJS |
| :--------------------: | :------: | :------: |
|
nestjs-ddtrace 3.x.x | >= v14 | >= v9 |
| nestjs-ddtrace 4.x.x | >= v18 | >= v10 |3 - Adicionar importação no app.module.ts
`typescript
import { Module } from "@nestjs/common";
import { DatadogTraceModule } from "nestjs-ddtrace";setEnv();
@Module({
imports: [
...
DatadogTraceModule.forRoot({ controllers: true, providers: true }),
...
],
})
export class AppModule {}
`4 - Criar o arquivo tracing.ts dentro do src
`typescript
import { tracerInit } from "@qq-framework/datadog";
import { setEnv } from "config";
import * as process from "process";setEnv();
const tracer = tracerInit({
traceOn: process.env.DD_TRACE_ON,
env: process.env.DD_ENV,
service: process.env.npm_package_name,
hostname: process.env.DD_AGENT_HOST,
});
export default tracer;
`5 - Adicionar importação no arquivo main
`typescript
...
import "./tracing";...
`6 - Alterar a versão do package.json
A versão da aplicação utilizada nos filtros do Datadog é a versão do package.json. Caso deseje setar como varíavel de ambiente existe o campo
version em tracerInit.`json
{
"name": "example-app",
"version": "1.0.4"
}
`7 - Adicionar no script de deploy do Kubernetes as variáveis
No arquivo ci/k8s/prd/\*.yml adicionar os campos de env e não no job do Jenkins.
`yml
---
#-------------------------------------------------------------------------------------- SERVICE_NAME_EXAMPLE ----
#----------------------------------------------------------------------------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: SERVICE_NAME_EXAMPLE
namespace: SERVICE_NAME_EXAMPLE
labels:
app: SERVICE_NAME_EXAMPLE
spec:
selector:
matchLabels:
app: SERVICE_NAME_EXAMPLE
replicas: 2
revisionHistoryLimit: 3
template:
metadata:
labels:
app: SERVICE_NAME_EXAMPLE
spec:
imagePullSecrets:
- name: mercantil
containers:
- name: SERVICE_NAME_EXAMPLE
env:
- name: DD_SERVICE
value: "SERVICE_NAME_EXAMPLE"
- name: DD_TRACE_ON
value: "true"
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENV
value: "prod"
image: my.container.registry.com/SERVICE_NAME_EXAMPLE:TAG_TO_REPLACE
imagePullPolicy: IfNotPresent
command: ["npm"]
args:
- run
- k8
startupProbe:
periodSeconds: 30
failureThreshold: 6 # Max re-tries
httpGet:
port: 3000
path: /HELLO_ROUTE
livenessProbe:
periodSeconds: 60
initialDelaySeconds: 60
httpGet:
port: 3000
path: /HELLO_ROUTE
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: "1"
memory: "1Gi"
---
---- On Demand K8s ----
---- Sets the creation or deletion of replicas when CPU or Memory Utilization reaches a threshold
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: SERVICE_NAME_EXAMPLE
labels:
app: SERVICE_NAME_EXAMPLE
namespace: SERVICE_NAME_EXAMPLE
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: SERVICE_NAME_EXAMPLE
minReplicas: 2
maxReplicas: 8
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 300
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 300
---
---- Service creation ----
apiVersion: v1
kind: Service
metadata:
name: SERVICE_NAME_EXAMPLE
namespace: SERVICE_NAME_EXAMPLE
spec:
selector:
app: SERVICE_NAME_EXAMPLE
type: LoadBalancer
externalIPs:
- 10.0.0.1
ports:
- protocol: TCP
port: 3000
targetPort: 3000
---
``