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

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

我们已经编写了java应用程序(job),它从azure blob读取一些文件,并将内容写入azure事件中心。这是批处理作业以预定的时间间隔运行,我们已将应用程序部署并安排为kubernetes cronjob。当文件从blob移动到事件中心时,我们会记录一些细节事件,但这些事件不会反映在applicationinsight中。但是当我们从ide(eclipse或intellij)本地运行时,我们可以看到事件
下面是部署yaml文件

  1. apiVersion: batch/v1beta1
  2. kind: CronJob
  3. metadata:
  4. name: job-name-1.0.0.0
  5. spec:
  6. schedule: "*/5 * * * *"
  7. jobTemplate:
  8. spec:
  9. template:
  10. spec:
  11. nodeSelector:
  12. agentpool: agentpoolname
  13. containers:
  14. - name: job-name-0
  15. image: opsregistry.azurecr.io/job-name:v1.0.0.0
  16. imagePullPolicy: Always
  17. command: ["java", "-jar","job-name-1.0.0.0.jar","$(connection_string)"]
  18. env:
  19. - name: connection_string
  20. valueFrom:
  21. configMapKeyRef:
  22. name: job-configmap
  23. key: connectionString
  24. resources:
  25. limits:
  26. cpu: "15"
  27. requests:
  28. cpu: "0.5"
  29. restartPolicy: Never

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

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

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

lg40wkob

lg40wkob1#

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

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

相关问题