首页 > 解决方案 > AZURE:使用 kubernetes CronJob 安排作业时,事件不会流入 Azure 应用程序洞察力

问题描述

我们编写了 java 应用程序 (Job),它从 Azure blob 读取一些文件并将内容写入 Azure 事件中心。这是按预定时间间隔运行的批处理作业我们已将应用程序部署并安排为 Kubernetes CronJob。当文件从 blob 移动到事件中心时,我们正在记录带有一些详细信息的事件,但这些事件并未反映在应用程序洞察力中。但是当我们从 IDE(Eclipse 或 intellij)本地运行时,我们可以看到事件

下面是部署yaml文件

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: job-name-1.0.0.0
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          nodeSelector:
            agentpool: agentpoolname
          containers:
            - name: job-name-0
              image: opsregistry.azurecr.io/job-name:v1.0.0.0
              imagePullPolicy: Always
              command: ["java", "-jar","job-name-1.0.0.0.jar","$(connection_string)"]
              env:
                - name: connection_string
                  valueFrom:
                    configMapKeyRef:
                      name: job-configmap
                      key: connectionString
              resources:
                limits:
                  cpu: "15"
                requests:
                  cpu: "0.5"
          restartPolicy: Never

下面是用于将事件写入 azure application insigh 的 java 代码

 TelemetryClient telemetry = new TelemetryClient();
 telemetry.getContext().setInstrumentationKey(instrumentationKey);
 telemetry.getContext().getCloud().setRole("CloudRoleName");
 telemetry.trackTrace("SOME INFORMATION ABOUT JOB", SeverityLevel.Information);

请注意,我们已经使用相同的代码部署了另一个 Kafka 流作业,但部署类型与类型相同:在 yaml 文件中部署,并且事件正在流入应用程序洞察力,而我们在这种情况下面临任何问题:CronJob

我们必须对 cron 作业做任何更改吗?

提前致谢。

标签: javaazurekubernetesazure-application-insightsazure-aks

解决方案


在 TelemetryClient 可以从缓冲区中刷新挂起的遥测数据之前,作业很可能已经结束。对于连续运行的作业,这不是问题(就像在这种情况下您的 Kafka 流作业),但对于计划的作业,执行结束,留下未决的遥测。要解决此问题,请在执行结束时在代码中添加以下内容,以确保在执行结束之前将待处理的遥测写入通道中。

// here 'telemetry' is the instance of TelemetryClient as per your shared code 
telemetry.flush(); 

推荐阅读