Overvåking av trender over tid

Contact: it-drift-gd-gid@usit.uio.no
$Date: 2021-01-07 09:02:48 +0100 (Thu, 07 Jan 2021) $

1   Hensikt

Dette dokumentet beskriver systemet for innsamling og grafing av tidsserie-data som blir benyttet til bl.a.:

  • måling/historikk på bruk av maskinvare-ressurser (collectd).
  • måling/historikk for applikasjoner (statsd)
  • måling/historikk for nettverkskomponenter (NAV)
  • måling/historikk generert med script

2   Arkitektur

2.1   Overordnet beskrivelse

Følgende figur viser konseptskisse av hvordan ting henger sammen

Konseptskisse

En viktig komponent i systemet er innsamlingsverktøyet collectd. Collectd's eneste fokus er å samle inn tidsserie-data. Verktøyet er plug-in- basert i , og har mange ferdiglagede plugins tilgjengelig i tillegg til muligheten for å enkelt lage egne.

Det er viktig at verktøy som samler inn slike data bruker minst mulig resssurser på selve innsamlingen slik at verktøyet i minst mulig grad påvirker måleresultatet, dvs. at ressursbruken man måler er forårsaket av applikasjoner og ikke selve måleverktøyet. Collectd er skrevet i C og er "en av de beste i klassen" med hensyn til lav ressursbruk. Verktøyet er mye brukt, aktivt vedlikeholdt og har et aktivt «community».

Hvorvidt Collectd er en klient, tjener eller bare en selvstendig enhet konfigureres med nettverks-plugin'en. Vi benytter en sentral server (metrics01.uio.no) hvor collectd kjører som server. Linux-maskiner som er RHEL6 eller nyere og er i produksjon, konfigureres automatisk til å sende basisdata som CPU, minne, disk og nettverk til collectd-serveren. Automatisk konfigurasjon av collectd-klienter skjer ved hjelp av Cfengine for maskiner i produksjon.

På metrics01 kjører også graphite. Graphite består av to hovedkomponenter: «carbon daemon» og Graphite web-app. «Carbon daemon» tar imot data fra collectd og lagrer i lokale filer i whisper format.

Data sendes fra collectd på metrics01 med output-pluginen "write_graphite" og mottas av carbon-c-relay som så sprer lasten utover 20 instanser av carbon-daemon. Dette for å kunne utnytte alle CPU'en og ytelsen til SSD-diskene.

3   Grafer

3.1   Graphite

Cnamet graphite.uio.no peker på metrics01 sin instans av den vanlige graphite django-baserte applikasjon. Denne krever ingen innlogging og brukes utelukkende for å browse metrics som er tilgjengelig i metricbiblioteket. Her finnes alt som samles til graphite.

Som nevnt over har Graphite et url-API som kan brukes for scripting. Dette er dokumentert på API-referansen. Det går an å spørre Graphite hvilke metrics som er tilgjengelig via /metrics/expand?query=<regexp>. Data returneres som JSON. Man kan nøste seg helt ned i hierarkiet ved å spørre ett og ett nivå nedover til man når bunnen, f.eks. hvilke metrics finnes for alven: /metrics/expand?query=collectd.alven_uio_no.* Dette kan igjen brukes til å lage spesialtilpassede sett med grafer og sammenstilling av data av interesse.

Notat

Dashboards skal kun lages/lagres i grafana. Dashboard som lagres i graphite-GUI vil forsvinne når web-applikasjonen restartes.

3.2   Grafana

Grafana er stedet hvor man definerer egne «dashboard», dvs. samlinger av metric-visualiseringer som man ønsker å følge med på og se i sammenheng.

I grafana kan man mikse metrics fra hele graphite-biblioteket (scripts,collectd,nav,statsd) og alt som finnes i Zabbix.

Grafana har et sett med interne organisasjoner som man kan veksle mellom. Alle grupper ved USIT har en egen organisasjon hvor medlemmer i ansattgruppen (ldap) har full tilgang til å opprette, endre og slette dashboard-definisjoner.

Notat

Man kan ikke slette eller endre bakenforliggende metrics i grafana, kun sammenstillinger og visualiseringer i form av dashboards.

I tillegg til egen organisasjon finnes det to fellesorganisasjoner: «usit» og «public»

Samtlige i ldapgruppen «usit» har lesetilgang til grafana-organisasjonen «usit». I tillegg har medlemmer i gruppen «grafana-usit-edit» mulighet til å lage,endre og slette dashboards. Tanken er at «usit» skal inneholde dashboards som man kan tenkes å dele med andre grupper på usit, men et begrenset utvalg brukere har tilgang til å vedlikeholde disse for å unngå kaos og sletting ved uhell.

Gruppen «grafana-usit-edit» har også tilgang til å gjøre endringer i organisasjonen «public». Forskjellen på public og «usit» er at alle som kan nå grafana.uio.no ip-messig har tilgang til dashboards i «public» uten innlogging. Dvs. at direktelenker til dashboards i denne organisasjonen vil kunne nås av brukere som ikke er innlogget i grafana.

3.2.1   Endring i tilgangsstyring

Vi ser behovet for å endre tilgangsstyring nevnt ovenfor slik at det blir enda lettere dele «dashboard» mellom USIT organisasjoner. ITI-DIA oppretter en mappe for hver USIT organisasjon under grafana-organisasjonen «usit». Eksisterende dashboards som er opprettet under grafana-organisasjoner importeres til disse mappene. Dashboardene blir tatt backup av daglig. Samtlige i ldapgruppen «usit» skal få skrivetilgang til grafana-organisasjonen «usit». Brukere av grafana oppfordres til å opprette nye dashboard under disse mapper. Om det er behov for å skjerme en dashboard fra andre brukere i «usit», kan man fortsatt bruke sin grafana-organisasjon for det formålet.

Notat

Dersom man _er_ innlogget, må man bytte organisasjon til «public» for å se dashboards som er definert i der.

Notat

Husk å ikke legge dashboards i public som skal skjermes mot innsyn fra ikke-innloggede brukere.

Notat

Dersom man ikke har tilgang til grafana men ønsker dette, kan man sende en henvendelse til: usit-gid@usit.uio.no

Grafana for UiO-metrics er på: https://grafana.uio.no/

Dokumentasjon av grafana finnes på: http://grafana.org/

#sending-av-metriske-data

4   Sending av metriske data

Før man kan sende metriske data, trenger vi åpning på brannmuren på metrics01.uio.no. Man trenger å opprette en rt-sak med ip adressen til kilde maskinen på iti/dia køen: usit-gid@usit.uio.no

4.1   Bash eksempel

PORT=2023
SERVER=graphite.uio.no
echo "test.demo.temp 30 `date +%s`" | nc ${SERVER} ${PORT}

4.2   Powershell eksempel

#Set the Graphite carbon server location and port number
$carbonServer = "graphite.uio.no"
$carbonServerPort = 2023
#Get Unix epoch Time
$epochTime=[int]((get-date (get-date).ToUniversalTime() -UFormat "%s").split(",")[0])
#Putting some value here
$value = 1000000

$metric = ("test.demo.temp " + $value + " " + $epochTime)

#Stream results to the Carbon server
$socket = New-Object System.Net.Sockets.TCPClient
$socket.connect($carbonServer, $carbonServerPort)
$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter($stream) #Write out metric to the stream.
$writer.WriteLine($metric)
$writer.Flush() #Flush and write our metrics.
$writer.Close()
$stream.Close()

4.2   Python eksempel

import socket
import time
timestamp = int(time.time())
sock = socket.socket()
sock.connect("graphite.uio.no",2023)
message = "test.demo.temp 30 %d\n" %(timestamp)
sock.sendall(message)
sock.close()

5   Driftsdokumentasjon/tips

5.1   Resizing av whisper-filer

Graphite lagrer inkommende data i et format (whisper). Det er de underliggende whisper-filene som styrer data-retention og aggregering over tid. Whisper-filer blir automatisk opprettet når data for en ny måleverdi sendes til carbon. Filer blir opprettet med retention-/aggration-skjema som er definert i /etc/carbon/storage-schemas.conf

Dersom man ønsker å endre skjema i etterkant, kan man bruke verktøyet /usr/bin/whisper-resize.py, f.eks. slik:

find $dir_with_whisper_files -type f -name \*.wsp -exec /usr/bin/whisper-resize.py --nobackup {} 60s:14d 15m:90d 30m:180d 1h:2y \;

Her endres filene til følgende oppløsninger:

  • 60 sekunder de siste to ukene (14 dager)
  • 15 minutter de siste 90 dager
  • 30 minutter de siste 180 dager
  • 1 time de siste 2 år

Kan gjøres mens carbon-cache.py kjører. Eventuelle data i filene blir beholdt etter resizing. Dette gjøres ved at original fil kopieres til fil.bkp og dat overføres fra denne til nyopprettet fil med annen oppløsning. Dersom man beholde backup-filen kan opsjonen --nobackup droppes.

Publisert 2. jan. 2024 10:34 - Sist endret 6. mai 2024 10:43