Skip to content

Версия 3.0 и плагин xlog.py #166

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
sgrinko opened this issue Sep 13, 2021 · 5 comments
Closed

Версия 3.0 и плагин xlog.py #166

sgrinko opened this issue Sep 13, 2021 · 5 comments
Labels
Milestone

Comments

@sgrinko
Copy link
Contributor

sgrinko commented Sep 13, 2021

Вышла версия 3.0, в ней был доработан плагин xlog.py

Мои замечания и предложения:

  1. Проблема с инстансами

В коде плагина используется следующий алгоритм для идентификации инстансов

CONCAT(application_name, ' ', pid) as application_name

Однако, pid меняется при рестарте, и таким образом, у нас будут появляться время от времени куча метрик :) и будет нарушаться история
Может быть лучше опираться на настройку cluster_name ?
Это удобный способ именовать инстансы и таким образом при рестартах ключи метрик не будут "убегать" :)

CONCAT(application_name, ' ', current_setting('cluster_name')) as application_name
  1. Проблема с измерением общего лага репликации

в коде плагина 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,
  1. Вычисление лага репликации на реплике:
    Предлагаю уйти от столь уникального способа измерения лага репликации как трансляции метки даты времени с мастера на реплику и сравнении её со временем на реплике.

Проблемы хорошо описаны здесь: смотри 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, в другом же варианте просто показываем разницу между текущим временем и временем проигранной транзакции

@sgrinko
Copy link
Contributor Author

sgrinko commented Oct 12, 2021

Пункт:

  1. Проблема с измерением общего лага репликации

это не расширение! Это неверное вычисление/отображение лага репликации.
Прошу исправить как можно скорее

@cuprumtan cuprumtan added this to the 3.1.0 milestone Oct 12, 2021
@cuprumtan
Copy link
Contributor

Добрый день! Спасибо за подержку нашего проекта. 🙂
Некорректный расчет дельты исправили, генерацию названия метрик тоже поправили - дублей после рестарта больше не будет. Эти изменения будут в ближайшем релизе.

@cuprumtan cuprumtan added bug and removed enhancement labels Oct 13, 2021
@sgrinko
Copy link
Contributor Author

sgrinko commented Oct 14, 2021

Спасибо

@cuprumtan
Copy link
Contributor

Изменения добавлены в новый релиз 3.1.0.
Назваия объектов в шаблоне также планируем поменять, но в последующих релизах.

@sgrinko
Copy link
Contributor Author

sgrinko commented Oct 19, 2021

Спасибо, буду смотреть

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants