Merge pull request 'A PR for another PR: Blog post on incident stuff' (#144) from nextcloud-incident-benjaoming into nextcloud-incident
Reviewed-on: https://git.data.coop/data.coop/website/pulls/144
This commit is contained in:
commit
7a1dd7c943
7 changed files with 62 additions and 52 deletions
14
config.yaml
14
config.yaml
|
@ -8,6 +8,11 @@ theme: datacoop2020
|
||||||
defaultContentLanguage: da
|
defaultContentLanguage: da
|
||||||
enableGitInfo: true
|
enableGitInfo: true
|
||||||
|
|
||||||
|
# Todo: create translations?
|
||||||
|
taxonomies:
|
||||||
|
category: categories
|
||||||
|
tag: tags
|
||||||
|
|
||||||
markup:
|
markup:
|
||||||
goldmark:
|
goldmark:
|
||||||
renderer:
|
renderer:
|
||||||
|
@ -44,10 +49,6 @@ languages:
|
||||||
- name: "Blog"
|
- name: "Blog"
|
||||||
url: "blog/"
|
url: "blog/"
|
||||||
weight: 5
|
weight: 5
|
||||||
- name: "DevOps blog"
|
|
||||||
url: "devops-blog/"
|
|
||||||
parent: "Blog"
|
|
||||||
weight: 6
|
|
||||||
en:
|
en:
|
||||||
title: data.coop
|
title: data.coop
|
||||||
params:
|
params:
|
||||||
|
@ -72,7 +73,4 @@ languages:
|
||||||
- name: "Blog"
|
- name: "Blog"
|
||||||
url: "en/blog/"
|
url: "en/blog/"
|
||||||
weight: 5
|
weight: 5
|
||||||
- name: "DevOps Blog"
|
|
||||||
url: "en/devops-blog/"
|
|
||||||
parent: "Blog"
|
|
||||||
weight: 6
|
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
title: "Blog"
|
title: "Blog"
|
||||||
---
|
---
|
||||||
|
|
||||||
Vigtige opdateringer fra bestyrelsen mv.
|
Vigtige opdateringer fra bestyrelsen, admin-teamet mv.
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
# Blog
|
# Blog
|
||||||
|
|
||||||
We currently only blog in Danish.
|
Important updates from admins, board etc. Note that we primarily blog in Danish.
|
||||||
|
|
|
@ -4,6 +4,13 @@ summary: Bestyrelsen er enige om, at der samlet set er gode nok argumenter for a
|
||||||
date: 2025-01-12
|
date: 2025-01-12
|
||||||
params:
|
params:
|
||||||
author: bestyrelsen
|
author: bestyrelsen
|
||||||
|
categories:
|
||||||
|
- Admins
|
||||||
|
tags:
|
||||||
|
- board
|
||||||
|
- fediverse
|
||||||
|
- moderation
|
||||||
|
- policy
|
||||||
---
|
---
|
||||||
|
|
||||||
*Vedtaget af bestyrelsen 12. januar 2025*
|
*Vedtaget af bestyrelsen 12. januar 2025*
|
||||||
|
|
|
@ -1,63 +1,77 @@
|
||||||
---
|
---
|
||||||
title: Performance problemer grundet bug i Nextcloud
|
title: Performance-problemer grundet bug i Nextcloud 🐞 🔍
|
||||||
summary: En fejl i synkronisering af Nextcloud servere resulterede i dårlig performance af data.coops server.
|
summary: En fejl i synkronisering af Nextcloud-servere resulterede i dårlig ydeevne på data.coops server.
|
||||||
date: 2025-02-22
|
date: 2025-02-22
|
||||||
params:
|
params:
|
||||||
author: Reynir (admin team)
|
author: Reynir (admin team)
|
||||||
|
categories:
|
||||||
|
- Admins
|
||||||
|
tags:
|
||||||
|
- devops
|
||||||
|
- nextcloud
|
||||||
---
|
---
|
||||||
|
|
||||||
**Den korte version:** der er tilsyneladende en bug i synkronisering mellem Nextcloud-servere samt i log vieweren i admin-panelet. Medlemmer bør derfor indtil videre ikke sætte synkronisering op mellem cloud.data.coop og andre Nextcloud servere uden nærmere aftale med administratorholdet.
|
**Den korte version:** der er tilsyneladende en bug i synkronisering mellem Nextcloud-servere samt i Nextclouds adminpanels logvisning. Medlemmer bør derfor indtil videre ikke benytte synkronisering mellem cloud.data.coop og andre Nextcloud-servere uden nærmere aftale med administratorholdet.
|
||||||
|
|
||||||
I mindst en måned har data.coop haft udfordringer på performance og disk plads.
|
I mindst en måned har data.coop haft udfordringer med CPU, hukommelse og disk plads.
|
||||||
Det har vi i [admin-teamet](/rights/#-7-administratorer) haft kig på når vi har kunne finde tid.
|
Det har vi i [admin-teamet](/rights/#-7-administratorer) haft kig på når vi har kunne finde tid.
|
||||||
Vi fandt nogle årsager:
|
Vi fandt nogle årsager:
|
||||||
|
|
||||||
- [Mastodon remote profilbilleder, der aldrig bliver ryddet op i](https://git.data.coop/data.coop/ansible/pulls/228)
|
- [Mastodon remote profilbilleder, der aldrig bliver ryddet op i](https://git.data.coop/data.coop/ansible/pulls/228)
|
||||||
- [bots der scraper dyre forgejo endpoints,](https://git.data.coop/data.coop/ansible/pulls/233)
|
- [bots scraper dyre forgejo endpoints,](https://git.data.coop/data.coop/ansible/pulls/233)
|
||||||
- [nginx-proxy logs der aldrig bliver roteret eller ryddet op i,](https://git.data.coop/data.coop/ansible/pulls/234)
|
- [nginx-proxy logs blev aldrig roteret eller ryddet op i,](https://git.data.coop/data.coop/ansible/pulls/234)
|
||||||
- [Synapse (matrix server) database der vokser sig gevaldigt stor,](https://element-hq.github.io/synapse/latest/usage/administration/state_groups.html)
|
- [Synapse (matrix server) database vokser sig gevaldigt stor](https://element-hq.github.io/synapse/latest/usage/administration/state_groups.html)
|
||||||
- og Nextcloud bruger meget CPU tid i cron.php.
|
- og Nextcloud bruger for meget CPU-tid i cron.php.
|
||||||
|
|
||||||
Problemet med Synapse har er endnu uløst. Der findes et værktøj til at komprimere den problematiske tabel, men vi har endnu ikke undersøgt om det virker for os.
|
Problemet med Synapse er endnu uløst. Der findes et værktøj til at komprimere den problematiske tabel, men vi har endnu ikke undersøgt, om det virker for os.
|
||||||
Vi står over for at migrere vores services over til vores anden server, der har langt større diskkapacitet.
|
Vi står over for at migrere vores services over til vores anden server, der har langt større diskkapacitet.
|
||||||
|
|
||||||
Denne artikel kommer dog til at handle om problemet i Nextcloud:
|
Denne artikel kommer dog til at handle om problemet i Nextcloud:
|
||||||
hvordan vi identificerede det og hvad vi gjorde for at løse det.
|
Hvordan vi identificerede det og hvad vi gjorde for at løse det.
|
||||||
|
|
||||||
## Nextcloud
|
## Nextcloud
|
||||||
|
|
||||||
På [cloud.data.coop](https://cloud.data.coop/) kører vi en filsynkroniserings- og delingssoftware Nextcloud til vores medlemmer.
|
På [cloud.data.coop](https://cloud.data.coop/) kører vi en filsynkroniserings- og delingssoftware [Nextcloud]({{ ref "/services/nextcloud" }}) til vores medlemmer.
|
||||||
Det er et stykke software der kan utroligt meget[^for-meget] udover at gemme og synkronisere filer.
|
Det er et stykke software, der kan utroligt meget[^for-meget] udover at gemme og synkronisere filer.
|
||||||
Det er en service vi har kørt længe.
|
Det er en service vi har kørt længe.
|
||||||
|
|
||||||
Indtil for nylig har det kørt relativt godt.
|
Indtil for nylig har det kørt relativt godt.
|
||||||
|
|
||||||
Men så begyndte vi at se en process `php -f /var/www/nextcloud/cron.php` bruge meget CPU-tid.
|
Men så begyndte vi at se en process `php -f /var/www/nextcloud/cron.php` bruge meget CPU-tid.
|
||||||
Navnet `cron.php` leder tankerne hen på UNIX-programmet `cron` som er et program til at planlægge og køre programmer på faste tidspunkter.
|
Navnet `cron.php` leder tankerne hen på UNIX-programmet `cron` som er et program til at planlægge og køre programmer på faste tidspunkter.
|
||||||
Det bliver typisk brugt til eks. at køre oprydningsjobs om natten.
|
Det bliver typisk brugt til eks. at køre oprydningsjobs om natten.
|
||||||
Ved at køre `lsof -p $pid_for_cron.php` kunne jeg få indsigt i hvilke filer processen har åben.
|
Ved at køre `lsof -p $pid_for_cron.php` kunne jeg få indsigt i hvilke filer processen har åben.
|
||||||
Der bed jeg mærke i `nextcloud.log`.
|
Der bed jeg mærke i `nextcloud.log`.
|
||||||
|
|
||||||
Da jeg begyndte at undersøge det nærmere kiggede jeg i admin-interfacet i Nextcloud.
|
Da jeg begyndte at undersøge det nærmere, kiggede jeg i admin-interfacet i Nextcloud.
|
||||||
Det er ikke et stykke software jeg personligt har meget erfaring med at køre, så jeg måtte kigge rundt og opdage hvad der var muligt at lære om hvad `cron.php` har gang i.
|
Det er ikke et stykke software, jeg personligt har meget erfaring med at køre, så jeg måtte kigge rundt og opdage, hvad der var muligt at lære om `cron.php`.
|
||||||
Jeg fandt desværre ikke meget andet en generel information om systemet og en side med logs som ikke virkede.
|
Jeg fandt desværre ikke meget andet en generel information om systemet og en side med logs (som ikke virkede!).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Log-siden gav en fejlbesked.
|
Log-siden gav en fejlbesked.
|
||||||
Noget i retning af at det gik for langsomt at få fat i logs.
|
Noget i retning af, at det gik for langsomt at få fat i logs.
|
||||||
|
|
||||||
Det fik mig til at lede efter logfilerne via ssh.
|
Det fik mig til at lede efter logfilerne via ssh.
|
||||||
Logfilerne viste sig at være flere GB store, og programmer som `less` havde svært ved at håndtere at læse og vise de store filer.
|
Logfilerne viste sig at være flere GB store, og programmer som `less` havde svært ved at håndtere at læse og vise de store filer.
|
||||||
Nextcloud skriver [json][json]-objekter i sine logs, og det viste sig at flere af linjerne var over 100 MB store.
|
Nextcloud skriver [json][json]-objekter i sine logs, og det viste sig, at flere af linjerne var over 100 MB store ‼️.
|
||||||
Altimens oplevede jeg at serveren blev langsommere og langsommere, og der kom flere og flere apache processer fra Nextcloud-containeren som brugte 100% CPU-tid (dvs. en hel CPU-kerne).
|
Altimens oplevede jeg at serveren blev langsommere og langsommere, og der kom flere og flere apache processer fra Nextcloud-containeren som brugte 100% CPU-tid (dvs. en hel CPU-kerne ‼️).
|
||||||
|
|
||||||
Det blev nødvendigt at lukke Nextcloud ned, så vores andre services kunne køre videre.
|
Det blev nødvendigt at lukke Nextcloud ned, så vores andre services kunne køre videre.
|
||||||
Jeg åbnede et maintenance window i [status.data.coop](https://status.data.coop/) og meldte ud på vores Matrix-kanal.
|
Jeg åbnede et maintenance window i [status.data.coop](https://status.data.coop/) og meldte ud på vores Matrix-kanal.
|
||||||
|
|
||||||
Ved hjælp af [`jq`][jq] kunne jeg få *pretty printet* logfilen så linjerne ikke blev så lange, og `less` kunne følge med.
|
Ved hjælp af [`jq`][jq] kunne jeg få *pretty printet* logfilen så linjerne ikke blev så lange, og `less` kunne følge med.
|
||||||
Det viste sig at `cron.php` kørte synkronisering mod et medlems egen Nextcloud-server.
|
Det viste sig at `cron.php` kørte synkronisering mod et medlems egen Nextcloud-server.
|
||||||
Det i sig selv er fint, men der var tilsyneladende en bug som gjorde at når vores Nextcloud skannede medlemets Nextcloud for filer i en bestemt mappe blev der sat en ekstra skråstreg på og scannet rekursivt igen.
|
|
||||||
Sådan blev det ved indtil der var næsten 9000 skråstreger(!!), hvor programmet så kunne finde en videofil (lad os kalde den `foo.mkv`).
|
Det er der ingenting galt med; men der var tilsyneladende en bug som gjorde, at når vores Nextcloud scannede medlemmets Nextcloud for filer i en bestemt mappe, så blev der sat en ekstra skråstreg på og scannet rekursivt igen.
|
||||||
|
|
||||||
|
Sådan blev det ved, indtil der var næsten 9000 skråstreger ‼️, hvor programmet så kunne finde en videofil (lad os kalde den `foo.mkv`).
|
||||||
Så var programmet glad, og prøvede at tilføje metadata om filen til databasen.
|
Så var programmet glad, og prøvede at tilføje metadata om filen til databasen.
|
||||||
|
|
||||||
Her blev databasen så utilfreds!
|
Her blev databasen så utilfreds!
|
||||||
|
|
||||||
For i tabellen må filnavne højest være 4000 tegn langt!
|
For i tabellen må filnavne højest være 4000 tegn langt!
|
||||||
|
|
||||||
Det resulterede i en fejl (exception) som blev logget inklusive de næsten 9000 rekursive kald inklusive argumenter!
|
Det resulterede i en fejl (exception) som blev logget inklusive de næsten 9000 rekursive kald inklusive argumenter!
|
||||||
Det var altså årsagen til den problematiske logfil.
|
Det var altså årsagen til den problematiske logfil.
|
||||||
|
|
||||||
|
@ -197,32 +211,33 @@ Det skaber selvfølgelig problemer at vise så lange linjer i en web browser, s
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
I logfilen stod der et brugernavn på medlemmet som gjorde at vi kunne komme i kontakt med vedkommende.
|
I logfilen stod der et brugernavn på medlemmet, som gjorde at vi kunne komme i kontakt med vedkommende.
|
||||||
Medlemmet slog så synkronisering fra på sin Nextcloud-server, og vi kunne starte vores service op dagen efter uden problemer.
|
Medlemmet slog så synkronisering fra på sin Nextcloud-server, og vi kunne starte vores service op dagen efter uden problemer.
|
||||||
|
|
||||||
### Den egentlige performance-killer
|
### Den egentlige performance-killer
|
||||||
|
|
||||||
Det blev først _*rigtigt*_ et problem med performance efter jeg begyndte at undersøge hvad Nextcloud havde gange i.
|
Det blev først _*rigtigt*_ et problem med performance, efter jeg begyndte at undersøge hvad Nextcloud havde gange i.
|
||||||
Min teori er at Nextcloud forsøgte at læse den enormt store logfil og præsentere den for min browser.
|
Min teori er, at Nextcloud forsøgte at læse den enormt store logfil og præsentere den for min browser.
|
||||||
Det tager selvsagt lidt tid at læse så store filer, og min browser har tænkt at det tog for lang tid.
|
Det tager selvsagt lidt tid at læse så store filer, og min browser har tænkt at det tog for lang tid.
|
||||||
Der hvor jeg tror det gik galt er at min browser måske forsøgte dernæst at få nextcloud til at læse logfilen igen!
|
Der hvor jeg tror det gik galt er at min browser måske forsøgte dernæst at få nextcloud til at læse logfilen igen!
|
||||||
Og så videre.
|
Og så videre.
|
||||||
Resulterende i efterhånden mange processer der forsøgte at læse og forstå de gigantiske logfiler.
|
Resulterende i efterhånden mange processer der forsøgte at læse og forstå de gigantiske logfiler.
|
||||||
|
|
||||||
Ideelt set bør vi undersøge problemet nærmere, evt. prøve at reproducere og skrive en god bug report til Nextcloud.
|
Ideelt set bør vi undersøge problemet nærmere, evt. prøve at reproducere og skrive en god bug-report til Nextcloud.
|
||||||
Desværre er Nextcloud-kodebasen meget stor, med rigtig mange plugins, og det hele er skrevet i et sprog jeg ikke har erfaring med (PHP).
|
Desværre er Nextcloud-kodebasen meget stor, med rigtig mange plugins, og det hele er skrevet i et sprog jeg ikke har erfaring med (PHP).
|
||||||
Derfor bliver det ikke til andet end at vi prøver at opgradere Nextcloud og håber det er et kendt problem de har løst.
|
Derfor bliver det ikke til andet, end at vi prøver at opgradere Nextcloud og håber det er et kendt problem de har løst.
|
||||||
|
|
||||||
## Afsluttende noter
|
## Afsluttende eftertanker
|
||||||
|
|
||||||
Som administratorer hviler der et stort ansvar på os.
|
Som administratorer hviler der et stort ansvar på os.
|
||||||
Vi sørger efter bedste evne, og den tid vi har til det frivillige arbejde, at sørge for at data.coops services fungerer i et acceptabelt niveau.
|
|
||||||
Til det har vi nogle gange brug for at kigge i logs og undersøge systemet.
|
|
||||||
Det kan nogle gange gå lidt på tværs med vores mål om privatlivsbeskyttelse og zero-knowledge.
|
|
||||||
|
|
||||||
I denne omgang har jeg lært et medlems mappenavn og filnavn på en af deres filer via logfilerne.
|
Vi forsøger efter bedste evne (f.eks. den tid vi har til det frivillige arbejde) at sørge for, at data.coops services fungerer på et acceptabelt niveau.
|
||||||
I forsøg på at lokalisere problemet har jeg kigget i mine **egne** Nextcloud filer i filsystemet og derefter søgt filsystemet for den problematiske fil (uden held).
|
|
||||||
Det er noget vi for så vidt muligt prøver at minimere.
|
Til det har vi nogle gange brug for at kigge i logs og undersøge systemet. Og netop dette kan nogle gange gå lidt på tværs med vores mål om privatlivsbeskyttelse og zero-knowledge 🤔
|
||||||
|
|
||||||
|
I denne omgang jeg lærte jeg ved et uheld et stk. privat mappenavn og et stk. privat filnavn via logfilerne. *Heldigvis* var disse blot generiske, og jeg kunne straks efter informere medlemmet om hændelsen. Og det vil ofte være sådan, at man kun kan finde et problem i den høstak, det er opstået: I forsøget på at lokalisere problemet har jeg kigget i mine **egne** Nextcloud filer i filsystemet og derefter søgt filsystemet for den problematiske fil, og det var altså uden held.
|
||||||
|
|
||||||
|
Men omfanget af admin-aktivitet i medlemmernes data er noget, vi skal minimere; det er også noget, vi skal diskutere løbende og aftale faste rammer or procedurer for.
|
||||||
|
|
||||||
[json]: https://www.json.org/json-en.html
|
[json]: https://www.json.org/json-en.html
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
---
|
|
||||||
title: "DevOps blog"
|
|
||||||
---
|
|
||||||
|
|
||||||
Teknisk blog fra admin-holdet.
|
|
|
@ -1,5 +0,0 @@
|
||||||
---
|
|
||||||
title: "DevOps Blog"
|
|
||||||
---
|
|
||||||
|
|
||||||
We currently only blog in Danish.
|
|
Loading…
Add table
Reference in a new issue