Перейти к содержимому

Обзор ​

Метрики спанов — именованные числа, прикреплённые к спану (order.total, rows.imported, payload.bytes), которые показываются графиками на странице трейса.

Метрики спанов ​

Колбэк span() / asyncSpan() получает объект с metric(name, value):

ts
import { asyncSpan } from '@buglapse/node'

await asyncSpan('import-csv', async (span) => {
    const rows = await parseCsv(file)
    span.metric('import.rows', rows.length)
    span.metric('import.bytes', file.size)

    const skipped = await insertRows(rows)
    span.metric('import.skipped', skipped)
})

Результат startInactiveSpan() даёт тот же метод — записывайте метрики в любой момент до end():

ts
import { startInactiveSpan } from '@buglapse/node'

const span = startInactiveSpan('render-pdf', { op: 'pdf' })
const pdf = await renderPdf(invoice)
span.metric('pdf.pages', pdf.pageCount)
span.end()

Правила:

  • Значения — числа. Для строк, булевых и объектов используйте span.setData(key, value).
  • Последнее значение побеждает. Второй metric() с тем же именем на том же спане перезаписывает первый. Копите в переменной и записывайте один раз, если нужен итог.
  • Только пока спан открыт. Записанное после завершения спана не отправляется.
  • На спан. Дочерний спан не наследует метрики родителя. Используйте одно имя на разных спанах, чтобы сравнивать их по трейсу.
  • Называйте область.измерение, с единицей, если она не очевидна: queue.wait_ms, payload.kb.

Каждый спан и так записывает свою длительность, так что, чтобы замерить шаг, оберните его в свой спан; метрику используйте для того, чего длительность не говорит, — размеров, количеств или замера внутри более длинного спана:

ts
await asyncSpan('handle-webhook', async (span) => {
    span.metric('webhook.delay_ms', Date.now() - Date.parse(payload.sentAt))
    await processWebhook(payload)
})

До init() спаны всё равно выполняют ваш код с пустым объектом, так что вызовы metric() игнорируются, а не бросают исключение.

На странице трейса боковая панель строит графики всех имён метрик трейса — по маленькому графику на имя по спанам трейса — и показывает метрики выбранного спана парами «имя — значение». См. Трейсинг.

Метрики спанов ничего не стоят сверх спана: спан учитывается в месячном лимите спанов с ними или без них.