监控 GKE 上运行的 Cronjob

Posted

技术标签:

【中文标题】监控 GKE 上运行的 Cronjob【英文标题】:Monitor Cronjob running on GKE 【发布时间】:2020-01-17 10:55:46 【问题描述】:

我正在尝试监视在 GKE 上运行的 CronJob,但我看不到检查 CronJob 是否实际运行的简单方法。如果 CronJob 未运行超过 X 时间并且 Stackdriver 似乎不支持,我想触发警报。

目前我尝试使用基于日志记录指标的警报,但这只能在应用程序崩溃或特定错误时发出警报,而不是平台错误本身。

我研究了一个使用 Prometheus 警报的解决方案,它可以集成到 Stackdriver 中吗?

更新: 只是跟进,最终在 Stackdriver 上使用基于日志的警报开发了一个简单的解决方案。如果日志在 X 时间后没有出现,那么它将触发警报。它并不完美,但对于我的用例来说还可以。

【问题讨论】:

我找到了 this 关于如何监控 CronJobs 的教程,它可能会有所帮助。 【参考方案1】:

好像它是一个启动标准 Kubernetes 作业的 cronjob,您可以查询该作业,然后检查它的开始时间,并将其与当前时间进行比较。

注意:我不熟悉 stackdriver,所以这可能不是您想要的,但是...

例如用 bash:

START_TIME=$(kubectl -n=your-namespace get job your-job-name -o json | jq '.status.startTime')
echo $START_TIME

您还可以像这样以 JSON blob 形式获取作业的当前状态:

kubectl -n=your-namespace get job your-job-name -o json | jq '.status'

这将给出如下结果:


  "completionTime": "2019-09-06T17:13:51Z",
  "conditions": [
    
      "lastProbeTime": "2019-09-06T17:13:51Z",
      "lastTransitionTime": "2019-09-06T17:13:51Z",
      "status": "True",
      "type": "Complete"
    
  ],
  "startTime": "2019-09-06T17:13:49Z",
  "succeeded": 1

您可以在检查脚本中使用 jq 之类的工具来查看 succeededtype 字段以查看作业是否成功。

因此,使用您的 START_TIME 值,您可以获得当前时间或作业完成时间 (completionTime),如果结果小于您的最小作业时间阈值,您可以触发警报 - 例如POST 到 slack webhook 以发送通知或您使用的任何其他警报系统。

【讨论】:

以上是关于监控 GKE 上运行的 Cronjob的主要内容,如果未能解决你的问题,请参考以下文章

GKE 和 prometheus 监控

GKE 磁盘利用率监控/警报

版本“monitoring.gke.io/v1alpha1”中类型“PodMonitor”没有匹配项

如何监控/分析在 Glassfish 上运行的 Web 项目

监控器连接到电脑上,会影响电脑性能损坏电脑吗? 难道监控器必须连接到电脑上吗

Estimote iBeacons 监控无法在 iOS 9.0.2 上运行