Monitorering & strategi av
loggning i distribuerade system
Visualisering med hjälp av Elasticstack
Monitoring & strategy for logging in distributed systems Visualising with Elasticstack
Philip Wingfelt Roman Eichler
Fakulteten för hälsa, natur-och teknikvetenskap Datavetenskap
C-uppsats 15hp
Handledare: Stefan Alfredsson Examinator: Johan Eklund Datum: 2020-01-14
Förord
Tack till våra arbetskamrater, flickvänner, och familjer. Utan er hade arbetet troligtvis gått mycket fortare, men vi hade nog blivit utbrända då.
Speciellt tack till våra handledare, Jesper Hellberg och Stefan Alfredsson som har hjälpt oss genom hela arbetet både med bra feedback men även genom utvecklingsidéer och många trevliga samtal.
Och slutligen ett stort tack till ÅF Pöyry - som under arbetets gång bytte namn till AFRY - för att vi fick göra vårt arbete hos er!
i
ii FÖRORD
Sammanfattning
Detta arbete har utförts för att svara på frågan: “Hur mår vårt system?”. Genom att jämföra olika monitoreringsmöjligheter och sätt att hantera loggfiler drogs slutsatsen att Elasticstack är lämpligt för att svara på frågeställningen. Arbetet belyser för- och nackdelar med Elasitcstack, hur systemet kan implementeras, och vad som är viktigt att tänka på. Vidare presenteras resultatet i form av statistiska grafer samt sökbara loggstrukturer. Slutligen diskuteras en strategi för hur skrivning till loggen bör ske, både för att logga mer användbar data, men också för att underlätta användandet av Elasticstack. Ett blad med rekommendationer har tagits fram och hittas under Bilagor.
iii
iv SAMMANFATTNING
Abstract
This project was created to answer the question: “How is our system doing?”. By comparing different monitoring options and ways to handle log files, the conclusion was drawn that Elasticstack is suitable to answer the question in mind. This thesis presents pros and cons with Elasticstack, how the system was implemented, and what’s important to keep in mind. Further, the result is presented as statistical graphs and searchable log-structures. Lastly, a discussion concerning log-strategy is presented. This strategy was created to specify how one should write to a log file to only store relevant data and to ease use of Elasticstack. A sheet with these recommendations is attached as an Appendix.
v
vi ABSTRACT
Innehåll
Förord i
Sammanfattning iii
Abstract v
Figurer xi
Tabeller xiii
Listings xv
1 Introduktion 1
1.1 Vad är loggning? . . . . 2
1.2 Uppdragsgivaren . . . . 2
1.3 Uppdraget . . . . 3
1.4 Mål & Syfte . . . . 3
1.5 Metod . . . . 4
2 Bakgrund 5 2.1 Befintligt system . . . . 5
2.2 Elasticstack . . . . 6
2.2.1 Filebeat . . . . 6
vii
viii INNEHÅLL
2.2.2 Logstash . . . . 7
2.2.3 Elasticsearch . . . . 7
2.2.4 Kibana . . . . 8
2.2.5 Plugins . . . . 8
2.2.5.1 Grok . . . . 8
2.2.5.2 Date Filter Plugin . . . . 9
2.2.5.3 Elasticsearch Output Plugin . . . . 9
2.3 Liknande System . . . . 9
2.3.1 Graylog . . . . 9
2.3.2 Splunk . . . . 10
2.3.3 Octopussy . . . . 10
2.3.4 Fluentd . . . . 10
2.3.5 Zipkin . . . . 10
2.4 Andra använda verktyg . . . . 11
2.4.1 Virtual Box . . . . 11
2.4.2 Grok Debugger . . . . 11
2.5 Reguljära Uttryck . . . . 11
3 Implementation 13 3.1 Testmiljö . . . . 13
3.2 Implementation av Elasticstack . . . . 14
3.2.1 Multiline i Filebeat . . . . 15
3.2.2 Taggning i Logstash . . . . 17
3.2.3 Parsing med Grok . . . . 19
3.2.4 Visualisering i Kibana . . . . 23
3.3 Driftsättning av systemet . . . . 25
3.4 Utvecklingsmöjligheter . . . . 28
INNEHÅLL ix
4 Strategi för loggning 31
4.1 Tidigare forskning . . . . 31
4.1.1 Vanliga misstag . . . . 31
4.1.2 Loggning och arkitektur . . . . 34
4.1.3 Diskussion . . . . 35
4.2 Nulägesanalys . . . . 36
4.3 Förslag på strategi . . . . 36
5 Resultat 39 5.1 Evaluering av monitoreringsverktyg . . . . 39
5.1.1 Jämförelse av verktyg . . . . 41
5.2 Dataanalys . . . . 43
5.3 Tidig användning av systemet . . . . 44
6 Slutsats 47
Förkortningar 50
Litteraturförteckning 52
Bilagor 56
A Förslag på loggnings-strategi 59
B logstash.conf 61
C filebeat.yml 63
D Fler grafer från Kibana 69
x INNEHÅLL
Figurer
2.1 Visualisering av Elasticstacks arkitektur . . . . 6
3.1 Översikt av kommandofönster för Elasticstack . . . . 15
3.2 Översikt över alla logginlägg, uppdelat i olika kategorier. . . . 24
3.3 Antal logg-medddelanden över tid uppdelad i kategorier. . . . 25
4.1 Visualisering av klassisk logg-arkitektur. . . . 34
4.2 Visualisering av arkitektur byggt kring en logg som kommunikationkanal. 35 5.1 Dashboard i Kibana som visar antal logg-meddelanden per tidsenhet. . . 43
5.2 Dashboard i Kibana med en övergripande vy över testdatan. . . . . 44
D.1 Graf från Kibana: Logcount by category . . . . 69
D.2 Graf från Kibana: Logcount by percent . . . . 70
D.3 Graf från Kibana: Logcount over time . . . . 70
D.4 Graf från Kibana: Loglevel over time . . . . 71
D.5 Graf från Kibana: Errors by category . . . . 71
D.6 Graf från Kibana: Warnings by category . . . . 72
D.7 Dashboard från Kibana: Dashboard - Home . . . . 72
xi
xii FIGURER
Tabeller
5.1 Jämförelse av verktygen: Elasticstack, Graylog och Octopussy . . . . . 41 5.2 Jämförelse av verktygen: Splunk, Fluentd, Zipkin . . . . 41
xiii
xiv TABELLER
Listings
2.1 Exempel på reguljära uttryck . . . . 12
3.1 Exempel på struktur för gemensamt logghuvud . . . . 15
3.2 Exempel på egna reguljära uttryck för att hitta tidsstämplar . . . . 16
3.3 Kommandon för plugin-installation för Logstash . . . . 18
3.4 Specificering av in- & out-put för Logstash i logstash.conf . . . . 18
3.5 Filter för borttagning av Filebeats taggar i logstash.conf . . . . 19
3.6 Reguljära Uttryck från Grok . . . . 20
3.7 Filter för parsning av logghuvuden i logstash.conf . . . . 21
3.8 Konvertering av datatyp för fältet payload_size i logstash.conf . . . . . 22
3.9 Omdefiniering av datum i logstash.conf . . . . 22
xv
xvi LISTINGS
Kapitel 1
Introduktion
När ett datorsystem ska underhållas nämns ofta termer som “hygien” och “mående”
- som inte alls har med duschen eller hälsan att göra. Inom datateknik används dessa termer för att enkelt kunna beskriva hur lätt ett system är att underhålla och vad ett systems status är. Uttryckt i dessa termer handlar detta arbete om att ta fram hur ett datasystem mår genom att övervaka händelser i systemet - liknande en pulsmätare.
Vidare undersöker arbetet en aspekt av systemets hygien som ofta blir försummad;
loggning.
I detta kapitel presenteras en överblick av arbetet, uppdraget samt uppdragsgiva- ren. Här presenteras även ämnet loggning och hur ämnet berör projektet. I sektion 5.1 Evaluering av monitoreringsverktyg (sid. 39) diskuteras vilka verktyg som kunde användas för undersökningen av systemet - en jämförelse av olika pulsmätare. I sektio- nerna 5.2 Dataanalys och 5.3 Tidig användning av systemet (sid. 43, respektive sid. 44) visas resultaten av undersökningen. Systemets hygien undersöks i en nulägesanalys och förbättringsförslag redovisas i sektion 4 Förslag på strategi (sid. 31).
1
2 KAPITEL 1. INTRODUKTION
1.1 Vad är loggning?
Loggning, loggar och alla begrepp runtomkring ämnet är ofta uttryckt i vaga termer och kan innebära flera olika meningar beroende på vem som använder begreppen [1].
I detta arbete behandlas loggar där den allra vanligaste tolkningen stämmer in. Andra tolkningar kommer även att diskuteras i sektion 4 Strategi för loggning (sid. 31).
En logg i detta arbete är en textfil som innehåller en mängd logg-meddelanden eller logg-inlägg, som i sin tur är strukturerade beskrivningar om vad som har hänt i ett data- system. Loggning är därmed processen att skapa loggar, vilket i detta arbete görs av datasystem (se sektion 2.1, sid. 5).
Logg-analys som detta arbete främst fokuserar på är processen att ur en eller fler loggar skapa en övergripande bild över händelserna i systemet, sortera och filtrera datan och slutligen upptäcka mönster bland informationen. Logg-analys kan genomföras både manuellt och automatiserad. Manuell logg-analys är kortfattat att en människa läser obehandlade loggmeddelanden och därefter drar slutsatser om systemet. Automatiserad logganalys som används i arbetet innebär att låta en dator läsa loggar och skapa hel- hetsbilder över datamängden i form av statistiska beräkningar. Därefter finns flera olika möjligheter hur slutsatser kan dras ur datamängden, även här är processen uppdelad i manuell och automatiserad analys. Den automatiserade analysen kan innefatta artificiell intelligens som vidare analyserar data, det är ett ämne som arbetet inte berör. Den slutliga manuella processen kommer att diskuteras i sektion 3 Implementation (sid. 13) och sektion 5 Resultat (sid. 39).
1.2 Uppdragsgivaren
ÅF Pöyry AB (hädanefter benämnt som AFRY eller uppdragsgivaren) är ett företag
som intar en ledande roll på den internationella marknaden inom rådgivning, design och
teknik. Företaget skapar lösningar med fokus på hållbarhet och globala trender däribland
1.3. UPPDRAGET 3 digitalisering och urbanisering. Företaget är en arbetsgivare för över 17 000 experter inom industri, infrastruktur och energi [2].
AFRY består av fem divisioner; Infrastructure, Industrial & Digital Solutions, Pro- cess Industries, Energy och Management Consulting. Uppdraget i denna rapport kom- mer att ligga under Digital Solutions och handledas av Jesper Hellberg som är anställd konsult på AFRYs kontor i Karlstad. Det var Hellberg som kom med uppdragsförslaget och hjälpte till under hela projektet vid frågor och problem kring utveckling av monitor- eringssystemet och driftsättningen. Hellberg var även ansvarig för att tillhandahålla materiell utrustning samt programvara och testdata som krävdes för att utföra uppgiften.
1.3 Uppdraget
I Oktober 2018 hölls en presentation på AFRYs kontor i Karlstad om framtida examens- arbeten. En av de presenterade uppgifterna kallades för "Hur mår vårt system?", och handlade om att monitorera systemet som konstruerades för kunden Hertz First Rent A Car AB (hädanefter benämnt som Hertz). Uppgiften skulle innefatta ett sätt att monitorera systemet under drift, underlätta felsökning vid krasch, samt formulera en strategi för att logga. Uppgiften är intressant för uppdragsgivaren då den ska resultera i ett verktyg som uppdragsgivaren sedan kan använda under driften av sina tjänster för att underlätta underhåll och förhoppningsvis minska driftstopp. Mer konkret vad som bör göras är inledningsvis inte specificerat, det var upp till oss tillsammans med uppdragsgivaren att begränsa uppdraget och formulera en specifikation.
1.4 Mål & Syfte
Arbetets mål var att skapa eller implementera en eller flera applikationer för att monitor-
era det befintliga systemet (se sektion 2.1). Monitoreringsverktyget skulle underlätta i
4 KAPITEL 1. INTRODUKTION att skapa en helhetsbild över systemet och underlätta vid övervakning under drift. Dessa krav var ställda för att uppfylla en förhoppning om att minska driftstopp samt underlätta vid underhåll av systemet.
1.5 Metod
Eftersom specifikationen av uppdraget inte påvisade vilka verktyg som skulle användas och implementeras inleddes som första del av arbetet en förundersökning som resulte- rade i en jämförelse av ett antal olika verktyg (se sektion 5.1, sid. 39).
Andra delen av arbetet gick ut på att sätta upp en isolerad testmiljö med en första implementation av det valda verktyget Elasticstack (se sektion 2.2, sid. 6). I denna version användes batch-körning för att analysera testdata. Denna del av arbetet gjordes för att kunna planera och förbereda den tredje delen av arbetet samt få en förståelse för hur Elasticstack fungerar och kan anpasas till uppgiften.
Tredje delen av arbete gick ut på att implementera Elasticstack - med hjälp av kunskaper och lärdomar tagna från tidigare version - på en egen server för att skapa en kontinuerlig monitorering av det befintliga systemets testserver.
Under arbetets genomförande har genom diskussion med handledare Hellberg samt
kollegor och logganalys ett flertal brister i logghanteringen och loggformat upptäckts i
det befintliga systemet. Därav utökades uppdraget till att skapa ett förslag om loggnings-
strategi som uppdragsgivaren kan använda som en grund för att utveckla en strategi om
hur loggar bör hanteras på kontoret (se sektion 4, sid. 31).
Kapitel 2 Bakgrund
I detta kapitel förklaras vilka förutsättningar som låg till underlag för uppdraget, i form av det befintliga systemet som undersöktes. Här finns även information om mjukvaror som användes för att skapa en lösning till uppdraget samt information om andra mjuk- varor med liknande egenskaper som ingick i en jämförelse (se sektion 5.1, sid. 39) för att avgöra vilket eller vilka verktyg som var bäst lämpade för att utveckla en lösning.
2.1 Befintligt system
AFRY tillhandahåller - på uppdrag av biluthyrningsfirman Hertz - en digital lösning för onlinebokning och ärendehantering. Systemet består av flera JBoss-serverar som driver ett flertal java-applikationer, webb- samt apache-serverar. Tanken är att resultatet av projektet skall operera parallellt med dessa applikationer, helt utan att påverka dem.
Gemensamt för alla dessa applikationer är att de skriver till en central serverlogg samt egna loggfiler.
5
6 KAPITEL 2. BAKGRUND
2.2 Elasticstack
Elasticstack - tidigare känt som ELK-stack - är en grupp av modulära verktyg för att övervaka ett system under körning. Det tidigare namnet ELK-stack är ett akronym som kommer av modulerna Elasticsearch, Logstash, och Kibana. Företaget Elastic bytte namn på ELK-stack till Elasticstack när modulen Beats kom till. I detta arbete används Elasticstack och dess olika moduler för att analysera data som befinner sig i olika logg- filer som ligger på Hertz server. Hur beslutet att använda Elasticstack fattades diskuteras under Evaluering av monitoreringsverktyg (se sektion 5.1, sid. 39).
Figur 2.1: Visualisering av Elasticstacks arkitektur
Figur 2.1 ovan visar hur de olika delarna i Elasticstack används i relation till varan- dra. Mer specifikt vad varje modul gör förklaras nedan.
2.2.1 Filebeat
Filebeat är en version av modulen Beats [3]. Beats är en applikation för att läsa in data från olika källor, med möjlighet att göra det samtidigt som källan producerar mer data.
Beroende på vilken typ av källa Beats skall läsa data ifrån finns olika versioner av Beats.
I detta arbete är det främst loggar som är relevant, därför används versionen Filebeat, då den är specialiserad för att läsa direkt från logfiler. Exempel på andra versioner är Packetbeat, för att läsa nätverksdata; Metricbeat, för att läsa av lasten på ett system;
samt Heartbeat, för att mäta bland annat tider som system har varit under körning.
Filebeat i sig är en fristående applikation som på ett enkelt och prestandasnålt sätt
hjälper till att centralisera loggar och filer från nästan obegränsat många källor [3].
2.2. ELASTICSTACK 7 Utöver att kunna komma ihåg var applikationen läste senast efter en systemkrash använder sig Filebeat även av ett mottrycks-sensitivt protokoll för att förebygga krascher.
Vid kommunikation med Logstash eller Elasticsearch kan Filebeat skicka mer data än vad de två förstnämnda applikationerna klarar att hantera; de kan då be Filebeat att sakta ner. När stockningen är utredd kan Filebeat återgå till sin normala läsningsfart och fortsätta skicka vidare data.
2.2.2 Logstash
Logstash är modulen av Elasticstack som sammanslår och processerar data som sedan skickas vidare till sökmotorn (i.e. Elasticsearch). Logstash gör det möjligt att ta in data samtidigt från flera olika källor för att sedan berika och transformera datan innan den indexeras hos sökmotorn [4].
I detta arbete användes logstash främst som en pipeline mellan Filebeats och Elastic- search medan majoriteten av databearbetningen utfördes av Grok (se sektion 2.2.5.1).
2.2.3 Elasticsearch
Elasticsearch är en sök- och analyserings-motor som är den centrala delen i Elasticstack [4]. Verktyget har flera olika användningsområden; allt ifrån säkerhets- och företags- analys till sökning i applikationer och på webbsidor. I detta arbete användes Elastic- search som analyseringsverktyg för loggdata. Innan rå data indexeras i Elasticsearch parsas, normaliseras och berikas den av verktyg som Filebeat och Logstash. Efter in- dexeringen i Elasticsearch kan komplexa frågor ställas mot motorn på liknande sätt som mot databaser.
Data som indexeras i Elasticsearch blir en del av så kallade Elasticsearch Index som
är en kollektion av relaterade dokument i JSON format . Verktyget använder sig av något
som kallas inverted index som innebär att varje unikt ord i ett dokument listas och att
8 KAPITEL 2. BAKGRUND varje dokument där ordet förekommer identifieras. Detta index skapas samtidigt som Elasticsearch går igenom indexeringsfasen och lagrar all data som tas emot ifrån vald källa (i detta fall logstash) [4].
2.2.4 Kibana
Kibana är ett grafiskt verktyg som direkt bygger på Elasticsearch [5]. Genom att på ett stilrent sätt visualisera all data som sparas i Elasticsearch tillåter Kibana användaren att enkelt hitta i stora mängder data. Kibana gör det möjligt för användaren att söka i och filtrera stora datamängder på kort tid med hjälp av taggar som är fäst på den sorterade datan som finns lagrad i Elasticsearch.
2.2.5 Plugins
Elasticstack är som tidigare nämnt en grupp verktyg som till stor grad är modulariserade.
Detta innebär att verktygen är anpassade till att kunna användas både med varandra men är även relativt enkla att konfigurera till att arbeta med andra programvaror. Den sistnämnda egenskapen resulterar i en rad olika plugins till de olika modulerna i Elastic- stack som kan användas för att anpassa implementationen på det sättet som krävs av uppgiften. Här följer de olika plugins som användes för att med Elasticstack skapa en lösning till uppdraget.
2.2.5.1 Grok
Grok är ett plugin till Logstash som används för filtrering av data [6]. Groks uppgift är
att parsa texten i loggfilerna så att datan kan indexeras som önskad med olika taggar i
Elasticsearch. Med andra ord så omvandlar Grok texten som är skapad för att den ska
läsas av människor till strukturerad och sökbar data för maskiner. Detta gör Grok med
hjälp av reguljära uttryck (se sektion 2.5, sid. 11).
2.3. LIKNANDE SYSTEM 9 2.2.5.2 Date Filter Plugin
Date Filter Plugin är ett plugin till Logstash (se sektion 2.2.2) som tillåter manipulation av fältet som innehåller ett inläggs tidsstämpel. Med hjälp av filtret kunde tidsstämpeln, som automatiskt sätts av Filebeat (se sektion 2.2.1) till inläsningstiden, sättas till den tiden då inlägget skapades [7]. Tiden när ett loginlägg skapades är sparad som en tidsstämpel i början av varje logginlägg i det befintliga systemet.
2.2.5.3 Elasticsearch Output Plugin
Elasticsearch Output Plugin är ett plugin till Logstash som används för att Logstash ska kunna skicka utdata till Elasticsearch. Pluginet tillåter Logstash att kommunicera med Elasticsearch med hjälp av HTTP [8].
2.3 Liknande System
I arbetet används Elasticstack för att analysera datan. Här beskrivs liknande mjukvara som kan genomföra uppgiften som Elasticstack utför i arbetet men som valdes bort, se sektion 5.1 Evaluering av monitoreringsverktyg (sid. 39) för vidare diskussion om varför.
2.3.1 Graylog
Graylog är en grupp av verktyg som fungerar väldigt likt Elasticstack. Delarna som ingår
i Graylog är Elasticsearch, MongoDB, Graylog main server samt Graylog web interface
[9]. I Graylog används Elasticsearch som lagringspunkt för inkommande loggmeddelan-
den, MongoDB som lagring för så kallad meta-data (i.e. konfigurationer), Graylog main
server agerar som mellanhand för alla delar i systemet medan Graylog web interface är
det grafiska användargränssnittet [10].
10 KAPITEL 2. BAKGRUND
2.3.2 Splunk
Splunk är ett verktyg som löser samma problem som Elasticstack och Graylog. De tre huvudkomponenterna i Splunk är dess forwarder, indexer och search head. Forwarder skickar data till olika indexers som lagrar och indexerar data samt svarar på sökför- frågningar. Search head är frontend av verktygets webbgränssnitt där komponenterna kan föras samman från olika servrar eller delas upp till olika servrar [11].
2.3.3 Octopussy
Octopussy är ett monitoreringsverktyg som är specialiserad på så kallade sysloggar som skapas av enheter som supportar syslog protokollet. Huvuduppgiften av Octopussy är att alarmera administratörer om olika event såsom systemavbrott, attacker på system eller fel i applikationer [12].
2.3.4 Fluentd
Fluentd är ett verktyg som uppfyller samma funktioner som Logstash och Filebeat genom att läsa in data från olika källor och konvertera dessa till JSON format som sedan kan skickas till verktyg för monitorering och analys som exempelvis Elasticsearch [13].
Filosofin bakom Fluentd är att skapa ett väldigt snabbt och resurssnålt sätt att samla data och skicka det mellan applikationer.
2.3.5 Zipkin
Zipkin är en applikation som används för distribuerad tracing och identifikation av fördröjningsproblem. Applikation fungerar på det sättet att det fästs unika ID:n på samt- liga förfrågningar bland serverapplikationer som följer med meddelanden hela vägen.
Därefter samlar Zipkin ihop data från dessa ID:n för att få information om bland annat
2.4. ANDRA ANVÄNDA VERKTYG 11 fördröjning. Därefter tillåts användaren att analysera datan i ett grafiskt användargräns- snitt [14].
2.4 Andra använda verktyg
Under arbetes gång har fler verktyg förutom Elasticstack använts, dessa verktyg beskrivs här för att ge läsaren en bättre förståelse av lösningsvägen för uppdraget.
2.4.1 Virtual Box
Virtual Box är ett virtualiseringsverktyg som tillåter användare att emulera virtuella maskiner med olika operativsystem. Till exempel så tillåter Virtual Box att emulera en virtuell maskin med operativsystemet Linux på en fysisk maskin med operativsystemet Windows 10 [15].
2.4.2 Grok Debugger
Grok Debugger är ett onlineverktyg som hjälper vid konstruktion av reguljära uttryck.
Både med hjälp av de mönster som finns som en del av Grok (se sektion 2.2.5.1, sid. 8) och genom att skriva egna reguljära uttryck hjälper hemsidan att upptäcka fel i uttrycken [16].
2.5 Reguljära Uttryck
“Regular Expressions are patterns of characters that match, or fail to match, sequences of characters in text.” - Watt, A. (2005) [17].
Reguljära uttryck är som Watt beskriver mönster av olika tecken, där vissa tecken
och teckenkombinationer har speciellt innebörd. Uttrycken kan inte användas för sig
själva utan måste användas i script- eller programmeringsspråk. Då uttrycken matchar
12 KAPITEL 2. BAKGRUND respektive inte matchar skapar de en möjlighet att tillåta mönstermatchning och sökning i texter [17]. Tekniken är oerhört kraftfull och oundviklig inom dagens stränghantering, då reguljära uttryck är det effektivaste sättet att kunna söka i och därmed kunna utföra komplexa operationer på strängar. I Listing 2.1 visas ett enklare exempel på hur reguljära uttryck fungerar.
Förklaring till resultaten av listing 2.1: “ˆ” symbolen betyder att raden måste börja med nästföljande symbol; i detta fall bokstaven “s”. “.” symbolen är en så kallad “wild- card” och matchar med samtliga tecken utom radbrytningar, “*” anger mängden av före- gående karaktär, just “*” betyder 0 eller fler. På liknande sätt kan obegränsade mängder av mönster skapas för att kunna matcha eller ignorera värden i strängar. Mönstren är inte heller begränsade till endast enstaka bokstäver som “s” utan hela ord och texter fungerar på samma sätt. Exempelvis matchar strängen “sand” med både uttrycken “s.*”
som i listing 2.1 men även med mönstret “san.?”. “?” symbolen betyder “en eller ingen”.
Reguljära uttryck ger även möjlighet att kunna matcha siffror och talföljder; mönst- ret “\d” matchar enstaka siffror mellan 0 och 9 medan “\d*” matchar när 0 eller fler siffror följer efter varann. Den exakta implementationen av reguljära uttryck varierar lite mellan olika programmerings- och scriptspråk men grunderna brukar vara de samma.
R e g u l j ä r t u t t r y c k : ^ s .∗
Exempel s t r ä n g a r −> r e s u l t a t
s a n d −> True
s y s t e r −> True
a n d e r s −> F a l s e