Open sasah opened 5 years ago
Добрый день! Мы работаем по настройке для своих команд поддержки общих дашбордов на Графана+ Прометеус, где в том числе хочется видеть общее состояние СУБД. В частности хотелось бы видеть то что в ASH Viewer как топ активность и её детали, но без детальной информации по отдельным SQL запросам. Подскажите, пожалуйста, возможно ли экспортировать метрики топ и детальных активностей в формате Прометеус? Но ещё лучше выделить это в отдельный экспортёр. Я бы сделал бы его тут сам если бы Вы помогли с пониманием Ваших алгоритмов построение этих графиков, пока я по исходникам не разобрался.
SELECT n.wait_class as WAIT_CLASS, round(m.time_waited/m.INTSIZE_CSEC,3) as VALUE FROM v$waitclassmetric m, v$system_wait_class n WHERE m.wait_class_id=n.wait_class_id AND n.wait_class != 'Idle'
"select ACTIVITY, DETAIL, count(*) as value" + " from (" + " select DECODE(SESSION_STATE," + " 'ON CPU'," + " 'CPU used'," + " WAIT_CLASS) AS ACTIVITY," + " DECODE(SESSION_STATE," + " 'ON CPU'," + " DECODE(SESSION_TYPE, 'BACKGROUND', 'background', 'user')," + " EVENT) AS DETAIL" + " from V$ACTIVE_SESSION_HISTORY" + " WHERE SAMPLE_TIME > SYSDATE - (1 / 1440))" + " group by ACTIVITY, DETAIL"
Сейчас я строю подобный график такими двумя запросами, но хотелось бы Вашу каноническую версию так как к ней привыкли DBA.
@sasah
если бы Вы помогли с пониманием Ваших алгоритмов построение этих графиков, пока я по исходникам не разобрался
В данный момент хранятся raw и агреггированные данные мониторинга истории активных сессий во встроенной БД.
raw-данные - в этой сущности, в которой матрица из int-ов хранит данные в табличном виде (по ключу dateId). Сделано так для возможности динамической вставки данных для разных источников (Oracle, Postgres etc) и различном количеством столбцов в разных версиях БД. Ну и снижении объемов хранимых данных тоже.
агрегированные - по односекундному интервалу здесь. Также хранится агреграция по 15 секундным и одноминутным интервалам, в отдельных сущностях.
Логику заполнения raw и агрегированными данными можно посмотреть здесь и здесь.
Т.е. для raw-данных храним историю активных сессий в табличном виде, для агрегированных - храним данные по ожиданиям (количество по группе ожиданий, класс ожидания - waitClass) для каждого интервала (1, 15 сек. и 1 мин.) + значение параметра (это идентификатор процесса SID + '_' + Serial# или для sqlId - просто его значение) - денормализованные данные ожиданий по ключу dateId + paramId - этот такая простая olap схема.
Далее, это все отображается в Top Activity stacked графике: здесь или при выборке данных по истории активных сессий в top gantt по ID процесса или sqlId (это все выборка по агрегированным данным). Raw данные запрашиваются в GUI примерно вот так.
Самый простой вариант, как мне видится - это (вроде есть в Prometheus возможность хранить данные в своем хранилище) сделать таблицу по агрегированным данным подобного вида, заполнять ее и делать по ней запросы для построения общего графика (не забыть про дополнительные сущности для раскрытия значения ID событий ожиданий, ID процессов). Оттуда же брать данные и для детализации по процессами или sqlId. Думаю в эту сторону копать по поводу отдельного экспортера, но я за отдельный сервис все-таки. Плюсы: работать будет быстро, будет детализация ТОП по процессам, в в одной таблице. Минусы: нет исходных данных.
Второй вариант проще: сливать периодически данные истории активных сессий из Oracle во внутренню БД Prometheus и делать по этим данным те-же запросы. Работать должно быстро, так как можно будет прикрутить к этому всему индексы ES - там можно всякие разные ad-hoc крутить насколько знаю по текстовым данным итд. Хотя объемы данных будут большие, это минус.
Hi!
@sasah have you details about metric exporter? Need to export data from Prometheus to ASH Viewer or vice versa?
Thanks, Alex.