Версия 3.0 и плагин xlog.py
sgrinko opened this issue · 5 comments
Вышла версия 3.0, в ней был доработан плагин xlog.py
Мои замечания и предложения:
- Проблема с инстансами
В коде плагина используется следующий алгоритм для идентификации инстансов
CONCAT(application_name, ' ', pid) as application_name
Однако, pid меняется при рестарте, и таким образом, у нас будут появляться время от времени куча метрик :) и будет нарушаться история
Может быть лучше опираться на настройку cluster_name ?
Это удобный способ именовать инстансы и таким образом при рестартах ключи метрик не будут "убегать" :)
CONCAT(application_name, ' ', current_setting('cluster_name')) as application_name
- Проблема с измерением общего лага репликации
в коде плагина xlog.pay есть код:
result_lags = Pooler.run_sql_type('wal_lag_lsn')
if result_lags:
lags = []
for info in result_lags:
...
zbx.send('pgsql.replication.total_lag[{0}]'.format(
info[0]), float(info[4]), self.DELTA_SPEED)
Здесь вычисляется общий лаг репликации как: pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)
данное число является конечным значением лага в байтах и его нужно показать как есть. Вычислять разницу с предыдущим значением нельзя!
Нужно удалить , self.DELTA_SPEED. Удалить нужно в двух ветках, для версии старше 10 и младше.
Соответственно, в def discovery_rules предлагаю заменить в наименованиях метрики Delta of total lag на Total lag in bytes и дополнительно добавить в описание метрики указание, что метрика:
{'key': self.right_type(self.key_total_lag, var_discovery="{#APPLICATION_NAME},"),
представляем собой байты:
'units': Plugin.UNITS.bytes,
- Вычисление лага репликации на реплике:
Предлагаю уйти от столь уникального способа измерения лага репликации как трансляции метки даты времени с мастера на реплику и сравнении её со временем на реплике.
Проблемы хорошо описаны здесь: смотри issue #107
Предлагаю изменить код функции FUNCTION mamonsu.timestamp_get()
select case when pg_last_wal_receive_lsn() = pg_last_wal_replay_lsn() then 0
else extract (epoch from now() - pg_last_xact_replay_timestamp())
end;
это позволит в случае совпадения проигранного и полученного lsn показывать 0, в другом же варианте просто показываем разницу между текущим временем и временем проигранной транзакции
Пункт:
- Проблема с измерением общего лага репликации
это не расширение! Это неверное вычисление/отображение лага репликации.
Прошу исправить как можно скорее
Добрый день! Спасибо за подержку нашего проекта. 🙂
Некорректный расчет дельты исправили, генерацию названия метрик тоже поправили - дублей после рестарта больше не будет. Эти изменения будут в ближайшем релизе.
Спасибо
Изменения добавлены в новый релиз 3.1.0.
Назваия объектов в шаблоне также планируем поменять, но в последующих релизах.
Спасибо, буду смотреть