java - 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 作业做任何更改吗?
提前致谢。
解决方案
在 TelemetryClient 可以从缓冲区中刷新挂起的遥测数据之前,作业很可能已经结束。对于连续运行的作业,这不是问题(就像在这种情况下您的 Kafka 流作业),但对于计划的作业,执行结束,留下未决的遥测。要解决此问题,请在执行结束时在代码中添加以下内容,以确保在执行结束之前将待处理的遥测写入通道中。
// here 'telemetry' is the instance of TelemetryClient as per your shared code
telemetry.flush();
推荐阅读
- python - 尝试使用 python 将元素添加到现有 JSON
- python - python - 如何使用python查找具有特征值和特征向量的整数条目的2x2矩阵?
- tensorflow - TensorFlow.Keras 的 EfficientNet 和 MobileNetV2 模型无法在 GPU 上重现
- python - Python 和 SQLite3 - 选择在脚本中不起作用但在控制台中起作用的位置
- sql-server - 动态 SQL SSRS 和动态行分组
- javascript - 使用 mongodb 查找结果
- r - 从R中“dgCMatrix”类的稀疏矩阵中删除行
- flutter - 自定义日期文本以在 CupertinoDatePicker 中显示“明天”
- python - 如何使用 Python ctypes 模块检索 Windows 10 中前台窗口的完整路径?
- javascript - 正则表达式匹配单个字符的第一次出现