我们已经编写了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作业做些什么更改吗?
提前谢谢。
1条答案
按热度按时间lg40wkob1#
很可能作业在telemetryclient从缓冲区刷新挂起的遥测之前结束。对于连续运行的作业,这不是问题(就像本例中的kafka流作业),但是对于计划的作业,执行结束时保留挂起的遥测。要解决此问题,请在执行结束时在代码中添加以下内容,以确保在执行结束前将挂起的遥测写入通道。