효과적인 지표와 모니터링은 고품질 개발, 버그 수정, 사용자 요청 및 사고 처리에 핵심적인 역할을 합니다. Social Discovery Group에서는 제품 성능을 평가하기 위해 다양한 도구를 사용합니다.
이 기사에서는 Datadog의 도움으로 안정적인 애플리케이션 모니터링 및 측정 시스템을 구축하고 제품의 버그 감지 시간을 단축한 방법에 대한 몇 가지 해킹 방법을 공유합니다.
SDG 제품은 2억 5천만 명 이상의 사람들이 전 세계적으로 연결하고 관계를 구축하도록 돕고 있으며 사용자 기반은 지속적으로 증가하고 있습니다. 이러한 성공의 주요 요인은 사용자 요구에 즉각적으로 대응하는 능력입니다. 우리는 Datadog을 포함한 다양한 모니터링 시스템에 대한 작업 경험이 많습니다. 이유는 다음과 같습니다.
현재 Datadog은 다양한 수준의 시스템과 다양한 통합 옵션을 제공합니다. 여기에서 이러한 기능을 탐색할 수 있습니다.
Datadog은 다양한 서비스와의 통합 구성을 위한 포괄적인 문서를 제공합니다.
우리는 강력한 파트너십 관계를 구축했습니다.
여기서는 Datadog용 Kubernetes 클러스터 내 애플리케이션에 대한 APM 지표를 설정하고 구성한 경험을 공유합니다. 이 문서에서는 AKS의 프로젝트 배포, CI/CD 프로세스 및 기타 DevOps 세부 정보를 다루지 않습니다.
대신 APM 지표에 대한 Datadog 모니터링 구성의 세부 사항에 중점을 둘 것입니다.
사용된 기술 스택: Azure 서비스, AKS(Azure Kubernetes Service), ASP .Net Core 7, Datadog.
애플리케이션 및 서비스를 모니터링하기 위해 우리는 value.yaml 파일의 추가 매개변수와 함께 Helm 차트를 통해 클러스터 내에 배포된 Datadog 에이전트를 활용합니다. 기본 에이전트 구성 파일에서 DogStatsD 모듈을 활성화하고 포트(기본값은 8125)를 지정해야 합니다.
외부 호스트에서 전송된 데이터의 경우 Datadog 에이전트에는 dogstatsd_non_local_traffic: true 및 apm_non_local_traffic: true 구성이 필요합니다. 다음은 배포 단계에서 일부 변수가 전달되는 클러스터 중 하나에 대한 value.yaml 파일입니다. 배포는 Azure Devops를 사용하여 생성됩니다.
" datadog: apiKey: #{apiKey}# appKey: #{appKey}# clusterName: #{ClusterName}# kubeStateMetricsEnabled: true clusterChecks: enabled: true dogstatsd: useSocketVolume: false nonLocalTraffic: true collectEvents: false apm: portEnabled: true #тут обязательно включить env: - name: "DD_KUBELET_TLS_VERIFY" value: "false" systemProbe: collectDNSStats: false orchestratorExplorer: enabled: false clusterAgent: image: repository: public.ecr.aws/datadog/cluster-agent tag: #{tag}# admissionController: enabled: false agents: image: repository: public.ecr.aws/datadog/agent tag: #{tag}# doNotCheckTag: true clusterChecksRunner: image: repository: public.ecr.aws/datadog/agent tag: #{tag}# "
그런 다음 애플리케이션 설정에서 Datadog에 메트릭을 전송하기 위한 에이전트의 주소를 지정해야 합니다. 앱 모니터링을 위한 대시보드는 내부적으로 사용되는 측정항목을 기반으로 합니다. 그들은 독립적으로 생성되어야 했습니다.
ASP.Net 서비스 모니터링을 설정하기 위해 링크 에서 찾을 수 있는 공식 문서를 사용했습니다.
에이전트가 이미 구성되었으므로 방법 중 하나는 이미지 빌드에 필요한 줄을 추가하고 CI/CD 시스템에 변수(DD_ENV, DD_SERVICE, DD_AGENT_HOST)를 전달하여 각각 환경, 서비스 이름 및 에이전트 주소를 지정하는 것이었습니다. . 또한 서비스에 대한 dockerfiles에 다음을 추가해야 합니다.
" RUN TRACER_VERSION=$(curl -s \https://api.github.com/repos/DataDog/dd-trace-dotnet/releases/latest | grep tag_name | cut -d '"' -f 4 | cut -c2-) \ && curl -Lo /tmp/datadog-dotnet-apm.deb https://github.com/DataDog/dd-trace-dotnet/releases/download/v${TRACER_VERSION}/datadog-dotnet-apm_${TRACER_VERSION}_amd64.deb # Copy the tracer from build target COPY --from=build /tmp/datadog-dotnet-apm.deb /tmp/datadog-dotnet-apm.deb # Install the tracer RUN mkdir -p /opt/datadog \ && mkdir -p /var/log/datadog \ && dpkg -i /tmp/datadog-dotnet-apm.deb \ && rm /tmp/datadog-dotnet-apm.deb # Enable the tracer ENV CORECLR_ENABLE_PROFILING=1 ENV CORECLR_PROFILER={846F5F1C-F9AE-4B07-969E-05C26BC060D8} ENV CORECLR_PROFILER_PATH=/opt/datadog/Datadog.Trace.ClrProfiler.Native.so ENV DD_DOTNET_TRACER_HOME=/opt/datadog ENV DD_INTEGRATIONS=/opt/datadog/integrations.json "
이 방법은 효과가 있지만 가장 최적의 솔루션은 아닌 것 같습니다. 우리는 한 단계 더 나아가 서비스 배포에 다음을 추가하기로 결정했습니다.
" metadata.labels: tags.datadoghq.com/env: feature tags.datadoghq.com/service: service_name tags.datadoghq.com/version: '1488' spec.template.metadata.labels: admission.datadoghq.com/config.mode: service admission.datadoghq.com/enabled: 'true' tags.datadoghq.com/env: feature tags.datadoghq.com/service: service_name tags.datadoghq.com/version: '1111' spec.template.metadata.annotations: admission.datadoghq.com/dotnet-lib.version: v2.38.0 spec.template.spec.containers.name.env: - name: DD_TRACE_AGENT_URL value: datadog-agent.monitoring - name: DD_TRACE_STARTUP_LOGS value: 'true' - name: DD_LOGS_INJECTION value: 'true' - name: DD_RUNTIME_METRICS_ENABLED value: 'true' - name: DD_PROFILING_ENABLED value: 'true' - name: DD_APPSEC_ENABLED value: 'true' "
에이전트에서 변경된 내용은 다음과 같습니다.
" datadog: apm: socketEnabled: true portEnabled: true enabled: true clusterAgent: admissionController: enabled: true mutateUnlabelled: false providers: aks: enabled: true "
이러한 모든 단계를 거친 후 모든 서비스에 대한 매우 상세한 측정항목이 포함된 데이터가 APM -> 서비스 섹션 아래 Datadog에 흐르기 시작했고 그래프가 자동으로 표시되었습니다.
두 번째 방법에 대한 주석 설정을 수정해야 했습니다. 모든 것이 즉시 원활하게 작동하기 시작한 것은 아닙니다.
알림 시스템과 관련하여 Datadog에서는 사용자 친화적이고 직관적이라는 점을 언급할 가치가 있습니다. 알림은 "모니터 -> 모니터 관리" 섹션에서 생성됩니다.
위에서 설명한 개선 사항은 몇 가지 귀중한 결과를 가져왔습니다. 이제 우리는 시스템이 어떻게 작동하고 다양한 변화에 적응하는지 더 깊이 이해하게 되었습니다.
또한 서비스 빌드와 독립적으로 작동하는 안정적인 애플리케이션 모니터링 및 측정 시스템을 구축하여 버그 감지 시간을 줄이는 데 도움을 줍니다.
이를 통해 서비스를 최적화하고 개발 속도와 전반적인 시스템 품질을 향상할 수 있었습니다.