Home Datadog on Kubernetes
Post
Cancel

Datadog on Kubernetes

https://docs.datadoghq.com/containers/kubernetes/installation/?tab=helm&tabs=null

Basic values

https://github.com/DataDog/helm-charts/blob/main/examples/datadog/agent_basic_values.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
targetSystem: "linux"
datadog:
  logs:
    enabled: true
    containerCollectAll: false
#    containerCollectUsingFiles: true
  apm:
    portEnabled: true
    socketPath: /var/run/datadog/apm.socket
    hostSocketPath: /var/run/datadog/
  processAgent:
    enabled: true
    processCollection: false

Helm Repo Update

1
2
$ helm repo add datadog https://helm.datadoghq.com
$ helm repo update

Helm Install

1
$ helm install datadog -f values.yaml --set datadog.apiKey=YOURKEY datadog/datadog

Deployment Add SideCar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    tags.datadoghq.com/env: "<environment>"
    tags.datadoghq.com/service: "<service>"
    tags.datadoghq.com/version: "<version>"
spec:
  template:
    metadata:
      labels:
        tags.datadoghq.com/env: "<environment>"
        tags.datadoghq.com/service: "<service>"
        tags.datadoghq.com/version: "<version>"
    spec:
      initContainers:
        - name: download-agent
          image: busybox
          command:
            - wget
            - -O
            - /agent/dd-java-agent.jar
            - https://dtdg.co/latest-java-tracer
          volumeMounts:
            - name: agent-volume
              mountPath: "/agent"
      volumes:
        # for APM
        - name: apmsocketpath
          hostPath:
            path: /var/run/datadog/
        # for log
        - name: agent-volume
          emptyDir: { }
      containers:
        - name: <CONTAINER_NAME>
          image: <CONTAINER_IMAGE>/<TAG>
          volumeMounts:
            # for APM
            - name: apmsocketpath
              mountPath: /var/run/datadog
            # for log
            - name: agent-volume
              mountPath: "/agent"
          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']

Spring log json appender 추가

JSON Format으로 log를 남기자

gradle dependency 추가

1
implementation 'net.logstash.logback:logstash-logback-encoder:6.6'

logback.xml 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<configuration>

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <property name="LOG_PATH" value="/var/log"/>

    <appender name="jsonAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <appender name="stdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

<!--    <appender name="rollingJsonAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <file>${LOG_PATH}/application-json.log</file>-->
<!--        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${LOG_PATH}/application-json.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>-->
<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!--                <maxFileSize>200MB</maxFileSize>-->
<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
<!--            <maxHistory>7</maxHistory>-->
<!--        </rollingPolicy>-->
<!--    </appender>-->

    <springProfile name="!prod">
        <root level="INFO">
            <appender-ref ref="stdoutAppender"/>
        </root>
    </springProfile>

    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="jsonAppender"/>
        </root>
    </springProfile>

</configuration>


This post is licensed under CC BY 4.0 by the author.