kokbee-Hive
article thumbnail

2023.03.15 ~ 2023.05.31 회사에서 데이터독을 세팅을 내용을 적는 글입니다.
https://www.datadoghq.com/

 

Cloud Monitoring as a Service | Datadog

See metrics from all of your apps, tools & services in one place with Datadog's cloud monitoring as a service solution. Try it for free.

www.datadoghq.com

CTO님께서 데이터독 적용에 참여해 보는 게 어떻냐고 하셔서, 참여하게 되었다.
내가 맡은 역할은 MSA 중추 서버와 k8s에 떠있는 서비스 중 하나를 적용하는 것이었다.
당연히 중추 서버를 맡은 만큼 제일 먼저 데이터독 적용을 위해 삽질을 하게 되었다.

 

 

적용 방법 및 작업

작업할 내용은 아래와 같다.

  1. datadog-agent 연동
  2. Trace, log 적용 및 데이터독 연동
  3. 알람을 슬랙으로 연동
  4. Grok Pasre 적용

그럼 순서대로 진행해 보도록 하자.


 

 

datadog-agent 연동

  • datadog는 go로 만들어진 agent를 설치해야 디버깅할 서버와 데이터독 서버가 연결돼서 서로 주고받는다. https://github.com/DataDog/datadog-agent 깃허브에 공개되어 있음
  • ec2에 설치해야 하기에 설치는 CTO님께서 해주셨음, 이후 세팅은 내가 진행
  • 해줘야 할 세팅은 크게 두 가지이다.
 

GitHub - DataDog/datadog-agent: Datadog Agent

Datadog Agent . Contribute to DataDog/datadog-agent development by creating an account on GitHub.

github.com

 

1-1. datadog.yaml: 데이터독 옵션

# 적용하면서 써봣던 옵션만 적겟다.
## agent 활성화시 기본으로 들어감
api_key: my-datadog-api-key

## agent 활성화시 기본으로 들어감
site: datadog site

## agent 활성화시 활성화 후, 자기가 사용하는 환경에 대한 태그
env: development

## 기본값은 false다. true로 바꾸면 log를 수집하겠다는 것이다.
logs_enabled: true

## process_config는 optional이다.
## 프로세스를 체크하기 위해 사용한것 같다. 굳이 서버상태를 체크안할거면 안해도될듯..
process_config:
	process_collection:
    	enabled: true

 

 

1-2. server.yaml: 우리가 연동할 log

 

step 1. conf.yaml 생성

## 자신의 서버를 적용하기 위해선 우선 폴더 부터 파일까지 생성을 해야한다.
## 1. cd datadog-agent/conf.d 
## 2. mkdir myserver.d
## 3. touch conf.yaml

step 2. conf.yaml에 옵션 정의

init_config:

instances:

logs:
  - type: file
  	path: /my/log/path/myserver.log
    soruce: server_log
    service: main-server
    tags: ["level:info", "env:development"]

 

이렇게 하면 agent와 같이 설정해야 하는 내용은 끝났다.


 

 

Trace, log 적용 및 데이터독 연동

step 1. npm 모듈이 dd-trace 설치 - https://www.npmjs.com/package/dd-trace

 

dd-trace

Datadog APM tracing client for JavaScript. Latest version: 4.1.0, last published: 3 days ago. Start using dd-trace in your project by running `npm i dd-trace`. There are 529 other projects in the npm registry using dd-trace.

www.npmjs.com

npm i --save dd-trace

 

step 2. trace 모듈을 활용해 APM 연동

const tracer = require('dd-trace')
tracer.init({ 
	sampleRate: 1,
    logInjection: true,
    env: 'development',
	service: 'my-server'
    profiling: true
})

 

step 3. log와의 연동을 위한 span_id 생성 (optional trace와 log연동을 안 할 거라면 안 하셔도 됩니다.)

// trace_id, span_id 생성 후
const span = trace.scope().active()
req.trace_id = span.context().toTraceId()
req.span_id = span.context().toSpanId()

// logger 에도 trace_id, span_id를 넣어줘야 매칭

 

APM 알람을 슬랙으로 연동

Monitors -> New monitor -> APM 선택 후 입력

 

아래 이미지처럼 셀렉트박스에서 보낼 곳을 정하면 됨.


 

 

Grok Pasrer 적용

위에 과정을 모두 진행했다면, APM과 log에 서버와 log가 쌓이기 시작할 것이다.

하지만 데이터독과 연동됐을 뿐 APM과 log는 서로 이어져있지를 않다.

그걸 이어주는게 Grok parse이다. (2번의 step3을 했다면 가능한 작업이다.)

 

현재상태는 trace 가 0개로 나옴

그럼 저 trace를 이어줘 보도록 하자.



step 1. logs -> configuration 클릭

step 2. New Pipeline 클릭

step 3. New Pipeline 클릭 후 filter할 로그를 선택 -> update

step 4. update 후 생긴 목록에서 Add Processor 를 클릭

 

step 5. Grok Parser 선택

그록 파서에서 example로 log를 가져와 정규식으로 파싱 하게 되면

아래와 같이 새로 들어오는 log는 trace 옆에 1이 생기면서 연동이 되게 된다.

 

 

 

추가 작업 - RUM 적용 및 k8s 

frontend 분들이 바쁘기에, rum도 적용해 보기로 했다. 간단하게 보여서 적용을 내가 해보기로 했다.

CTO님이 연동도 BE랑 된다고 하셔서 해보기로 함.

 

 

 

- RUM

 

step 1. npm 모듈 다운 - https://www.npmjs.com/package/@datadog/browser-rum

 

@datadog/browser-rum

Datadog Real User Monitoring (RUM) enables you to visualize and analyze the real-time performance and user journeys of your application's individual users.. Latest version: 4.42.2, last published: 20 days ago. Start using @datadog/browser-rum in your proje

www.npmjs.com

npm i @datadog/browser-rum

 

step 2. rum 모듈을 이용해 연동 코드 작성

import { datadogRum } from '@datadog/browser-rum'

const env = 'development'
const service = 'front-server'
datadogRum.init({
  applicationId: 'asdasdasdasdasdasdasdas',
  clientToken: 'asdasdasdasdasdasdasdasdasdas',
  site: 'datadoghq.com',
  service,
  env,
  sessionSampleRate: 50,
  sessionReplaySampleRate: 50,
  trackUserInteractions: true,
  trackResources: true,
  trackLongTasks: true,
  defaultPrivacyLevel: 'mask-user-input',
  enableExperimentalFeatures: ['clickmap'],
})
datadogRum.startSessionReplayRecording()

 

 

- k8s

k8s는 typescript를 사용하기에, ts로 작성해서 적용하였다.

사실 javascript와 코드는 차이가 없다. deploy의 yaml을 좀 수정하면 되기 때문..

따라서, yaml 파일에 대한 부분만 적어 놓는다.

 

 

step 0. config-map env에 에이전트 호스트 추가

DD_TRACE_AGENT_HOSTNAME: datadog-agent.~~~~~~~~~~~~~~~

 

step 1. deployment spec 부분에 env를 추가해서 환경변수를 추가해 준다.

spec:
  selector:
    matchLabels:
      run: my-service
  template:
    metadata:
      labels:
        run: my-service
    spec:
      containers:
        - name: my-service
          env:
            - name: DD_ENV
              valueFrom:
                fieldRef:
                  fieldPath: metadata.labels['tags.datadoghq.com/env']
            - name: DD_SERVICE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.labels['tags.datadoghq.com/service']
            - name: DD_VERSION
              valueFrom:
                fieldRef:
                  fieldPath: metadata.labels['tags.datadoghq.com/version']

 

step 2. log를 가져올 패스를 추가

...
    metadata:
      annotations:
        ad.datadoghq.com/my-service.logs: |
          [{
            "type": "file",
            "path": "/service/log/my-service.log",
            "source": "my-service-source",
            "service": "my-service",
            "tag": "env:development"
          }]

 

이렇게 하면 바로 k8s에 Node가 올라가면 agent가 연동되어 있는 기준 바로 연동될 것이다.

(사실 datadog document를 읽어보면 다 알 수 있는 부분이기에 좀 많이 생략했다..)

 

 

여담 - 삽질하면서 올린 슬랙

 

+ 혹시나하고 오픈 카톡방을 찾아봣는데 있어서, 데이터독 오픈 카톡방에 참여했다가.. 어느날 한분이 들어왓는데...

안타깝당...

profile

kokbee-Hive

@콕비

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!