我想在Prometheus中监视当前运行的cadence工作流的数量。
我检查了由不同的cadence服务(如cadence_history、cadence_worker、cadence_frontend等)导出的度量,我可以找到的唯一与工作流相关的度量是:
activity_end_to_end_latency histogram (workflowType是其中一个标签)workflow_success counter / workflow_terminate counter / workflow_failed counter因此,似乎有一些指标可以分析已经完成的工作流,但没有关于当前工作流的信息。我说的对吗还是我错过了什么?
这意味着我必须自己导出所需的度量,我看到了两个可能的解决方案:
func MyWorkflow(ctx workflow.Context) error {
mymetrics.gauge.Inc()
if err := workflow.ExecuteActivity(ctx, someActivity).Get(ctx, nil); err != nil {
mymetrics.gauge.Dec()
return err
}
// ...
mymetrics.gauge.Dec()
return nil
}这种方法的缺点是用户手动终止的工作流将无法正确测量。
cadence.client.ListOpenWorkflow函数收集正在运行的工作流数。然而,cadence文档说,“这个API的大量使用可能会带来巨大的持久性压力”,所以我认为在prometheus出口商中调用它是一个非常糟糕的主意。你认为还有其他可能的解决办法吗?
发布于 2022-06-16 01:58:59
因此,似乎有一些指标可以分析已经完成的工作流,但没有关于当前工作流的信息。我说的对吗还是我错过了什么?
没错。没有像这样的度量标准。
然而,cadence docs说,“这个API的大量使用可能会造成巨大的持久性压力”。
如果将高级能见度与ElasticSearch结合使用,则情况并非如此。
但是,如果使用高级可见性,则应该使用"CountWorkflowExecution“API。这将更有效地计算开放的工作流。
如果使用基本可见性,如果数字非常大,则持久化可能是一个额外的问题。因为你必须在页面上进行迭代才能得到数字。
https://stackoverflow.com/questions/72637962
复制相似问题