批处理作业的 Spring 指标

时间:2021-07-21 05:36:39

标签: prometheus datadog spring-micrometer

我有一个批处理,可以运行一系列任务(不是 spring-batch)。我想为每个批处理运行的每个任务记录指标(例如读取的行、写入的行以及许多其他内容)。结果可能如下所示(使用 json 表示法来演示指标的层次结构):

{
  "batchRun": 1234,
  "tasks": [
    {
      "id": "task1",
      "duration": 500,
      "inputs": [
        {
          "file": "data1.csv",
          "rowsRead": 10,
          "duration": 100
        }
      ],
      "outputs": [
        {
          "file": "data-out1.csv",
          "rowsWritten": 20,
          "duration": 200
        }
      ]
    },
    {
      "id": "task2",
      "duration": 5000,
      "inputs": [
        {
          "file": "data2.csv",
          "rowsRead": 100000,
          "duration": 1000
        }
      ],
      "outputs": [
        {
          "file": "data-out2.csv",
          "rowsWritten": 200000,
          "duration": 2000
        }
      ]
    }
  ]
}

我希望能够将这些指标作为一个批处理运行的整体查看,并且我希望能够将 2 个作业运行相互比较。

我将如何使用千分尺和任何消耗公制的应用程序来执行此操作? (Prometheus、Datadog 等)。

是否有可能具有这种等级性质?并比较 2 批运行?

我见过的所有示例似乎都与系统指标(如内存或线程使用情况)更相关 - 因此更像是一个时间点样本,没有这种额外的层次结构上下文。

谢谢。

更新 1:

我知道我可以在记录时向度量添加标签,例如 https://www.baeldung.com/micrometer 但我没有立即看到前端将如何以合理的方式使用它们 - 他们似乎不支持键/值对。

所以在不知道更好的情况下,我认为它看起来像:

Counter counter = Counter
  .builder("instance")
  .description("Count read rows")
  .tags(
     "batchRun=1234", 
     "tasks[1]", 
     "taskId=task1",
     "input=data1.csv",
     "/tasks/0/inputs/0/file/data1.csv"
  )
  .register(registry);

我希望有人完全按照我的意愿去做,这样他们就会理解最终目标并提出一些有助于我理解的建议。

0 个答案:

没有答案