.NET APM with Kubernetes
  • 1 Minute to read
  • Dark
    Light
  • PDF

.NET APM with Kubernetes

  • Dark
    Light
  • PDF

Article summary

This document details how to install the .Net Core APM Profiler in your .Net Core application running on Kubernetes.

Prerequisite

Follow the Retrace Kubernetes Install Guide.

.Net Core Kubernetes Setup

Dockerfile Configuration

Adjust your Dockerfile to include the .Net Core Profiler:

RUN mkdir -m 0755 -p /stackify-dotnet-apm && \
    cd /stackify-dotnet-apm && \
    wget http://download.stackify.com/stackify-dotnet-apm/stackify-dotnet-apm-install-linux-latest.tar.gz && \
    tar -zxvf stackify-dotnet-apm-install-linux-latest.tar.gz && \
    cd stackify-dotnet-apm-install-linux && \
    ./install.sh --docker && \
    cd .. && \
    rm -rf stackify-dotnet-apm-install-linux && \
    rm stackify-dotnet-apm-install-linux-latest.tar.gz

ENV CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916da}
ENV CORECLR_ENABLE_PROFILING=1
ENV CORECLR_PROFILER_PATH="/stackify-dotnet-apm/StackifyProfiler.so"

Name Your Application

Create a file named Stackify.json and copy it to your container in the same folder as your application.

{
    "AppName": "MyApp",
    "Environment": "Production"
}

Sending All Exceptions to Retrace

By default the profiler only captures "unhandled" exceptions to avoid the overhead of a first-chance exception handler. However, if you want to capture and upload all first-chance exceptions you can enable this on a per application basis. To enable this, add the setting CaptureAllExceptions to the Stackify.json file as shown in the following example.

{
    "AppName": "MyApp",
    "Environment": "Production",
    "CaptureAllExceptions": true
}

Pod Configuration

Application containers are required to have the stackify volume mount configured in Retrace Kubernetes Install.

Example Application Pod YAML:

apiVersion: v1
kind: ReplicationController
metadata:
  name: pod-name
spec:
  replicas: 1
  selector:
    app: app-name
  template:
    metadata:
      name: template-name
      labels:
        app: app-name
    spec:
      containers:
      - name: container-name
        image: application-image
        volumeMounts:
          - mountPath: /usr/local/stackify
            name: stackify
      volumes:
        - name: stackify
          hostPath: 
            path: /var/stackify
            type: DirectoryOrCreate

Verify

Make application requests, you can then verify results in the Retrace dashboard.


Was this article helpful?