datadog

2024. 8. 7. 03:25·CloudNative/Observability & Analysis

datadog 구성과 사용한 내용이다.

 

    • 설치
        • on prem에서는 공식 가이드에 따라 helm 설치했다.
          • helm repo add datadog https://helm.datadoghq.com
            helm install my-datadog-operator datadog/datadog-operator
        • OCP에서는 datadog agent operator를 통해 구성하는데 버전이슈로 redis-operator=0.13.0 이하에서만 동작하였다.
          • datadog operator가 설치되고 나면 agent를 생성한다.
spec: 
  agent:
    apm:
      enabled: true # apm 사용 설정
    config:
      kubelet:
        tlsVerify: false # 필수
    log:
      enabled: true
      logsConfigContainerCollectAll: false
    process:
      enabled: true
    security:
      compliance:
        enabled: false
      runtime:
        enabled: false
    systemProbe:
      bpfDebugEnabled: false
  clusterAgent:
    config:
      admissionController:
        enabled: true
      clusterChecksEnabled: true
      externalMetrics:
        enabled: true
    replicas: 2
  clusterChecksRunner:
    replicas: 2
  clusterName: my-ocp-dev
  credentials:
    apiKey: <datadoghq 에서 생성한 API key>
  features:
    kubeStateMetricsCore:
      clusterCheck: true
      enabled: true #k8s 메트릭 설정
    logCollection:
      enabled: true
      logsConfigContainerCollectAll: false

 

      • cluster agent deployment가 먼저 생성되고 agent daemonset이 이후에 생성된다. 테스트용도이므로 ds yaml을 직접 수정하여 nodeAffinity 설정하여 배포 대상을 제한했다.
  • 확인
    • datadoghq.com 에서 확인하여 보면, infrastructure의 정보가 잘 보인다.
    •  


  • APM
    • GO, Java, Javascript, PHP, Python, Ruby, C++, .NET  지원
    • OCP에서는 Log 설정을 지원하지 않아 Trace에서 ErrorStack을 통한 로그 확인이 가능하므로 해당 기능을 이용하였다.
    • 준비
      • dd-java-agent.jar를 다운받아야 하는데 annotation을 추가하면 컨테이너의 루트 경로 아래에 /datadog-lib  가 생성된다. base image에 미리 받아두어도 무방하다.
      • deployment yaml에 label을 추가하고, command를 통해 javaagent 를 동작시킨다. 이때 service를 입력하여야 하는데 해당 이름으로 datadoghq.com에서 grouping되어 조회되니, 각 application별로 다른 이름으로 지정하자.
      •  
    • 확인
      • slueth를 springboot dependency에 추가하였다.
      • 사전에 개발한 200정상과 500 error 발생시키는 API를 swagger로 테스트하였다.
      • APM Traces 로 이동하여 보면 list가 보인다. 아무것도 보이지 않는다면 위에서 설정한 nodeAffinity외에 다른곳에 pod가 생성된것은 아닌지 확인해보자.
metadata:
  labels:
    tags.datadoghq.com/env: dev        # dev,stg,prd 등 환경
    tags.datadoghq.com/service: sample # grouping 가능
    tags.datadoghq.com/version: 0.0.1  # 임의 버전
spec:
  template:
    metadata:
      labels:
        tags.datadoghq.com/env: dev
        tags.datadoghq.com/service: sample
        tags.datadoghq.com/version: 0.0.1
        admission.datadoghq.com/enabled: "true" # 추가
      annotations:
        ad.datadoghq.com/codeserver-1-app.logs: '[{"source": "java", "service": "sample"}]'
        # source는 nginx, java, python, nodejs, ruby, php, go, apache, mysql, postgresql, redis, docker, kubernetes 가능. service는 lable과 동일한 service명으로
        admission.datadoghq.com/java-lib.version: v1.37.0
        agent.datadoghq.com/component: cluster-agent
        agent.datadoghq.com/name: datadog
    spec:
      containers:
        - command: ["java"]
          args: [
            "-javaagent:/datadog-lib/dd-java-agent.jar",
            "-Ddd.profiling.enabled=true",
            "-XX:FlightRecorderOptions=stackdepth=256",
            "-Ddd.logs.injection=true",
            "-Ddd.service=sample", # label과 동일하게
            "-Ddd.env=dev",        # label과 동일하게
            "-Ddd.version=0.0.1",  # label과 동일하게
            "-Ddd.dynamic.instrumentation.enabled=true"
            "-Ddd.symbol.database.upload.enabled=true"
            "-jar",
            "/app.jar"             # applicaiton jar 위치
          ]
          env:
            - name: DD_LOGS_INJECTION
              value: "true"
            - name: DD_TRACE_SAMPLE_RATE
              value: "10"
            - 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']

      • 500에러건을 클릭하여 상세로 이동한뒤 Waterfall로 각 span의 호출순서와 오류 내용확인이 가능하다.
      • 익셉션 발생 span을 선택하면, 하단에 정보창이 보이는데, Error 메시지의 View stack trace 를 클릭하면 prettier 버전과 Raw 버전의 stackTrace 가 출력된다.
  • application.yml
    • springboot 에서 prometheus, micrometer설정하면 추가적으로 APM metric값들이 조회된다.
    • management.datadog.metrics.export.api-key를 등록해준다.
management:
  datadog:
    metrics:
      export:
        api-key: "datadog api key"
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      application: ${spring.application.name}

 

728x90

'CloudNative > Observability & Analysis' 카테고리의 다른 글

jib maven 으로 pinpoint agent 배포  (0) 2024.10.18
pinpoint server 2.5.4 k8s deploy  (2) 2024.10.18
pinpoint server 2.5.4 YAML for k8s  (0) 2024.10.17
pinpoint server 2.5.4 base image build for k8s  (1) 2024.10.17
pinpoint APM docker-compose  (2) 2024.08.07
'CloudNative/Observability & Analysis' 카테고리의 다른 글
  • pinpoint server 2.5.4 k8s deploy
  • pinpoint server 2.5.4 YAML for k8s
  • pinpoint server 2.5.4 base image build for k8s
  • pinpoint APM docker-compose
yunapapa
yunapapa
working on the cloud
    250x250
  • yunapapa
    supermoon
    yunapapa
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 개발 (20)
        • java (17)
        • web (2)
        • MSX (1)
        • Go (0)
      • CloudNative (50)
        • App Definition & Developeme.. (17)
        • Orchestration & Management (4)
        • Runtime (3)
        • Provisioning (7)
        • Observability & Analysis (14)
        • event review (5)
      • AWS (7)
      • 환경관련 (17)
      • 취미생활 (0)
        • 맛집 (0)
        • 게임 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • CNCF Past Events
    • Kubernetes Korea Group
  • 공지사항

  • 인기 글

  • 태그

    dop-c02
    k8s
    istio
    springboot
    OpenShift
    티스토리챌린지
    APM
    Pinpoint
    gitlab
    helm
    오블완
    AWS
    devops
    Java
    kubernetes
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
yunapapa
datadog
상단으로

티스토리툴바