Seite wählen

NETWAYS Blog

Partition voll, Wo?

Dieses Problem kennt bestimmt jeder SysAdmin, das Monitoring meldet Partition fast vollgelaufen, gut die Partition weiß man schon mal, laut Monitoring Icinga


Das heißt aber noch nicht automatisch WO die Partition vollgelaufen ist. In Zeiten wo Storage-Systeme, SSD’s und Speichermedien immer größer werden, werden auch die Dateien immer größer und Speicherplatz nicht unendlich ist, werde ich heute mal mit ein paar einfachen Shell-Kommandos auf einem Linux-System zeigen, wie schnell man das Verzeichnis ermittelt, das vollgelaufen ist.
Tool meiner Wahl ist dafür:
du -> Disk Usage
Größe gesamt summiert
du -hs /
49G /

Möchte ich mir einen Überblick über das File-System mit allen Ordnern sehen, damit ich weiß in welchen dieser Ordner am vollsten ist:
du -hx / -d1
36M /etc
43M /root
47G /var
3,2M /tmp
1,4G /usr
300M /boot
1,9M /home
0 /media
0 /mnt
22M /opt
0 /srv
48G /

Der Schalter -h (human readable) und -d1 (nur die erste Ordner-Reihe ohne Unterverzeichnisse), Schalter -x, (nur in diesem Filesystem suchen)

Erkenntnis: Aha, im Verzeichnis /var sind sehr viele Daten, also Schlussfolgerung, in diesem Verzeichnis weiter suchen.
# du -hx /var -d1
4,0K /var/tmp
31G /var/lib
211M /var/log
16G /var/adm
119M /var/cache
8,0K /var/db
47G /var

Das ganze kann ich jetzt soweit fortführen, bis ich das gewünschte Verzeichnis gefunden habe und entscheiden, was gelöscht / ausgelagert werden kann oder welche Anwendung ich optimieren muss, um den Speicherplatz wieder freizugeben.

In meinem Fall, war es die MySQL-Datenbank, die mir hier den Platz raubt.
# du -hx /var/lib/ -d1 | grep mysql
31G /var/lib/mysql

Lösung: z.B. VM / Partition vergrößern, Datenbank auslagern auf externen Storage.

Dieses Tool kann noch mehr, am besten ausprobieren(learining by doing), die Man-Page man du verrät noch mehr.

Wir bieten auch Trainings zu vielen Themen rund um Open Source an, Schau mal rein.

Johannes Carraro
Johannes Carraro
Senior Systems Engineer

Bevor Johannes bei NETWAYS anheuerte war er knapp drei Jahre als Systemadministrator in Ansbach tätig. Seit Februar 2016 verstärkt er nun unser Team Operations als Senior Systems Engineer. In seiner Freizeit spielt Johannes E-Gitarre, bastelt an Linux Systemen zuhause herum und ertüchtigt sich beim Tischtennisspielen im Verein, bzw. Mountainbiken, Inlinern und nicht zuletzt Skifahren.

PDF manipulieren mit pdftk


In diesem Beitrag möchte ich zeigen wie einfach man PDF’s mit pdftk manipulieren kann, zB. Seiten aus einem mehrseitigen PDF herausschneiden und daraus ein neues PDF generiert.
Was ich unter anderem auch schon gemacht habe, Seiten aus Büchern per Scanner als PDF erzeugt und dann mittel pdftk zu einem mehrseitigen PDF zusammengesetzt habe, Schwierigkeit hierbei ist, das die Seiten- Zahlen wieder wie im gedrucktem Buch übereinstimmen.
Zuerst müssen wir je nach Linux-Distribution das Paket pdftk installieren, falls nicht vorhanden, in meinem Fall:
zypper install pdftk
Für Redhat oder Debian based Distributionen:
apt-get install pdftk
aptitude install pdftk
yum install pdftk

Jetzt werde ich ein paar Anwendungsbeispiele  aufzeigen:
Seiten herausschneiden aus einem mehrseitigen PDF
pdftk datei.pdf cat 4-7 12 output Dokument.pdf
Es werden aus datei.pdf die Seiten 4 bis 7 plus Seite 12 herausgeschnitten und als Dokument.pdf gespeichert.
Einzelne PDF’s zu einem mehrseitigen PDF zusammenfügen:
pdftk datei1.pdf datei2.pdf datei3.pdf cat output gesamt.pdf
Verschiedene Seiten aus mehreren PDF-Dateien zu einer neuen PDF-Datei zusammenführen:
pdftk A=datei1.pdf B=datei2.pdf cat A3-7 B2-6 A10 output neu-gesamt.pdf
In diesem Beispiel werden mit sogenannten „Handels“(A,B) zuerst die eingelesenen Files und dann die extrahierten Seiten angegeben herausgeschnitten und in ein neues PDF zusammengesetzt.
Aus einem mehrseitigen PDF-Datei Einzelseiten generieren:
pdftk mehrseitiges-pdf.pdf burst output ~/Zielverzeichnis/Seite_%02d.pdf
Hier wird das mehrseitige PDF-Dokument in seine Einzelseiten zerlegt und als Namen Seite_Seitenzahl.pdf benannt, wobei 2 d für zwei Dezimalstellen steht.
Ich könnte hier noch mehr Anwendungsmöglichkeiten aufzählen, aber fürs erste sollte es mal reichen,
die Man-Page man pdftk gibt eine detaillierte Beschreibung über dieses Tool und seine Anwendungsmöglichkeiten.
Mir hat dieses Tool schon öfters geholfen, z.B früher bei Bewerbungsmappen wo Zeugnisse oder Anlagen in eine Gesamt-Bewerbung-mappe als PDF zusammengesetzt wurden oder Bücher als PDF-Datei generieren, wobei man das gedruckte Exemplar in seine Einzelseiten zerlegen musste um es einzuscannen.
Noch etwas WICHTIGES:
WIR SUCHEN NOCH NEUE KOLLEGEN!! Bewerbung unter jobs@netways.de
 

Johannes Carraro
Johannes Carraro
Senior Systems Engineer

Bevor Johannes bei NETWAYS anheuerte war er knapp drei Jahre als Systemadministrator in Ansbach tätig. Seit Februar 2016 verstärkt er nun unser Team Operations als Senior Systems Engineer. In seiner Freizeit spielt Johannes E-Gitarre, bastelt an Linux Systemen zuhause herum und ertüchtigt sich beim Tischtennisspielen im Verein, bzw. Mountainbiken, Inlinern und nicht zuletzt Skifahren.

Ein paar vim tricks

Ich benutze in meiner täglichen Arbeit vim als Editor. Im Laufe der Zeit habe ich dabei ein paar Dinge gelernt, die mir das Leben einfacher machen. Ein paar dieser „Tricks“ möchte ich euch heute einmal zeigen.

Autovervollständigung

Mit vim kann man seine Texte und Scripte autovervollständigen lassen. Das funktoniert mit normalen Wörtern, die schon einmal im Text vorgekommen sind STRG + n, mit ganzen Zeilen STRG + x + l oder mit Dateien und Ordnern im Filesystem.

Einfügen auf mehreren Zeilen


Es ist zwar nicht intuitiv, aber man kann relativ einfach viel Text auf einmal einfügen. Man kann entweder vor der Curserposition, z.B. am Anfang der Zeile, oder am Ende der Zeile Zusätzliche Zeichen hinzufügen.
In jedem Fall muss man erstmal mit STRG + v die Zeilen markieren, die bearbeitet werden sollen.
Das # am Anfang der Zeilen fügt man jetzt mit SHIFT + i (instert mode), gefolgt von #, gefolgt von ESC ein.
Der . am Ende der Zeilen funktioniert ähnlich. Aber statt SHIFT + i kommt $A zum Einsatz. Wieder gefolgt von dem Zeichen . und einem ESC.

History im vim

Lange zeit dachte ich, wenn ich zweimal dd benutze ist dar erste Inhalt weg. Genauso wie bei Word’s „auschneiden/einfügen“. Das ist allerdings nicht wahr. mit :reg kommt man in die History vom vim. Möchte man z.B. den dritten eintrag einfügen, geht das mit „3p.

json, jq und vim

In vergangen Blogposts wurde ja schon über die Macht von API, json und jq geschrieben. Das lässt sich wunderbar auch im vim kombinieren. Wenn ich mir Beispielsweise die Services einer icinga2 API ausgeben lasse, schaut das erstmal im vim recht unleserlich aus.

curl -k -u root:icinga 'https://127.0.0.1:5665/v1/objects/services' |vim -


Erst durch ein :%!jq ‚.results[].attrs | select(.active==true) | {__name, display_name, enable_perfdata}‘ wird daraus etwas schönes.
Jetzt wird nur noch Name, display_name und enable_perfdata angezeigt. Und das nur von Services, die „active“ sind.

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

And again: Das Löschen von Images in der Docker-Registry

DockerDas Löschen von Images in einer Docker-Registry, ist ein Thema, das bereits sehr viel Zeit in Anspruch genommen hat. In einem früheren Blogpost wurde eine Variante vorgestellt, die mit einem separaten Script arbeitete. Da diese mit neueren Docker-Versionen jedoch nicht mehr funktioniert, wurde nach einer Alternative gesucht. Dabei haben wir erneut die von Docker mitgelieferte Möglichkeit getestet, die zu unserer Überraschung nun endlich richtig implementiert wurde.
Dieses Vorgehen sieht so aus, dass ein Image über die API gelöscht wird, wodurch die Abhängigkeiten der einzelnen Layer aufgelöst werden. Um dieser Layer Herr zu werden, ist es nötig einen Garbage-Collector zu starten, der diese Layer erfasst und entfernt. Der API-Call sieht zunächst wie folgt aus:
curl -k -X DELETE https://localhost:5000/v2/$IMAGENAME$/manifests/sha256:$BLOBSUM$
Die hierfür benötigte Blobsum kann einem Push/Pull des betroffenen Images entnommen werden. Tags wie „latest“ werden in diesem Aufruf nicht akzeptiert. Der Garbage-Collector sollte in einem separaten Docker-Container laufen nachdem die Registry selbst gestoppt wurde. Wir haben diesen Vorgang mit einem Script umgesetzt. So ist es möglich, tagsüber Images manuell zu entfernen, sodass diese zu einer bestimmten Uhrzeit von einem Cronjob entfernt werden können.
echo "###################################################" >> /var/log/docker-registry-cleanup.log
/usr/local/sbin/icingaweb2-downtime.rb -s -H docker-registry.netways.de -S 'docker registry' -t 15 -c Cleanup && echo "$(date) [OKAY] Downtime was set." >> /var/log/docker-registry-cleanup.log
/etc/init.d/docker-registry stop && echo " $(date) [STOP] Stopping Docker-Registry ..." >> /var/log/docker-registry-cleanup.log
touch /var/log/docker-registry-cleanup.log
sleep 30
pgrep -f "/etc/docker/registry/config.yml"
echo $i
if [ "$i" = "0" ]
then
echo "$(date) [FAIL] Docker-Registry is still running. Aborting Cleanup" >> /var/log/docker-registry-cleanup.log
else
echo "$(date) [OKAY] Docker-Registry is not running. Starting Cleanup" >> /var/log/docker-registry-cleanup.log
docker run --rm -v /storage:/var/lib/registry -v /etc/docker/config.yml:/etc/docker/registry/config.yml registry:2 garbage-collect /etc/docker/registry/config.yml
/etc/init.d/docker-registry start && echo "$(date) [START] Starting the Docker-Registry ..."
pgrep -f "/etc/docker/registry/config.yml"
i=$?
if [ $i=0 ]
then
echo "$(date) [OKAY] Docker-Registry is running after cleanup" >> /var/log/docker-registry-cleanup.log
else
echo "$(date) [FAIL] Docker-Registry is not running after cleanup" >> /var/log/docker-registry-cleanup.log
fi
fi

Dieses Script setzt ebenso eine Downtime von 15 Minuten für den Container der Registry im Icinga2 und schreibt seinen Output in ein Log.
###################################################
Fri May 27 02:00:03 CEST 2016 [OKAY] Downtime was set.
Fri May 27 02:00:07 CEST 2016 [STOP] Stopping Docker-Registry ...
Fri May 27 02:00:37 CEST 2016 [OKAY] Docker-Registry is not running. Starting Cleanup
Fri May 27 02:01:10 CEST 2016 [OKAY] Docker-Registry is running after cleanup
###################################################
Sat May 28 02:00:03 CEST 2016 [OKAY] Downtime was set.
Sat May 28 02:00:07 CEST 2016 [STOP] Stopping Docker-Registry ...
Sat May 28 02:00:37 CEST 2016 [OKAY] Docker-Registry is not running. Starting Cleanup
Sat May 28 02:01:13 CEST 2016 [OKAY] Docker-Registry is running after cleanup
###################################################
Sun May 29 02:00:03 CEST 2016 [OKAY] Downtime was set.
Sun May 29 02:00:06 CEST 2016 [STOP] Stopping Docker-Registry ...
Sun May 29 02:00:36 CEST 2016 [OKAY] Docker-Registry is not running. Starting Cleanup
Sun May 29 02:01:13 CEST 2016 [OKAY] Docker-Registry is running after cleanup
###################################################
Mon May 30 02:00:02 CEST 2016 [OKAY] Downtime was set.
Mon May 30 02:00:03 CEST 2016 [STOP] Stopping Docker-Registry ...
Mon May 30 02:00:33 CEST 2016 [OKAY] Docker-Registry is not running. Starting Cleanup
Mon May 30 02:00:41 CEST 2016 [OKAY] Docker-Registry is running after cleanup

Dieses Verfahren testen wir nun seit ein paar Wochen und sind mit dem Ergebnis sehr zufrieden.
Brauchen Sie Unterstützung für Ihr Docker Projekt? Dann empfehlen wir unser Docker-Hosting Angebot.

Monitoring Plug-Ins selbst gemacht

Es heißt ja immer mit Icinga ließe sich alles überwachen. Prinzipiell ist das auch richtig, aber manchmal gibt es einfach noch nicht das passende Plug-In. Da es aber schon Tausende Plug-Ins auf exchange.icinga.org gibt, kann es ja nicht so schwer sein ein eigenes Plug-In zu schreiben.

Was macht das Stück Code zum Plug-In?

Kürzeste Antwort: Der Exit Code. Jedes Nagios/Icinga/Shinken/Naemon Plug-In hat 4 Exit Codes. Diese Rückgabewerte lassen sich mit „echo $?“, nach dem Ausführen, überprüfen. Sie haben folgende Bedeutung: 0=OK, 1=Warning, 2=Critical, 3=Unknown

schulung_icinga2Was gibt es noch zu beachten?

Plug-Ins können in jeder auf dem jeweiligen System zur Verfügung stehenden Sprache geschrieben werden. Für einfache Fälle und schnelle Hilfe bietet sich Shell-Skripte an. Schöner sind oft aber perl oder python.
Ich möchte heute einmal ein schönes Shell Plugin schreiben. Um das umzusetzen lohnt sich als erstes ein Blick in die Monitoring Plugins Development Guidelines. Dort kann man unter anderem folgende Voraussetzungen für ein Plugin nachlesen.

Params

  • Es muss bei -h oder –help eine Hilfe bereitstellen
  • Es muss bei -v oder –verbose mehr Output liefern
  • Schwellwerte können als range definiert werden.
    „-c 5:  “ bedeutet z.B. alles kritisch, was unter 5 ist. Praktischerweise übernimmt die Interpretation der Ranges eine Funktion aus der utils.sh. Sie ist Bestandteil des Monitoring Plug-In Pakets

Perfdata

Plugins können Performancedaten ausgeben. Mit Hilfe dessen ist es tools wie pnp4nagios, ingraph oder graphite möglich Kurven über die ermittelten Werte zu zeichnen. Performancedaten müssen in folgendem Format vorliegen:
| ‚label’=value[UOM];[warn];[crit];[min];[max]
Also z.B. ‚Drive C‘ = 15GB;5;3;0;20 bedeutet folgendes: Drive C hat noch 15GB frei. Bei 3 bzw. 5 GB wird’s kritisch bzw. gewarnt.
Obacht: Es gibt nur bestimmte Maßeinheiten, die hier nachgelesen werden können. Diese sind s(Sekunden), %(Prozent), B (Bytes, auch MB KB usw) und c (counter)

Los geht’s

Nicht lang schnacken sondern losgelegt. Wir schreiben ein Plugin, dass die Files in /tmp zählt. Auf die gleiche Weise lassen sich auch alle anderen Plugins schreiben die auf zählbaren Werten basieren. mehr lesen…

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.