Skip to content

MongoDB replica set — алерт по lag репликации

Secondary в replica set отстаёт от primary, через минуту приложение начнёт читать stale-данные. Нужен HTTP-эндпойнт со словом "ok" / "lag".

Рецепт

bash
#!/usr/bin/env bash
# Wrap as HTTP via fastcgi or python -m http.server.
THRESHOLD_S="${LAG_THRESHOLD_S:-10}"
LAG=$(mongo --quiet --eval '
  var s = rs.printSecondaryReplicationInfo();
  var st = rs.status();
  var lag = 0;
  st.members.forEach(function (m) {
    if (m.stateStr === "SECONDARY" && m.optimeDate) {
      var d = (st.date - m.optimeDate) / 1000;
      if (d > lag) lag = d;
    }
  });
  print(Math.round(lag));
' 2>/dev/null)

[ -z "$LAG" ] && { echo "no-data"; exit 1; }
[ "$LAG" -ge "$THRESHOLD_S" ] && echo "lag $LAG" || echo "ok $LAG"

То же самое в Enterno.io

Эндпойнт + HTTP-монитор Enterno с keyword-rule "не содержит ok" даёт алерт ровно когда replica начала отставать. Pioneer+ хранит response-time, что коррелирует с тяжёлыми writes.

Настроить HTTP monitor → ← Все рецепты

Похожие рецепты

Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.