Các số liệu và giám sát hiệu quả đóng vai trò quan trọng trong việc phát triển chất lượng cao, sửa lỗi cũng như xử lý các yêu cầu và sự cố của người dùng. Tại Social Discovery Group, chúng tôi sử dụng nhiều công cụ khác nhau để đánh giá hiệu suất của sản phẩm.
Trong bài viết này, chúng tôi sẽ chia sẻ một số thủ thuật về cách chúng tôi xây dựng hệ thống đo lường và giám sát ứng dụng ổn định cũng như giảm thời gian phát hiện lỗi trên các sản phẩm của mình với sự trợ giúp của Datadog.
Các sản phẩm SDG đang giúp hơn 250 triệu người kết nối và xây dựng mối quan hệ trên toàn cầu và cơ sở người dùng của chúng tôi không ngừng tăng lên. Yếu tố chính dẫn đến thành công này là khả năng đáp ứng kịp thời nhu cầu của người dùng. Chúng tôi có nhiều kinh nghiệm làm việc với nhiều hệ thống giám sát khác nhau, bao gồm cả Datadog. Đây là lý do tại sao:
Hiện tại, Datadog cung cấp nhiều tùy chọn tích hợp với các hệ thống ở các cấp độ khác nhau. Bạn có thể khám phá những khả năng này ở đây .
Datadog cung cấp tài liệu toàn diện để định cấu hình tích hợp với các dịch vụ khác nhau.
Chúng tôi đã xây dựng được mối quan hệ hợp tác bền chặt.
Tại đây, chúng tôi sẽ chia sẻ kinh nghiệm của mình trong việc thiết lập và định cấu hình số liệu APM cho các ứng dụng trong cụm Kubernetes cho Datadog. Bài viết sẽ không đề cập đến việc triển khai các dự án trong AKS, quy trình CI/CD và các chi tiết DevOps khác.
Thay vào đó, chúng tôi sẽ tập trung vào những điểm tốt hơn trong việc định cấu hình giám sát Datadog cho các số liệu APM.
Nhóm công nghệ được sử dụng: Azure Services, Azure Kubernetes Service (AKS), ASP .Net Core 7, Datadog.
Để giám sát các ứng dụng và dịch vụ, chúng tôi sử dụng tác nhân Datadog được triển khai trong cụm thông qua biểu đồ Helm với các tham số bổ sung từ tệp value.yaml. Trong tệp cấu hình tác nhân chính, bạn cần bật mô-đun DogStatsD và chỉ định cổng (mặc định là 8125).
Đối với dữ liệu được gửi từ máy chủ bên ngoài, tác nhân Datadog yêu cầu cấu hình sau: dogstatsd_non_local_traffic: true và apm_non_local_traffic: true. Đây là tệp value.yaml cho một trong các cụm, với một số biến được chuyển ở giai đoạn triển khai. Việc triển khai được thực hiện bằng 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}# "
Sau đó, bạn cần chỉ định địa chỉ của tác nhân để truyền số liệu đến Datadog trong cài đặt ứng dụng. Trang tổng quan để giám sát ứng dụng dựa trên các số liệu được sử dụng nội bộ; chúng phải được tạo ra một cách độc lập.
Để thiết lập giám sát các dịch vụ ASP.Net, chúng tôi đã sử dụng tài liệu chính thức có thể tìm thấy theo liên kết .
Vì tác nhân đã được định cấu hình nên một trong các phương pháp là thêm các dòng cần thiết vào các biến xây dựng và chuyển hình ảnh trong hệ thống CI/CD: DD_ENV, DD_SERVICE, DD_AGENT_HOST, để chỉ định môi trường, tên dịch vụ và địa chỉ tác nhân tương ứng . Chúng ta cũng cần thêm phần sau vào dockerfiles cho các dịch vụ:
" 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 "
Phương pháp này có hiệu quả nhưng có vẻ không phải là giải pháp tối ưu nhất. Chúng tôi quyết định tiến thêm một bước nữa và bổ sung những nội dung sau vào quá trình triển khai dịch vụ của mình:
" 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' "
Đó là những gì đã được thay đổi trong các đại lý:
" datadog: apm: socketEnabled: true portEnabled: true enabled: true clusterAgent: admissionController: enabled: true mutateUnlabelled: false providers: aks: enabled: true "
Sau tất cả các bước này, dữ liệu có số liệu rất chi tiết cho tất cả các dịch vụ bắt đầu chuyển vào Datadog trong phần APM -> Dịch vụ và các biểu đồ được tự động hiển thị.
Chúng tôi đã phải mày mò cài đặt chú thích cho phương pháp thứ hai; không phải mọi thứ đều bắt đầu suôn sẻ ngay lập tức.
Về hệ thống thông báo, điều đáng nói là nó thân thiện với người dùng và trực quan trong Datadog. Thông báo được tạo trong phần "Màn hình -> Quản lý màn hình".
Những cải tiến mà chúng tôi mô tả ở trên đã mang lại một số kết quả có giá trị. Bây giờ chúng tôi đã hiểu sâu hơn về cách hệ thống của chúng tôi vận hành và thích ứng với những thay đổi khác nhau.
Ngoài ra, chúng tôi đã thiết lập một hệ thống đo lường và giám sát ứng dụng ổn định, hoạt động độc lập với các bản dựng dịch vụ, giúp giảm thời gian phát hiện lỗi.
Ngược lại, điều này đã cho phép chúng tôi tối ưu hóa các dịch vụ của mình và cải thiện tốc độ phát triển cũng như chất lượng hệ thống tổng thể.