効果的なメトリクスとモニタリングは、高品質の開発、バグ修正、ユーザーのリクエストやインシデントの処理において重要な役割を果たします。 Social Discovery Group では、製品のパフォーマンスを評価するためにさまざまなツールを使用しています。
この記事では、Datadog を利用して安定したアプリケーション監視およびメトリクス システムを構築し、製品のバグ検出時間を短縮する方法についてのハックをいくつか紹介します。
SDG 製品は、2 億 5,000 万人以上の人々が世界中でつながり、関係を築くのに役立っており、当社のユーザー ベースは常に拡大しています。この成功の主な要因は、ユーザーのニーズに迅速に対応する能力です。私たちは、Datadog を含むさまざまな監視システムを使用した経験が豊富です。その理由は次のとおりです。
現在、Datadog はさまざまなレベルのシステムとのさまざまな統合オプションを提供しています。これらの機能については、ここで確認できます。
Datadog は、さまざまなサービスとの統合を構成するための包括的なドキュメントを提供します。
私たちは強力なパートナーシップ関係を築くことができました。
ここでは、Datadog 用の Kubernetes クラスター内のアプリケーションの APM メトリクスをセットアップおよび構成した経験を共有します。この記事では、AKS でのプロジェクトのデプロイ、CI/CD プロセス、およびその他の DevOps の詳細については説明しません。
代わりに、APM メトリクスに対する Datadog モニタリングの構成の詳細な点に焦点を当てます。
使用されるテクノロジ スタック: Azure Services、Azure Kubernetes Service (AKS)、ASP .Net Core 7、Datadog。
アプリケーションとサービスを監視するために、values.yaml ファイルの追加パラメーターを含む Helm チャートを通じてクラスター内にデプロイされた Datadog エージェントを利用します。メインのエージェント構成ファイルで、DogStatsD モジュールを有効にし、ポート (デフォルトは 8125) を指定する必要があります。
外部ホストから送信されるデータの場合、Datadog エージェントには次の構成が必要です: Dogstatsd_non_local_traffic: true および apm_non_local_traffic: true。これは、クラスターの 1 つの 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 サービスの監視を設定するには、リンクから見つかる公式ドキュメントを使用しました。
エージェントはすでに構成されているため、方法の 1 つは、必要な行をイメージ ビルドに追加し、CI/CD システムの変数 (DD_ENV、DD_SERVICE、DD_AGENT_HOST) を渡して、それぞれ環境、サービス名、エージェント アドレスを指定することでした。 。また、サービスの dockerfile に以下を追加する必要があります。
" 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 に流れ始め、グラフが自動的に表示されます。
2 番目の方法では、注釈の設定をいじる必要がありました。すべてがすぐにスムーズに機能し始めたわけではありません。
通知システムに関しては、Datadog がユーザーフレンドリーで直感的であることは注目に値します。通知は「モニター -> モニターの管理」セクションで作成されます。
上で説明した改善により、いくつかの貴重な成果が得られました。私たちは現在、システムがどのように動作し、さまざまな変化に適応するかについてより深く理解できるようになりました。
さらに、サービスのビルドとは独立して動作する安定したアプリケーションの監視およびメトリクス システムを確立し、バグ検出時間の短縮に貢献しました。
これにより、サービスを最適化し、開発速度とシステム全体の品質を向上させることができました。