Skip to content

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

Closed
@sgrinko

Description

@sgrinko

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions