...

Redis-monitoring met Prometheus en Grafana: handleiding

Redis-monitoring Met Prometheus en Grafana krijg ik betrouwbare statistieken over geheugen, latentie, commandosnelheid, replicatie en cache-efficiëntie, zodat ik de prestaties en stabiliteit van een instantie in een vroeg stadium kan waarborgen. Ik gebruik hiervoor een exporter die Prometheus regelmatig opvraagt, en analyseer de gegevens in Grafana-dashboards om trends, drempelwaarden en afwijkingen snel te herkennen.

Centrale punten

Ik vat de belangrijkste kernpunten samen, zodat je de opzet zorgvuldig kunt plannen. Een exporter stelt Redis-gegevens beschikbaar in het Prometheus-formaat. Prometheus verzamelt deze gegevens met vaste tussenpozen. Grafana genereert hieruit overzichtelijke grafieken. Ik voeg een waarschuwingssysteem toe, zodat problemen niet onopgemerkt blijven.

  • Exporteur: Redis-statistieken beschikbaar maken in Prometheus-formaat
  • Prometheus: Scrape-intervallen selecteren, doelen controleren
  • Grafana: Dashboards importeren, kleuren en drempelwaarden instellen
  • Metriek: Geheugen, latentie, instructiesnelheid en cache-hit-ratio in de gaten houden
  • Waarschuwing: Trends analyseren, ruis vermijden

Overzicht van de installatie: Exporter, Prometheus en Grafana instellen

Ik begin met de Exporteur, omdat het de statistieken levert die Prometheus begrijpt. Vervolgens voer ik het doel in Prometheus in en kies ik een geschikt scrape-interval. Tot slot importeer ik een bekend Redis-dashboard in Grafana en pas ik de panelen aan mijn omgeving aan. Om snel aan de slag te kunnen, helpt een beproefde Grafana-Prometheus-stack, dat al standaard integratie- en visualisatiefuncties biedt. Zo kan ik in korte tijd gebruikmaken van een samenhangend monitoringsysteem, zonder belangrijke details te missen.

Installatie van de Redis-exporter

Ik plaats een afzonderlijke redis_exporter naast de instantie en test ik eerst lokaal of de statistieken bereikbaar zijn. Voor beveiligde instanties stel ik een gebruikersnaam en wachtwoord in, zodat de exporter zich correct kan aanmelden. Vervolgens controleer ik of redis_up de waarde 1 retourneert en of redis_uptime_in_seconds plausibel is. Ik zorg ervoor dat de exporter alleen de benodigde rechten krijgt. Zo stel ik zeker dat de meetgegevens betrouwbaar en veilig beschikbaar zijn.

Exportopties en belastingraming

Ik weeg bewust af welke Collector-opties Ik schakel ze in. Commandstats, keyspace- en replicatiestatistieken zijn standaard ingeschakeld. Extra controles, zoals key-scans of op patronen gebaseerde controles, schakel ik selectief in, zodat ze tijdens het gebruik geen onnodige belasting veroorzaken. In belastingstests meet ik de kosten van de exporter: CPU en geheugen van de exporter zelf, extra netwerkbelasting door scrapes en extra CPU-belasting op Redis door INFO-query’s. Als richtlijn ga ik uit van 15–30 seconden per scrape en gangbare collector-sets met < 1–2% Overhead op een productieve instantie. Als de overhead toeneemt, verlaag ik de collector-diepte of verleng ik de intervallen.

Ik let ook op Label-cardinaliteit: Functies die per database, per commando of per rol veel tijdreeksen genereren, dimensionneer ik bewust. Bij honderden instanties nemen het aantal tijdreeksen snel toe. Ik stel strikte grenzen: geen dynamische labels (bijv. client-ID’s), geen per-key-metrieken in Prometheus. Voor sporadische key-analyses gebruik ik eigen puntmetingen of tools die niet in de hoofdlus van Prometheus draaien.

Prometheus-configuratie: scrape-intervallen en labels

Ik kies voor de Interval zodat de belasting en de detailgraad op elkaar zijn afgestemd. Voor veel workloads volstaan 30 seconden, voor zeer dynamische systemen stel ik 15 seconden in. Ik wijs aan elke instantie unieke labels toe, zoals cluster, role en env, zodat query’s en waarschuwingen duidelijk toe te wijzen blijven. Ik houd de doelen in de gaten via de status in Prometheus, want daar zie ik storingen meteen. Ik maak consequent gebruik van rate-functies om uit tellers per seconde zinvolle metrics te berekenen.

Regels voor registratie, bewaartermijnen en langetermijntrends

Ik definieer Opnameregels voor veelgebruikte afleidingen, zodat dashboards en waarschuwingen snel en stabiel werken. Voorbeelden hiervan zijn de opdrachtfrequentie, netwerkdoorvoer, fragmentatiepercentage en cache-hit-ratio. Zo verminder ik dure query’s tijdens de uitvoering en houd ik panelen responsief. Wat betreft de capaciteit plan ik voldoende Behoud: Op korte termijn (bijv. 15–30 dagen) bewaar ik gegevens met een hoge resolutie; op lange termijn sla ik geaggregeerde statistieken op of pas ik downsampling toe. Trends over kwartalen helpen me om groei- en seizoensinvloeden op een betrouwbare manier te beoordelen.

Ik leg mijn Naam- en labelconventies en voeg per Prometheus-instantie external_labels toe. Zo kan ik metrics ook na een verhuizing of bij gefedereerde opstellingen correct toewijzen. Voor bijzonder volatiele omgevingen maak ik gebruik van Service Discovery met stabiele labels en benader ik targets via service-objecten in plaats van via pod-IP's.

Grafana-dashboards: panelen, kleuren, variabelen

Ik stel dashboards zo samen dat Trends die op het eerste gezicht zichtbaar zijn. Kleuren en waarschuwingsdrempels zet ik duidelijk in de verf, vooral bij geheugen, latentie en instructiesnelheid. Variabelen voor clusters, rollen en naamruimten maken het voor mij gemakkelijker om tussen instanties te schakelen. Annotaties markeren deployments of rollbacks, zodat ik pieken in de statistieken in hun tijdscontext kan beoordelen. Elke tegel geeft antwoord op een concrete vraag, in plaats van alleen maar cijfers te tonen.

Dashboards voor SLO’s en operationele drilldowns

Ik maak bewust onderscheid tussen Overzicht- en Drilldown-dashboards. Het overzicht bevat SLO-gerelateerde statistieken: instructiesnelheid, p95/p99-latentie (voor zover meetbaar), cache-hit-ratio, evictions, replicatiestatus en fouten. Voor de analyse maak ik gebruik van drilldowns met commandstats, netwerkdoorvoer, geblokkeerde clients, CPU-aandelen en de DB-keyspace-structuur (keys, keys met TTL, avg_ttl). Variabelen voor env, cluster, role, instance en db stellen me in staat om van context te wisselen zonder dat er dubbele panelen ontstaan. Ik definieer uniforme kleurcodes (bijv. groen = gezond, geel = voorzichtigheid geboden, rood = kritiek), zodat teams zonder uitleg begrijpen waar actie nodig is.

Kerncijfers begrijpen en correct interpreteren

Ik concentreer me op de Belangrijke cijfers, die de oorzaken zichtbaar maken. Geheugenwaarden laten me zien hoe dicht ik bij de limiet werk. Commandofrequenties en latentie duiden op overbelasting of inefficiënte patronen. Verbindingen en replicatie geven aan of clients vastlopen of dat knooppunten uit de pas raken. De cache-hit-ratio laat me zien of de cache groot genoeg is en of de levensduur van de gegevens klopt.

Metriek PromQL-voorbeeld Dat betekent Richtwaarde/signaal
redis_up redis_up == 1 Exporter bereikt Redis 0 duidt op een storing
redis_memory_used_bytes avg(redis_memory_used_bytes) per (instantie) Werkelijke benodigde heapruimte > 80% van de limiet is kritiek
redis_memory_used_rss_bytes (rss / gebruikt) > 1,5 Fragmentatie van het geheugen Quotiënt blijft hoog = er moet actie worden ondernomen
redis_commands_total rate(redis_commands_total[5m]) Commando's per seconde Sterke stijging + vertraging = knelpunt
redis_connected_clients max(redis_connected_clients) per (instantie) Gelijktijdige verbindingen Dicht bij de maxclients-limiet: gevaarlijk
Raak/Mist sum(rate(redis_keyspace_hits_total[5m])) / (sum(rate(redis_keyspace_hits_total[5m])) + sum(rate(redis_keyspace_misses_total[5m]))) Cache-efficiëntie < 0,9 duidt op een verkeerde configuratie

Indien nodig voeg ik statistieken toe aan Replicatie, bijvoorbeeld of de slave vastloopt tijdens de synchronisatie of dat de linkstatus verandert. Bij clusteropstellingen analyseer ik per rol afzonderlijk om lees- en schrijfpaden te vergelijken. Afwijkingen bekijk ik altijd in de context van implementaties en pieken in het verkeer. Alleen trends leveren mij betrouwbare conclusies op, afzonderlijke pieken meestal niet. Zo neem ik rationele beslissingen in plaats van op mijn intuïtie te vertrouwen.

Aandacht voor persistentie, uitzettingen en netwerken

I monitor Volharding (RDB/AOF) afzonderlijk: status van de laatste opslag op de achtergrond, duur van de laatste uitvoering, wijzigingen sinds de laatste snapshot en of AOF actief is. Frequente of langdurige persistentieprocessen duiden op I/O-bottlenecks of te beperkte resources. Als de latentie tegelijkertijd toeneemt, controleer ik op I/O-verzadiging, compressie en opslagruimte.

Op Uitzettingen Ik sla niet pas alarm bij absolute cijfers, maar bij een percentage dat, in combinatie met een dalend hitpercentage of toenemende latentie, wijst op een tekort aan geheugen. Ik evalueer ook Verlopen sleutels uit: Veel expiraties zijn niet per se slecht, maar plotselinge pieken duiden op foutieve TTL-batches of onregelmatige verwijderingspatronen.

Voor de Netwerk Ik gebruik de in- en uitvoerbytes per seconde om de benodigde bandbreedte en schaalbaarheid te begrijpen. Een sterk groeiend uitvoervolume bij een constante opdrachtfrequentie duidt op grotere antwoorden (bijv. HSCAN/SMEMBERS) of ongecomprimeerde payloads. Daarnaast houd ik afgewierpte verbindingen en geblokkeerde clients in de gaten: beide zijn een duidelijk teken dat ofwel threads ofwel I/O-paden verzadigd zijn.

Replicatie en hoge beschikbaarheid correct meten

Ik meet Achterstand als het verschil tussen de replicatie-offsets of op basis van de tijd sinds het laatste succesvolle I/O-contact met de master. Een aanhoudend grote kloof wijst erop dat slaves achterlopen en dat de leesbewerkingen daar verouderd kunnen zijn. De Linkstatus en lopende volledige/gedeeltelijke synchronisaties controleer ik met eigen dashboards en alarmdrempels. Voor cluster- of Sentinel-opstellingen houd ik rolwisselingen, het aantal aangesloten replica’s en de omvang van de backlog bij. Belangrijke indicatoren zijn een toenemend aantal gedeeltelijke hersynchronisaties (onstabiele verbindingen) en herhaalde volledige hersynchronisaties (I/O- of netwerkproblemen).

Waarschuwingsstrategie met PromQL

Ik programmeer alarmen zo dat ze Trends en niet alleen pieken signaleren. Een geheugengebruik van meer dan 80% gedurende 10 minuten leidt eerder tot een alarm dan een piek van 30 seconden. Een cache-hit-rate van minder dan 90% gedurende 15 minuten wijst op verkeerde TTL’s of te weinig geheugen. Verbindingsfouten en toenemende latentie beschouw ik samen als een aanwijzing voor overbelasting. Terugkerende ruis reduceer ik door middel van for-duur, afvlakking en zinvolle drempelwaarden.

Alarmontwerp: praktijkvoorbeelden en correlatie

  • Beschikbaarheid: redis_up == 0 (onmiddellijk), aangevuld met exporter- en scrape-fouten, zodat ik netwerkproblemen kan onderscheiden van Redis-storingen.
  • Geheugen: used_bytes/maxmemory > 0,8 gedurende 10 minuten en een gelijktijdig stijgende eviction-ratio: geef prioriteit aan schaalbaarheid/TTL-aanpassing.
  • Replicatie: Overschrijding van de drempelwaarde gedurende 5–10 m of herhaalde volledige resyncs binnen 30 m: controleer het netwerk en de omvang van de backlog.
  • Klanten: Percentage geblokkeerde clients > X% van het totale aantal clients gedurende 5 minuten: zoek naar grote BLPOP/BLOCK-bewerkingen of trage Lua-scripts.
  • Volharding: laatste BGSAVE/AOF-status mislukt of duur boven de normale waarde + 50% gedurende 10 m: controleer het I/O-subsysteem.

Ik breng alarmen in verband met elkaar op basis van gemeenschappelijke labels (cluster, rol, omgeving) en vul aan Runbook-links in de alarmmeldingen. Daardoor weet het team meteen welke controles en opdrachten vervolgens moeten worden uitgevoerd. Voor staging-/canary-omgevingen stel ik lagere prioriteiten in, zodat de werkdruk voor de dienstdoende medewerkers beheersbaar blijft.

Capaciteitsplanning en optimalisatie in de praktijk

Ik plan de capaciteit door Trends waarbij ik geheugen, commando's en latentie gezamenlijk beoordeel. Als de hoeveelheid gegevens constant toeneemt terwijl de hit-ratio stabiel blijft, breid ik het geheugen uit of pas ik de TTL's aan. Bij fragmentatie verminder ik de overhead door restrictieve allocators of gericht herschrijven. Ik kies het eviction-beleid en maxmemory afgestemd op de workload, bijvoorbeeld allkeys-lfu voor veelgebruikte sleutels. Voor langetermijnplanning helpt gedegen Prestatiebewaking, dat het workloadpatroon duidelijk weergeeft.

Runbooks, tests en chaos-oefeningen

I document Hardloopboeken Wat betreft de belangrijkste alarmen: welke logbestanden en commando’s controleer ik? Welke statistieken beoordeel ik als eerste? Wie escaleert wanneer? Ik oefen regelmatig met failover- en herstelscenario’s. In gecontroleerde tests simuleer ik netwerkflaps, I/O-beperking, opslagtekorten en afgewezen verbindingen. Ik controleer of alarmen afgaan, of dashboards de patronen zichtbaar maken en of het team binnen de verwachte tijd kan reageren.

Ik ben bovendien van mening dat Basislijnmetingen per omgeving vastgelegd: typische opdrachtfrequentie, gemiddeld geheugengebruik, gebruikelijke persistentieduur, normale replicatievertraging. Hierdoor kan ik afwijkingen van het basisbereik sneller herkennen en op een gefundeerde manier prioriteit geven aan optimalisatiemaatregelen.

Kubernetes- en cloudomgevingen naadloos integreren

Ik gebruik de exporteerfunctie als Zijspan of als zelfstandige implementatie, waarbij ik targets beschrijf via ServiceMonitor. Labels zoals ‘cluster’ en ‘role’ stel ik consistent in, zodat dashboards correct filteren. Voor cluster-eindpunten kies ik één centraal scrape-doel om dubbele metingen te voorkomen. Auto-Discovery bespaart me onderhoudswerk bij dynamische pods. Persistente volumes en passende verzoeken voorkomen opslagtekorten op ongelegen momenten.

Kardinaliteit, service discovery en multi-tenancy

Ik stel de Discovery-regels zo op dat alleen relevante eindpunten worden verzameld. Ik filter met label-selectors en gebruik speciale naamruimten voor infrastructuurcomponenten. Voor multi-tenant-opstellingen houd ik vast aan een duidelijke scheiding tussen de labels ‘env’, ‘team’ en ‘service’. De cardinaliteit houd ik onder controle door het aantal dynamische labelwaarden te beperken en oproepen met een hoge variatie (bijvoorbeeld per database per instantie) alleen daar te activeren waar ze echt nodig zijn.

Ik ben van plan Bronnen Voor Exporter en Prometheus kies ik voor een conservatieve aanpak: verzoeken/limieten afgestemd op het piekvolume van de scrapes, PDB’s voor hoge beschikbaarheid en node-affiniteit voor latentiegevoelige gegevenspaden. Indien nodig schaal ik Prometheus horizontaal (sharding) en ontlast ik het systeem via opname-regels en langere scrape-intervallen voor weinig dynamische metrieken.

Beveiliging en toegang tot statistieken

Ik maak een back-up van Redis via TLS en authenticatie, zodat onbevoegden geen metrieken of gegevens kunnen opvragen. De exporter krijgt alleen de benodigde rechten en geen gevoelige commando's. Netwerkbeleidsregels beperken de toegang tot Prometheus en de exporter-poort. Secrets sla ik apart op en vernieuw ik regelmatig. Zo blijft de meetinfrastructuur betrouwbaar en wordt het risico op aanvallen beperkt.

Naleving en gegevenshygiëne in statistieken

Ik let erop dat er geen persoonlijke gegevens of dat gevoelige inhoud in labels of statistieken terechtkomt. Panelen en variabelen bevatten uitsluitend technische identificatiegegevens. Voor debuggegevens die tijdelijk gevoeliger zijn, stel ik een korte bewaartermijn in en strikt beperkte toegangsrechten. Ik maak in Grafana gebruik van map- en teamrechten, zodat alleen bevoegde personen operationele dashboards kunnen zien.

Veelvoorkomende fouten en probleemoplossing

Ik controleer eerst redis_up, als er waarden ontbreken in het dashboard. Als de waarde 0 blijft, klopt de connect-string of de firewall vaak niet. Als rss sterk afwijkt van used, duidt dit waarschijnlijk op fragmentatie of een neveneffect van het besturingssysteem. Bij een lage hit-rate kijk ik naar TTL's, sleutelgrootte en toegangs patronen. Voor een snelle oorzaakanalyse helpt de RedisInsight-handleiding, die zoekopdrachten en sneltoetsen zichtbaar maakt.

Komen naar voren aanhoudende blokkades (geblokkeerde clients) zoek ik naar lange scripts, grote multi/exec-transacties of buitensporig grote SCAN/SMEMBERS-aanroepen. Bij afgewezen verbindingen controleer ik het aantal maximale clients, de netwerkbeperkingen en of er te veel langdurige verbindingen zijn die systemen belasten. Bij Replicatieproblemen Ik onderzoek link-flaps, de omvang van de backlog, pakketverlies en schijf-I/O. Persistentiefouten duiden vaak op volle opslagruimte, I/O-beperking of mislukte forks.

Versiespecifieke opmerkingen en optimalisatie

Ik houd rekening met Redis-versies Wat de interpretatie betreft: nieuwere versies bieden geoptimaliseerde I/O-paden, gewijzigde standaardbeleidsregels en aanvullende statistieken. Na upgrades controleer ik of dashboards nog steeds alle velden bevatten en of basiswaarden (bijv. CPU-gebruik) zijn verschoven. Bij actieve TLS houd ik rekening met iets meer CPU-gebruik en houd ik in de gaten of de latentie en doorvoer stabiel blijven. Bij een hoog Lua-/script-aandeel houd ik er rekening mee dat lange single-thread-bewerkingen pieken in de statistieken kunnen veroorzaken – herkenbaar aan verhoogde blokkades en latentie kort na de uitvoering van scripts.

Stap voor stap: van de eerste metric tot het dashboard

Ik stel de exporter in en test de Eindpunt-Het antwoord is lokaal. Vervolgens voer ik het doel in Prometheus in en controleer ik de status. Daarna importeer ik een dashboard en controleer ik of de commando’s, het geheugen en de clients er goed uitzien. Daarna stel ik waarschuwingen in voor het geheugen, de cache-hit-rate, de latentie en de replicatie. Tot slot documenteer ik drempelwaarden en runbooks, zodat het team bij storingen snel kan handelen.

Samenvatting

Ik bouw Redis-monitoring met Exporter, Prometheus en Grafana zo dat ik de oorzaken zie in plaats van de symptomen. Metrics over opslag, commandofrequentie, verbindingen, replicatie en cache-hit-rate geven me de doorslaggevende aanwijzingen. Duidelijke dashboards en doordachte waarschuwingen maken piekbelastingen, verkeerde configuraties en knelpunten zichtbaar voordat gebruikers het merken. Duidelijke labels, zinvolle intervallen en beveiligde toegang zorgen voor een betrouwbare werking. Wie deze stappen ter harte neemt, krijgt een continu inzicht in de prestaties en stabiliteit van zijn Redis-instanties en neemt betere beslissingen over de architectuur en capaciteit.

Huidige artikelen

Server in het datacenter met een geoptimaliseerde MariaDB-bufferpool
Databases

MariaDB-bufferpoolgrootte: praktische gids en vuistregels voor de InnoDB-bufferpool

Een praktijkgerichte handleiding voor het bepalen van de omvang van de MariaDB-bufferpool, met duidelijke vuistregels en voorbeeldwaarden. Ontdek hoe u de InnoDB-bufferpool optimaal kunt dimensioneren om de prestaties van uw MariaDB-database aanzienlijk te verbeteren. De nadruk ligt op het bepalen van de omvang van de bufferpool voor stabiele workloads.