Dag 35-39: Skriveuke

Gjennom hele uken har tiden gått med til å skrive ferdig utkast til prosjektrapporen. Denne ble levert inn 26. mai og endelig innleveringsfrist er 9. juni. Arbeidet som gjenstår er å skrive dokumentasjon om det endelige monitoreringsoppsettet slik at dette enkelt kan tas i bruk. Dette forventes å være ferdig i neste uke.

Oppsummert har det i under uttestingen av Logstash blitt prosessert 8,943,279 millioner hendelser som har blitt lagret i Elasticsearch og visualisert gjennom Kibana og Graphite.

Endelig innleveringsdato for prosjektrapporten er 9. juni..

 

Day 14: Summary: Collecting OpenStack logs with Logstash

This blog post is a summary of the first 14 days of work on my bachelor degree.  It is written in English to satisfy some of our Brazilian readers at the University in São Paulo.

Openstack consists of many different services and components, and  all of these services are logging information to their own log files respectively.  However, it would be an impossible job for a system administrator to monitor all of these log files by simply tailing them through the terminal. This is where Logstash is useful. Logstash is an open-source tool for managing events and logs. It is primarily used for collecting logs, parsing them and save them for later use. The tool also comes with an interface for searching in the logs you’ve collected.

Based on the winch project on GitHub I have created a Logstash node where all logs coming from OpenStack have been centralized. On this node all logs are parsed, information extracted and saved in Elasticsearch. Seconds after, the extracted information is visible on the Kibana dashboard (a front-end to Elasticsearch) ready for searching, filtering and visualization. Extracting the information from the log files is a bit more complex than it sounds. However, Logstash is very easy to get started with and once the basics are covered you’re ready to write complex filters yourself. Having the grok debugger in hand and a quick tutorial in the other also helps 🙂

In my configuration I’m pretty much finished with the filters that covers all the lines of log that the nova services in OpenStack are generating. Launching, rebooting, deleting instances and error messages related to instances is now hit by a filter in Logstash and saved for later searches. Additionally I’ve made a filter that caches everything that is not matched by any previous filter in the configuration. This is in case some special event should occur or if the system goes haywire (not that I expect that to happen). The ‘all-matching’ filter is tagged with «unmatched_event» , and from here we can go back and change the original filter to take «these» special events into account. By doing this we will at all times have an overview if something should go wrong. Also we won’t miss any data that somewhat could be important for us to know. The Logstash configuration can be found here.

Further on I’ve also created some metrics which can been seen in the configuration file. Winch monitoring also consist of a Graphite node where these metrics are sent and visualized. I believe that some data are best when they are graphed in some way or the other providing an overview on a day-to-day basis (or even minute-to-minute basis)  on how the system is performing. Graphs also helps seeing systems in context  which is very useful.

During the next couple of weeks I will continue to make filters, extract data from logs until all OpenStack services are covered, visualize data and put data in context by making graphs and much more. Stay tuned!

 

Dag 7: Filtrering av instanshendelser

Dagen ble benyttet til å lage grok-filtre som henter ut informasjon fra OpenStack-instanser. Om en instans blir opprettet, slettet, rebootet, re-initialisert, utvidet eller skulle få en feil vil dette bli truffet av filteret og vi vil kunne se denne hendelsen og all informasjon i webpanelet Kibana.

logstash-output

Her ser vi at all informasjon som jeg publisert i forrige bloggpost har kommet inn som egne felter. Disse kan nå søkes opp i og en kan visualisere dette på forskjellige måter. Neste steg blir å se på andre data i OpenStack og hvordan vi kan hente ut informasjon om opprettelser av eksempelvis nettverk og rutere.

Dag 6: Grok-filtre i Logstash

For å kunne hente ut informasjon fra data som kommer inn i Logstash kan man benytte seg av grok-filtre. Grok-filtre er bygget på toppen av regulære uttrykk og på bakgrunn av dette kan man hente ut den informasjonen man ønsker, eksempelvis fra loggdata. For å hente ut relevante data er man avhengig av å vite noe om dataene på forhånd. For eksempel sier følgende logglinje hvilken dato hendelsen skjer på, hvilket loglevel informasjonen er i, hvilken tjeneste som genererer meldingen og hvilken instans i OpenStack meldingen omhandler. At en instans starter kan være nyttig informasjon dersom den ikke skulle komme opp som forventet.

2015-03-20T08:38:51+00:00 compute 2015-03-20 08:38:51.292 11139 AUDIT nova.compute.manager [req-414b1736-9bf6-4457-a848-1295ebb12d7c b251c86204eb44b6822a998da0d28ad4 1a49bb7c49914d96b95ade9b1345eac2] [instance: 4e86c611-0914-4da2-9ed4-4c2ca5529ffb] Rebooting instance

Ved hjelp av grok debugger har jeg laget et filter som henter ut informasjonen og gjør den svært oversiktlig og enkel å organisere. Etter at informasjonen er kommet gjennom filteret ser den slik ut:

{
  "openstack_hostname": [
    "compute"
  ],
  "timestamp": [
    "2015-03-20 08:38:51.292"
  ],
  "openstack_pid": [
    " 11139"
  ],
  "openstack_loglevel": [
    "AUDIT"
  ],
  "openstack_program": [
    "nova.compute.manager "
  ],
  "request_id_list": [
    "414b1736-9bf6-4457-a848-1295ebb12d7c",
    "1a49bb7c49914d96b95ade9b1345eac2"
  ],
  "openstack_instance_id": [
    "4e86c611-0914-4da2-9ed4-4c2ca5529ffb"
  ],
  "openstack_instance_action": [
    "Rebooting instance"
  ]
}

Dette sendes så videre fra Logstash til Elasticsearch der man kan søke opp spesifikke data og visualisere dette på mange ulike måter. Visualisering vil bli et eget tema på bloggen senere.

 

Dag 1: Installasjon og oppsett av logstash, elasticsearch & kibana

Etter tips fra prosjektleder i UH-sky prosjektet er et av monitoreringsverktøyene jeg har valgt å se på logstash. Et  kraftig  verktøy som brukes til å håndtere hendelser og logger.

logstash

Logstash samler inn logger fra ulike kilder, parser loggene og lagrer de til senere bruk.  Når man installerer logstash kommer det også med et webinterface der man kan søke etter hendelsene i loggfilene og visualisere dette slik man ønsker. Dette for å kunne kartlegge feil, se endringer i systemer over tid, sette sammen data som har påvirkning på herandre osv. Logstash er et åpent kildekodeverktøy og er lisensiert under Apache 2.0.

OpenStack er et komplekst rammeverk som består av mange tjenester. Hver tjeneste har sitt eget bruksområde og sitt eget API. Det er mye informasjon som til daglig vil være spredt rundt om i  systemet. Dette gjør det viktig å samle all loggdata på et samlet sted slik at det blir enklere å hente ut den informasjonen vi trenger for å sørge for at rammeverket til enhver tid fungerer som det skal. Logstash er veldig egnet til dette formålet. I logstash.conf kan vi tagge innkommende logger og videre kan det så kjøres filter basert på disse taggene for å hente ut den spesifikke informasjonen vi vil ha tak i. For eksempel tjenestenavn, diskbruk, antall påloggingsforsøk, brukere, IP adresser,  nettleser osv. Alt av informasjon som finnes i en loggfil kan ekstraheres, lagres og videresendes til en eller annen form for visualisering.

Jeg har til nå arbeidet med en kodebase som jeg forket på github som installerer disse tre verktøyene som nevnt i overskriften. Videre har jeg tenkt å integrere denne mot winch slik at den passer øvrig prosjektstruktur. Under følger et bilde av hvordan visualiseringen av loggdataene ser ut.

kibana4-visualisering

 

 

Dag 31: Logstash & Kibana

Benyttet mesteparten av dagen til å kikke på to verktøy som heter Logstash og Kibana. Logstash er et verktøy for å samle og håndtere logg. Den samler inn, parser og lagrer logg og viser dem i et webpanel kalt Kibana. Her kan man ved hjelp av et kraftig søkeverktøy søke opp alt av hendelser som har skjedd på systemet siden loggingen startet. I webpanelet vil det genereres grafer på hvor ofte en hendelse man har søkt på forekommer. Ganske nyttig dersom man skal filtrere en spesifikk feil for å finne ut om feilen er kritisk eller ikke.

Konfigurasjonsmessig kan man gjøre mye med logstash. Det viktigste av konfigurasjonen skjer ved hjelp av en konfigurasjonsfil der en spesifiserer input, hva som skal filtreres og output. Output delen kan være forskjellige tjenester, i dette tilfellet ble output satt til å være elasticsearch. Elasticsearch er logstash’ sin backend for lagring av logg. Senere vil jeg ta for meg installasjonen og oppsett av logstash og kartlegge tjenester som skal overvåkes. I tillegg ønsker jeg også å kikke nærmere på verktøyet Graphite som kan spesifiseres som output.