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에 떠있는 서비스 중 하나를 적용하는 것이었다.
당연히 중추 서버를 맡은 만큼 제일 먼저 데이터독 적용을 위해 삽질을 하게 되었다.
적용 방법 및 작업
작업할 내용은 아래와 같다.
- datadog-agent 연동
- Trace, log 적용 및 데이터독 연동
- 알람을 슬랙으로 연동
- 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를 읽어보면 다 알 수 있는 부분이기에 좀 많이 생략했다..)
여담 - 삽질하면서 올린 슬랙
+ 혹시나하고 오픈 카톡방을 찾아봣는데 있어서, 데이터독 오픈 카톡방에 참여했다가.. 어느날 한분이 들어왓는데...
안타깝당...
'개발노트 > 개발기록' 카테고리의 다른 글
k8s pod OOMkill 발생하는 이유 (0) | 2023.06.28 |
---|---|
알리페이 결제연동 토큰 발급 및 연동하기 (0) | 2023.06.22 |
Apple OAuth 탈퇴 개선 (0) | 2023.06.02 |
iOS Storekit2 사용 및 결제 개선 (0) | 2023.06.01 |
[App Push] 앱 푸시 고도화 part.3 (Pushy - CN) (0) | 2023.04.19 |