Обзор
Метрики спанов — именованные числа, прикреплённые к спану (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() игнорируются, а не бросают исключение.
На странице трейса боковая панель строит графики всех имён метрик трейса — по маленькому графику на имя по спанам трейса — и показывает метрики выбранного спана парами «имя — значение». См. Трейсинг.
Метрики спанов ничего не стоят сверх спана: спан учитывается в месячном лимите спанов с ними или без них.