AzureFunctions AppInsights Logging does not work in Azure AKS

3/19/2019

I've been using Azure functions (non static with proper DI) for a short while now. I recently added ApplicationInsights by using the APPINSIGHTS_INSTRUMENTATIONKEY key. When debugging locally it works all fine.

If I run it by publishing the function and using the following dockerfile to run it locally on docker it works fine as well.

FROM mcr.microsoft.com/azure-functions/dotnet:2.0-alpine
ENV AzureWebJobsScriptRoot=/home/site/wwwroot

COPY ./publish/ /home/site/wwwroot

However. If i go a step further and try to deploy it to kubernetes (in my case Azure AKS) by using the following YAML files. The function starts fine with log files showing the loading of the Application insights parameter. However, it does not log to insights.

deployment.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mytestfunction-secrets
  namespace: "testfunction"
type: Opaque
data:
  ApplicationInsights: YTljOTA4ZDgtMTkyZC00ODJjLTkwNmUtMTI2OTQ3OGZhYjZmCg==

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mytestfunction
  namespace: "testfunction"
  labels:
    app: mytestfunction
spec:
  replicas: 1
  template:
    metadata:
      namespace: "testfunction"
      labels:
        app: mytestfunction
    spec:
      containers:
      - image: mytestfunction:1.1
        name: mytestfunction
        ports:
         - containerPort: 5000
        imagePullPolicy: Always
        env:
        - name: AzureFunctionsJobHost__Logging__Console__IsEnabled
          value: 'true'
        - name: ASPNETCORE_ENVIRONMENT
          value: PRODUCTION
        - name: ASPNETCORE_URLS
          value: http://+:5000
        - name: WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
          value: '5'
        - name: APPINSIGHTS_INSTRUMENTATIONKEY
          valueFrom:
            secretKeyRef:
              name: mytestfunction-secrets
              key: ApplicationInsights
      imagePullSecrets:
      - name: imagepullsecrets

However. I did alter the yaml by not storing the key as a secret and then it did work.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mytestfunction
  namespace: "testfunction"
  labels:
    app: mytestfunction
spec:
  replicas: 1
  template:
    metadata:
      namespace: "testfunction"
      labels:
        app: mytestfunction
    spec:
      containers:
      - image: mytestfunction:1.1
        name: mytestfunction
        ports:
         - containerPort: 5000
        imagePullPolicy: Always
        env:
        - name: AzureFunctionsJobHost__Logging__Console__IsEnabled
          value: 'true'
        - name: ASPNETCORE_ENVIRONMENT
          value: PRODUCTION
        - name: ASPNETCORE_URLS
          value: http://+:5000
        - name: WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
          value: '5'
        - name: APPINSIGHTS_INSTRUMENTATIONKEY
          value: a9c908d8-192d-482c-906e-1269478fab6f
      imagePullSecrets:
      - name: imagepullsecrets

I'm kind of surprised by the fact that the difference between the notation is causing Azure functions to not log to insights. My impression was that the running application does not care or know whether the value came from a secret or a regular notation in kubernetes. Even though it might be debatable whether the instrumentationkey is a secret or not, i would prefer to store it there. Does anyone have an idea why this might cause it?

        # Not working
        - name: APPINSIGHTS_INSTRUMENTATIONKEY
          valueFrom:
            secretKeyRef:
              name: mytestfunction-secrets
              key: ApplicationInsights

        # Working
        - name: APPINSIGHTS_INSTRUMENTATIONKEY
          value: a9c908d8-192d-482c-906e-1269478fab6f

These are the versions i'm using

  • Azure Functions Core Tools (2.4.419)
  • Function Runtime Version: 2.0.12332.0
  • Azure AKS: 1.12.x

Also. The Instrumentation key is a fake one for sharing purposes. not an actual one.

-- CloudNativeL
azure-aks
azure-application-insights
azure-functions
docker
kubernetes

0 Answers