azure:当使用kubernetes cronjob调度作业时,事件不会流入azure application insight

btqmn9zl  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(420)

我们已经编写了java应用程序(job),它从azure blob读取一些文件,并将内容写入azure事件中心。这是批处理作业以预定的时间间隔运行,我们已将应用程序部署并安排为kubernetes cronjob。当文件从blob移动到事件中心时,我们会记录一些细节事件,但这些事件不会反映在applicationinsight中。但是当我们从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应用程序insigh的java代码

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

请注意,我们已经部署了另一个kafka流作业,其代码与kind:deployment相同,但部署类型与yaml文件中的kind:deployment相同,事件正在流入application insight中,而对于kind:cronjob,我们没有遇到任何问题
我们需要对cron作业做些什么更改吗?
提前谢谢。

lg40wkob

lg40wkob1#

很可能作业在telemetryclient从缓冲区刷新挂起的遥测之前结束。对于连续运行的作业,这不是问题(就像本例中的kafka流作业),但是对于计划的作业,执行结束时保留挂起的遥测。要解决此问题,请在执行结束时在代码中添加以下内容,以确保在执行结束前将挂起的遥测写入通道。

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

相关问题