ClickHouse · ClickHouse 26.3.57.12
ВКонтакте пишет отладочные логи с десятков тысяч серверов в ClickHouse, например вывод ffmpeg при перекодировании видео. Вставки идут пачками через локальный прокси KittenHouse, поэтому порядок строк в таблице не совпадает с порядком событий.
В debug_logs у записи есть ts (секунды) и seq — номер внутри секунды. Последняя запись сервера — с наибольшим (ts, seq). Верните server, last_ts и message для серверов, у которых последняя запись имеет level = error.
В работе: Панель дежурного: какие машины сейчас сломаны, без перечитывания всей истории.
Источник: кейс ВКонтакте: логи с десятков тысяч серверов в ClickHouse через KittenHouse, Хабр, 2018. Условие пересказано своими словами.
Какие запросы вернут серверы, у которых последняя запись — ошибка?
- argMaxIf(message, ts, level = 'error')
- max(level) = 'error'
- argMax по кортежу (ts, seq)
- argMax только по ts
- ORDER BY ts DESC, seq DESC и LIMIT 1 BY server