With a little Help from my Chef …

Ich wollte abseits von Puppet und Ansible mal eine andere Automatisierungssprache anreißen. Wieso also nicht mal Chef!
Wie fängt man am einfachsten mit Chef als Automatisierungssprache an?
Chef besteht simpel gesagt aus ruby Skripten welche sequentiell abgearbeitet werden. (Loops gehen schon, würden aber den Blog Artikel sprengen)
Wir fangen mit einem Ruby file an welches wir Notice.rb nennen.
Als praxisnahes Beispiel legen wir eine “Textdatei” in /etc/ an. Dies könnte somit eine prekonfigurierte Konfigdatei eines Programmes sein.

file '/etc/motd' do
  content 'Next maintenance window is Fri from 10 pm to Sat 3 am'
end

Woraus besteht Recipe Codeblock ?
File als erstes gibt den Ressourcen Typ an. dieser kann auch Package sein oder Service sein.
Es gibt noch viele mehr auf der Chef Seite in der dortigen Doku können Sie erforscht werden 🙂
Danach folgt der Pfad inklusive des Dateinamens hier in diesem Fall ‘/etc/motd’ es könnte aber auch z.B. ‘/home/User_xy/.bashrc’ sein.
Gefolgt von dem Loopblock welcher mit do eingeleitet wird und mit end geschlossen.
Dazwischen sind die Anweisungen was abgearbeitet werden soll bzw. welche Attribute geändert oder modifiziert werden sollen.
Da wir in diesen Fall die Datei erstellen haben wir ein content Attribut welches den Inhalt der Datei definiert.
Darin eine simple Benachrichtigung plain Text.
Wie erreichen wir nun mit diesem Ruby file unseren gewünschten Zustand ?
Ähnlich wie bei Ansible oder Puppet benötigen wir einen Agent-Daemon der für uns die Anweisungen umsetzt. Dieser ist chef-apply welches als Kommando duch das Chef DK (Development Kit installiert wird)
Dies findet man unter: https://downloads.chef.io/chefdk/
Da ich doch leider sehr CentOS affin bin nehme ich mir das RHEL Package.
https://packages.chef.io/files/stable/chefdk/3.3.23/el/7/chefdk-3.3.23-1.el7.x86_64.rpm
mit einem simplen & fixen

rpm -ivh  chefdk-3.3.23-1.el7.x86_64.rpm

wird das Paket installiert und bietet uns nun die Chef Kommandos an.
Ordentliche Mensche erstellen einen Ordner in dem wir unsere Ruby Recipes unterbringen.
Chef bietet aber auch ein Standard Template an welches wir nutzen können aber zu erst erstellen wir uns einen Ordner.

mkdir ~/cookbooks && cd cookbooks
chef generate cookbook motd_notify_downtime

Nun kreiert uns Chef ein Standard cookbook ohne spezifischen Inhalt.
Hier die Baumstruktur eines solchen Ordners.

tree ~/cookbooks/motd_notify_downtime/
motd_notify_downtime/
├── Berksfile
├── CHANGELOG.md
├── chefignore
├── LICENSE
├── metadata.rb
├── README.md
├── recipes
│   └── default.rb
├── spec
│   ├── spec_helper.rb
│   └── unit
│       └── recipes
│           └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb

In den unter Ordner namens recipes sollen wir unsere notice.rb bewegen.

mv notice.rb ~/cookbooks/motd_notify_downtime/recipes
rm default.rb
mv notice.rb default.rb

Ob unser Automatismus auch funktioniert prüfen wir mit einem Aufruf.
Wir haben folgende möglichkeiten:

chef-apply notice.rb

für das einzelne Rezept oder für das ganze cookbook welches wir gerade erstellt haben

cd cookbooks && chef-client --local-mode --runlist 'recipe[motd_notify_downtime]'

Dies sollte von dem folgenden Output begleitet werden

chef-client --local-mode --runlist 'recipe[motd_notify_downtime]'
[2018-10-25T16:14:05+00:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 14.5.33
resolving cookbooks for run list: ["motd_notify_downtime"]
Synchronizing Cookbooks:
- motd_notify_downtime (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...
Converging 1 resources
Recipe: motd_notify_downtime::default
* file[/etc/motd] action create
- create new file /etc/motd
- update content in file /etc/motd from none to b564d0
--- /etc/motd	2018-10-25 16:14:08.249701189 +0000
+++ /etc/.chef-motd20181025-9251-18htv9n	2018-10-25 16:14:08.249701189 +0000
@@ -1 +1,2 @@
+To All Users who Login into this Machine next maintenance window is Friday from 10 pm to Saturday 3 am
- restore selinux security context
Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 02 seconds

Mit einem

cat /etc/motd

erhalten wir das folgende Ergebnis

Next maintenance window is Fri from 10 pm to Sat 3 am

Auch ein weiterer Lauf des Chef-clients würde nichts an dem Inhalte ändern. (Idempotent)

chef-client --local-mode --runlist 'recipe[motd_notify_downtime]'
[2018-10-25T16:18:28+00:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 14.5.33
resolving cookbooks for run list: ["motd_notify_downtime"]
Synchronizing Cookbooks:
- motd_notify_downtime (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...
Converging 1 resources
Recipe: motd_notify_downtime::default
* file[/etc/motd] action create (up to date)
Running handlers:
Running handlers complete
Chef Client finished, 0/1 resources updated in 02 seconds

Ich hoffe ich hab euch am Beispiel Chef etwas über den Tellerrand hinaus schauen lassen und vielleicht hat der ein oder andere Lust bekommen etwas mit Chef zu automatisieren.
Servus !

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Fresh from the shelf

Hi !
This week I will take a little look into three command line tools which I find very nice for daily use on a server where we have almost no interface except the command line.
The first tool I would like to bring to your attention is a file explorer for the command line.
Ranger
Ranger is a finder/explorer/nemo/nautilus replacement for the command line with a simple but straight forward file management approach. It uses the almost everywhere liked miller columns and i personally like it more than the midnight commander but that is a personal preference.
I also like the extensibility as an example you can extend ranger with poppler for pdf support or mutool whatever is available for your distro.
It can be easily installed and can be just started from it’s own directory so no big installation fuzz. Simply unpack and start ranger.
(mehr …)

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

For a Handful of (Vagrant) Boxes

Servus alle miteinand,


Wer kennt das folgende Szenario nicht? Mit viel neuer Software, welche gerade (manuell) getestet werden muss, dachte ich mir, ich baue mal schnell eine Vagrant Box auf Basis von Debian 9, um Tests unter einem Stretch durchzuführen.
Falsch gedacht !!
Anstelle eines libvirt install auf der Kommandozeile und eines tar-Befehls zum Packen des eigentlichen Box-Images,
musste ich mit einer kleinen Widrigkeiten im Bereich der Netzwerkkonfiguration kämpfen.
Aber eins nach dem anderen.
Fangen wir mit dem Image für die libvirt Maschine an:

virt-install --name=linuxconfig-vm \
--vcpus=1 \
--memory=1024 \
--cdrom=/tmp/debian-9.4.0-amd64-netinst.iso \
--disk size=10 \
--os-variant=debian9

Dies war noch der unproblematische Teil der Installation.
Danach erfolgt in der VM das nachziehen von Berechtigungen für den Vagrant User.

sudo visudo -f /etc/sudoers.d/vagrant
vagrant ALL=(ALL) NOPASSWD:ALL

Hinzufügen des Vagrant public Keys:

mkdir -p /home/vagrant/.ssh
chmod 0700 /home/vagrant/.ssh
wget --no-check-certificate \
https://raw.github.com/mitchellh/vagrant/master\/keys/vagrant.pub \
-O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

Wenn man nicht so Wach war, um rechtzeitig im Installationsmenü schon SSH mitzuinstallieren, muss es per Hand nachgeholt werden:

sudo apt-getinstall -y openssh-server
sudo nano /etc/ssh/sshd_config
AuthorizedKeysFile %h/.ssh/authorized_keys

Danach kann das System so präpariert werden, wie man es benötigt.
Das Image der VM noch verkleinern und in box.img umbenennen:

qemu-img convert -c -O qcow2 debian9.qcow2 small.qcow2
mv small.qcow2 box.img

Alles handlich verpacken und dem Vagrant Box Store hinzufügen:

tar czvf debian9.box ./metadata.json ./Vagrantfile ./box.img
vagrant box add --name debian9 debian9.box

Hier allerdings fingen meine Probleme an.
Nach dem Packen der Box, dem Hinzufügen zum Boxstore und einem Erwartungsvollen “vagrant up” erhielt ich “==> default: Waiting for domain to get an IP address…”, was zu keinem Erfolg führte und ich wahrscheinlich jetzt immer noch warten würde.

Nach einem erneuten Hochfahren der VM mit dem virt-manager und nachschauen, ob das network device fehl konfiguriert ist, konnte ich keinen Fehler feststellen.

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

Gefühlte Jahrtausende von Recherche später, wurde mir folgendes klar:
Debian hat in neuen Versionen eine Änderung der Device-Namen vorgenommen.
Vagrant wartet vergeblich auf “eth0”, weil ein network device Namens “ens21” existiert, wenn ich die VM mit “vagrant up” starte.
Also zurück in die VM und das folgende Kommandos abgesetzt:

sudo nano /etc/default/grub

Im Editor dann folgende Anpassungen vornehmen:

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

Damit das auch greift, muss abschließend die Konfiguration für den Grub-Bootmanager neu erstellt werden:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Reboot. “vagrant up” und Tada … Spannung Trommelwirbel => Tusch ! Die VM erhält eine IP und startet wie man es schon von Anfang an erwartete.
Ich hoffe ich konnte damit den ein oder anderen vor dem Verlust von allzuviel Lebenszeit bewahren.
Ein sonniges WE wünscht

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Revisited – Graphite-Web installation unter Debian 9

Erstmal wieso Revisited ?

Dies ist ein update meines älteren Blog Posts Blogpost 2016 welcher darauf einging das unter Debian 8.4 graphite-web wegen eines Fehlenden Eintrages in der Apache 2.4 Konfiguration nicht korrekt gestartet/aufgerufen werden konnte.
Es ist schon einige Zeit ins Land gegangen und ich habe weniger ein Auge darauf geworfen ob das weiterhin so Funktioniert.
Deshalb Revisited.

Here we Go again !

Ich gehe in diesem Fall von einer Debian Version der Nummer 9 aus und werde wie bei dem alten Blogpost. In der Grundannahme mal davon ausgehen das alles Funktioniert wie es soll:
Also hier die folgenden installationschritte:
#> apt-get install apache2 libapache2-mod-wsgi python-django python-django-tagging fontconfig python-tz python-pip python-dev python-twisted python-cairo
#> pip install carbon whisper graphite-web
#> pip install --upgrade twisted
#> cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
#> cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
#> /opt/graphite/bin/carbon-cache.py start
#> /opt/graphite/bin/carbon-cache.py status
#> cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf
#> cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
#> cp /opt/graphite/webapp/graphite/local_settings.py.example \ /opt/graphite/webapp/graphite/local_settings.py
#> python /opt/graphite/webapp/graphite/manage.py syncdb
#> chown www-data. -R /opt/graphite/storage
#> a2dissite 000-default
#> a2ensite graphite
#> a2enmod wsgi
#> service apache2 restart
#> chmod +x /etc/init.d/carbon-cache // Damit 'carbon-cache.py start' mit Systemstart erfolgt

Ergebnis davon ist -> Nichts funktioniert.

Back to the Roots

Ab hier kommt der Weg graphite-web auf einem Debian 9 (Stretch) in Betrieb zu nehmen.
Ausgangspunkt ist ein frisch installiertes Debian 9.
#> apt-get install vim -y
#> vim /etc/apt/sources.list

Wir müssen die Sources auf die Jessie Repositories setzen da zum Zeitpunkt dieses Blogposts die graphite-web Pakete nicht abrufbar sind.
Daher fügen wir folgendes hinzu in der sources.list
deb http://httpredir.debian.org/debian jessie main
Gefolgt von einem frischem #> apt-get update -y .
Nun installieren wir den großteil der Pakete welche wir benötigen.
#> apt-get install graphite-web graphite-carbon mysql-server python-mysqldb python-pymysql apache2 libapache2-mod-wsgi apt-transport-https ssl-cert python-pip -y
Es folgen ca. 300MB an Daten.
Daraufhin stürzen wir uns direkt auf die Konfig.
Wir fangen an folgende Datei zu editieren.
#> vim /etc/graphite/local_settings.py
Darin ändern wir folgende Settings Sinnvoll in etwas was wir für unsere Installation benötigen.
Also SECRET_KEY, TIME_ZONE & ALLOWED_HOSTS setzen.
Danach muss in der folgenden Datei ein “true” gesetzt werden damit graphite & carbon gemeinsam starten.
#> vim /etc/default/graphite-carbon
Nun kommt der trickreichste Part wir sind leider dazu genötigt eine alte django Version zu installieren.
#> pip install "django==1.4"
Damit haben wir die Grundlage womit wir das folgende Kommando erfolgreich absetzen können.
#> graphite-manage syncdb
#> chown _graphite. /var/lib/graphite/graphite.db
HINWEIS ! Dies setzt erst mal die voreingestellte sqlitedb in Gang.
Wenn eine andere DB verwendet werden soll dann sollte dies bitte in der “local_settings.py” vorgenommen werden.
Wir sind fast am Ziel ein funktionierendes graphite-web zu haben.
Es fehlt nur etwas Apache2 Magie.
#>a2dissite 000-default.conf
#>cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available/
#> a2ensite apache2-graphite.conf
#> systemctl restart apache2

Voilà !

Es sollte nun auf dem Host System das graphite-web aufrufbar sein.

Danke für die Aufmerksamkeit !

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Icinga2 & LSW

Ich musste feststellen das man mit dem Linux Subsystem for Windows auch Icinga2 + Icingaweb2 auch zum laufen bringen kann auf einem Windows.
Also hier mein kleiner Erfahrungsbericht:
Es galt erstmal heraus zufinden welches Ubuntu in dem Subsystem verwendet wird.
Dazu verwenden wir folgendes Kommando:

# lsb_release -a

selection_019
Nun installieren wir erstmal Updates:
# sudo -i && apt-get update
gefolgt von eurem PW und dann dem Update:
selection_020
Als nächstes installieren wir das Icinga2 Repo fuer die anstehende installation von Icinga2.
# add-apt-repository ppa:formorer/icinga && apt-get update
selection_022
Nun legen wir mit der Datenbank los:

# apt-get install mariadb-server mariadb-client -y

Es muss hiernach das Passwort für den MySQL Root Benutzer angelegt werden.
# /etc/init.d/mysql start
# mysql_secure_installation

Login zu Mariadb:
# mysql -p
Anlegen der Icinga-IDO Datenbank:
selection_027
# create database icinga;
Festlegen des IDO Benutzers:
# grant all on icinga.* to 'icinga'@'localhost' identified by 'icinga';
# apt-get install nagios-plugins-all -y

Damit haben wir die Plugin-Checks installiert aber es fehlt uns noch der Webserver :
Dem widmen wir uns nun :
# apt-get install apache2
gefolgt von der simplen installation von icinga2;
# apt-get install icinga2
selection_031
Wir starten nun erstmal den Icinga2 Service:
# /etc/init.d/icinga2 start
Nun brauchen wir natuerlich auch den Rest 🙂
# apt-get install icingaweb2 icingacli icinga2-ido-mysql
Nach dem die Installation durchgelaufen ist editieren wir erstmal die IDO Konfig Datei:
selection_034
# vi /etc/icinga2/features-enabled/ido-mysql.conf
und kommentieren alle wichtigen eintraege ein und ändern Sie ggf. ab.
Wir müssen auch noch die die php.ini editieren:
# vi /etc/php5/apache2/php.ini
Wir suchen darin nach date.timzezone und tragen hier eine Sinnvolle Zeitzone ein.

apt-get install php5-gd php5-imagick

gefolgt von :
# /etc/init.d/httpd restart
Auch ein enablen der Commandpipe ist notwendig:
# icinga2 feature enable command
Fuer das Webfrontend benoetigen wir einen setup token
# icingacli setup token create
Der Webserver läuft schon , wir oeffen im Edge die folgende adresse https://127.0.0.1/icingaweb2/setup
und benutzen den angeforderten Token.
Wir fuellen das Setup Sinnvoll aus 🙂
Ausserdem muss ggf. die iptables firewall eingetragen werden:
# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
selection_054
Und erhalten zum Schluß ein laufendes Icinga2 welches im LSW installiert ist.
Ich hoffe ihr hattet bischen Spaß beim dem nachvollziehen oder nachbauen.
Ich freue mich über Feedback jeglicher Art.
Gruß
David

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Graphite installation unter Debian 8.4

Ich hab mich mit der Aktualiserung unserer Schulungsunterlagen diese Woche beschäftigt, dies erfolgt bei uns auf kontinuierlicher Basis.
Was mir dabei auffiel bei unseren Graphing Unterlagen war dass das Webfrontend von Graphite wenn man es unter einer aktuellen Version von Debian oder Ubuntu installiert den Zugriff auf die Weboberfläche verweigert. Ich warf ich einen genaueren Blick auf das Setup um zu sehen wo der Fehler lag.
Die Ursache war relativ schnell ausgemacht.
Unter Debian Jessie 8.4 und Ubuntu 15.10 in den aktuellen Versionen gibt es kleine Veränderungen in der Apache2-Konfiguration unter Apache 2.4.10 und der Installation von Graphite.
Der bisherige Installationsweg für eine Graphite Installation mit Webfrontend war bisher wie folgt:

# apt-get install apache2 libapache2-mod-wsgi python-django python-django-tagging fontconfig python-tz python-pip python-dev python-twisted python-cairo
# pip install carbon whisper graphite-web
# pip install --upgrade twisted
# cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
# cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
# /opt/graphite/bin/carbon-cache.py start
# /opt/graphite/bin/carbon-cache.py status
# cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf
# cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
# cp /opt/graphite/webapp/graphite/local_settings.py.example \ /opt/graphite/webapp/graphite/local_settings.py
# python /opt/graphite/webapp/graphite/manage.py syncdb
# chown www-data. -R /opt/graphite/storage
# a2dissite 000-default
# a2ensite graphite
# a2enmod wsgi
# service apache2 restart
# chmod +x /etc/init.d/carbon-cache // Damit 'carbon-cache.py start' mit Systemstart erfolgt

Die *kleine* aber wichtige Änderung ist folgende pip install graphite-web fügt nicht folgendes hinzu:
Anscheinend vergisst die pip graphite-web den Eintrag in der graphite-vhost.conf welcher auf das webapp Verzeichnis den Zugriff erlaubt.

// < Directory "/opt/graphite/webapp/" >
// Options +ExecCGI
// Order deny,allow
// Allow from all
// Require all granted
// < /Directory >

Wenn man dies wie manuell ergänzt dann erhält am auch Zugriff auf die Weboberfläche.
Hier ein Kurzdurchlauf bei der Graphite installation auf einem frischen Debian Jessie 8.4.

# apt-get install python python-pip python-dev python-cairo python-django \
python-django-tagging apache2 libapache2-mod-wsgi python-twisted \
python-memcache python-pysqlite2 python-simplejson
# pip install whisper
# pip install carbon
# pip install graphite-web
# cp /opt/graphite/webapp/graphite/local_settings.py.example \ /opt/graphite/webapp/graphite/local_settings.py
# cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi
# cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
# cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf
# cp /opt/graphite/conf/storage-aggregation.conf.example \
/opt/graphite/conf/storage-aggregation.conf
# cd /opt/graphite/webapp/graphite && python manage.py syncdb
# chown -R www-data:www-data /opt/graphite/storage/
# vim /etc/apache2/sites-available/graphite.conf // hier erfolgt das manuelle Hinzufuegen von des Ordners in der Config
# a2dissite 000-default.conf
# a2ensite graphite.conf
# service apache2 restart
# vim /etc/systemd/system/carbon-cache.service // Erstellen eines Service-Files fuer den Start von carbon-cache.py start
# systemctl enable carbon-cache.service
# systemctl start carbon-cache.service
# systemctl reload apache2.service

Somit ist das Problem gelöst und die Graphite-Web Oberfläche aufrufbar.
Ich werde demnächst noch ein Video fuer Ubuntu 15.10 nachreichen da hier die Pfade abweichen von Debian und dies nicht 1:1 übertragbar ist.
Bis Demnächst!
Und übrigens: die nächste Graphing Schulung findet schon ganz bald statt, also noch fix anmelden!

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Wieso Backups wichtig sind

Wieso Backups wichtig sind … hdd
Ich spreche heute ein leidiges Thema an. Eines mit dem man sich nicht so oft auseinandersetzen möchte.
Nämlich Backups.
Datenverlust und nicht wiederherstellbare Backups passieren immer nur anderen. Den Mitbewerbern, Konkurrenten und Kollegen aber nie, nie, nie einem Selbst.
Diesem Trugschluss sitzen wir alle auf bis das Handy baden geht, den Fussboden küsst oder auch es auch einfach den nicht mehr einschaltbar Tod ereilt. Dieses Beispiel ist nun auf ein tragbares Gerät gemünzt aber es betrifft auch die weniger beweglichen Rechner (welche dem Dauerbetrieb) standhalten müssen so wie Server oder Desktop Rechner. Dann sind meistens Familienfotos, Musik oder auch die Puppet Server Config, Kundendaten, Online Shops, uvm … einfach Weg. Wie bekommt man nun mit einem neuen Gerät oder auch mit dem alten (reparierten) PC wieder den vorherigen Zustand her.
“Backupsoftware” ist das Zauberwort !! Was wir ungern hören wollen und erst recht nicht installieren & verwenden wollen. Apple hat hier relativ viel getan ohne das es gewürdigt wird. In dem es TimeMachine unter die Leute gebracht hat. (Backups gab es auch schon weit vor Apple TimeMachine). Der Trick der Fruchtfirma war es unterschwellig zu implementieren in das OS. Richtig verwendet ist es eine schnelle unkomplizierte Backup Lösung. Wie sieht das nun im Linux Umfeld aus hat man hier auch eine unterschwellige implementierung ?
Unter Ubuntu gibt es das Programm ‘Backups’ welches einen ähnlichen Ansatz verfolgt wie TimeMachine. Aber kommen wir von dem privaten Ansatz mal weg. Wie sieht das im Unternehmen aus? Nun wird Niemand TimeMachine als ServerBackup Lösung verwenden wollen. Es so schöne Dinge wie Raid-Controller die es nicht in einem standard iMac 27 Zoll gibt.
Bei der Datengrössen richtiger Server Racks reden wir auch eher von automated Tape Backups und großen Storageracks im Serverrack. Hier kommt Beispielsweise Software wie Bareos in Spiel. Welche genau diesen Auftrag im Unternehmenseinsatz erledigt.
Bareos
Ich möchte aber auf etwas anderes in diesem Blogpost hinaus.
Haben wir etwas Vergessen ? … Ja, die Ausfallzeit welche immer gern unterschlagen wird.
Ausserdem ist man dazu verpflichtet Backups zu erstellen im Unternehmen ?
Nehmen wir als Szenario mal das unser Privater Arbeitsplatz Laptop ausfällt und wir haben brav mit einer Backup software auf einen Backup server ein Backup erstellt haben und dazu noch auf einer separaten 2,5″ Festplatte ein aktuelles Backup + ein startbares Rettungssystem.
Fuer alle folgenden Szenarien gilt simples Ausfallszenario:
– Ausfall der internen Festplatte/SSD.
Szenario 1: Almost worst enough case
Wir besorgen uns eine Ersatzplatte und schrauben die in unseren Laptop und starten von der externen Festplatte und spielen das Backup zurück. Im besten Fall per USB2/3.
Dann sind mit dem besorgen der Festplatte im örtlichen Elektronik markt und dem zurückspielen der Daten ca. 3-4 Stunden Ausfallzeit realistisch.
Fangen wir an das Backup per Netzwerk zurück zuspielen dann dauert dies entsprechend der Netzwerkgeschwindigkeit und der dort verwendeten WiFi Komponenten.
Totale Ausfallzeit: Max 4 Std.
Szenario 2: Even worse case
Wir haben einen Firmenlaptop, hier können wir nicht sofort selbst die Festplatte tauschen das heißt wir geben der zuständigen Abteilung den Laptop und erhalten ihn mit reparierter HDD & ggf. eingespieltem Backup zurück. “Best Case” hier wäre wir erhalten sofort ein Austauschgerät aber müssen das Backup selbst wieder einspielen.
Zeitausfall Entspricht mit ein ausgehändigtem Laptop an die IT Abteilung ggf. Einen kompletten Tag im “Best Case” 3-4 Stunden durch das zurückspielen des Backups.
Totale Ausfallzeit: Max 4-28 Std.
Szenario 3: Worst Case
Die Firma hat einen outgesourcten Dienstleister oder wir müssen den Laptop zum Hersteller einschicken wegen der Garantiereparatur. Wir eröffnen ein Support ticket und anschließende einsenden der Hardware. Bis wir Sie wieder erhalten und dem einspielen des Backups rechnen wir mit ca. 1 Woche Ausfallzeit. Im schlimmsten Fall kann so ein hin- und her sogar länger dauern. circa 2 Wochen bis man wieder einen funktionsfähigen Arbeitsrechner hat.
Totale Ausfallzeit: Max 4-120 Max 240 Std.
Nun nehmen wir die kosten einer durchschnittlichen Arbeitsstunde in Deutschland das sind 31,70 Euro.
Szenario 1 kostet demnach 126,80 Euro.
Szenario 2 kostet demnach 887,60 Euro.
Szenario 3 kostet demnach 7608 Euro.
Wenn kein Backup vorhanden ist sind die Kosten noch viel höher weil kosten für eine professionelle Datenrettung anfallen.
Kommen noch zusaetzliche 583,10 Euro Datenrettung + zeitlicher Mehraufwand 2 ½ Stunden.
Szenario 1 : 820.85 Euro
Szenario 2 : 1581.65 Euro
Szenario 3 : 8302.05 Euro
Kommen noch Auftraggeber und dritte Parteien hinzu welche auch auf unsere Arbeit aufbauen und mit denen wir Vertragliche Bindungen haben wird es wegen sicherer Rechtlicher folgen noch teurer.
Sind Unternehmen rechtlich verpflichtet Backups durchzuführen ?
Laut deutschem Recht als Verplichtung der IT-Compliance gilt folgendes :
Auszug:
“…
Was konkret das Backup-Management anbelangt, verlangt die Rechtsprechung als allgemeine Schutz- und Sorgfaltspflicht, dass regelmäßig und zuverlässig geeignete, lückenlose Datensicherungsroutinen eingesetzt werden. Dies dürfen auch externe Fachleute – wie etwa mit Wartung und Support beauftragte IT-Firmen oder Rechenzentrumsbetreiber, die im Wege der Auftragsdatenverarbeitung mit den Daten und Systemen des Unternehmens arbeiten – ohne besondere Erkundigungspflicht als Selbstverständlichkeit voraussetzen. …”
Hierbei gilt die Beweisumkehr dies heißt, dass man als Person welche den Datenausfall hat ggf. beweisen/belegen muss, dass man ein regelmässiges Backup durchgeführt hat.
Allgemeine Sorgfaltspflicht.
Fazit:
Backups sind Wichtig !! Wirklich Wichtig.
Für Privatpersonen als auch als Unternehmens backup.
Nach dem Szenario welches ich oben Beispiehaft genommen habe fallen demnach immer kosten an selbst im Almost worst enough case Szenario.
In diesem Sinne , Backup please … 🙂
Und natürlich nicht die Anmeldug zur Open Source Backup Conference vergessen!

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Hätten Sie's gewußt ?

Hätten Sie’s gewußt?
Dell ist eine flexible Firma mit flexibler Hardware?
Sicher hätten die meisten Leute “Nein” gesagt.
Wir hätten ähnlich geurteilt, aber wir mußten feststellen, dass der Dell Display Link Adapter (USB 3.0 to HDMI/VGA/Ethernet/USB 2.0) DA100 der flexibelste ist, welchen wir in letzter Zeit auf unseren Schreibtischen hatten.
picture
So unscheinbar wie er aussieht, so verrichtet er trotzdem treu seine Aufgabe.
Mit den Displaylink-Treibern für Ubuntu ist es ohne weiteres möglich, ihn an allen von uns getesteten Laptops & Notebooks (Dell, Macbook & Lenovo), auf denen Ubuntu ab Version 12 aufwärts läuft (auch Debian), ohne Probleme in Betrieb zu nehmen.
Wer mit einem Multimonitorsetup am Laptop arbeitet, wird dies zu schätzen wissen.
Wir schätzen vor allem die Austauschbarkeit.
Bei Meetings, wo wir schnell die Laptops am Beamer wechseln, ist dies ein Segen.
Vor allem, weil es nur USB einstecken und Display erkennen ist.
Der Ethernet-Port des Adapters wird zu fast 95% Out of the Box erkannt und funktioniert damit auch tadellos.
Von uns eine klare Empfehlung für den Displayadapter von Dell als nützliches Helferlein.
Treiberlink:
Displaylink Treiber Ubuntu

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Powerline Shell Visual Guide

Üblicherweise posten wir selten zweimal über das gleiche Thema, aber diesmal gibt es gleich zwei kleine Videos zum Anschauen und Mitmachen. Warum also nochmal ein Post zu dem Thema?
Ich hatte ein paar Anfragen, wie man die Powerline Shell korrekt installiert. Anscheinend gibt es bei dem Ablauf ein paar kleine Fallstricke, die ich mit den Videos auszumerzen versuche. Ansonsten bleibt die Vorgehensweise die selbe wie in der Anleitung, wie wir bereits gebloggt hatten.
Um das Ganze noch etwas zu vereinfachen, habe ich eine Anleitung für Mac OS X und Ubunut gemacht. So könnt ihr auch nochmal kurz innehalten und die ausgeführten Schritte in Ruhe nachvollziehen.
[youtube]https://youtu.be/kuiRwofK3qc[/youtube]
[youtube]https://youtu.be/sPUL2HOjjXQ[/youtube]
Wer jetzt noch Fragen hat, hinterlässt mir doch einfach einen Kommentar und dann kriegen wir das gemeinsam hin.

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

OSQuery Systeminfos in Sql

logo-big
Echo “Hallo Welt!”;
Ich habe ein bisschen in Github gestöbert und habe Folgendes ausgegraben.
OSQuery ist ein schickes Projekt der Firma “Facebook”, welches zum Zweck ihrer eigenen Systemüberwachnung entstanden ist.
Es bildet Systeminformationen in einer schnellen SQLite- bzw. Postgresdatenbank ab.
Nach der Installation als Package osquery-1.5.1.pkg kann man direkt loslegen.
In der Bash kann man mit dem Aufruf von “osqueryi” die interaktive Query Shell starten.
Hier eröffnet einem die interne Hilfe mehr Information zu dem was hier möglich ist.

osquery> .help
Welcome to the osquery shell. Please explore your OS!
You are connected to a transient 'in-memory' virtual database.
.all [TABLE]       Select all from a table
.bail ON|OFF       Stop after hitting an error; default OFF
.echo ON|OFF       Turn command echo on or off
.exit              Exit this program
.header(s) ON|OFF  Turn display of headers on or off
.help              Show this message
.mode MODE         Set output mode where MODE is one of:
                     csv      Comma-separated values
                     column   Left-aligned columns.  (See .width)
                     line     One value per line
                     list     Values delimited by .separator string
                     pretty   Pretty printed SQL results
.nullvalue STR     Use STRING in place of NULL values
.print STR...      Print literal STRING
.quit              Exit this program
.schema [TABLE]    Show the CREATE statements
.separator STR     Change separator used by output mode and .import
.show              Show the current values for various settings
.tables [TABLE]    List names of tables
.trace FILE|off    Output each SQL statement as it is run
.width [NUM1]+     Set column widths for "column" mode
.timer ON|OFF      Turn the CPU timer measurement on or off
osquery>

Wir sind mal neugierig und schiessen auf der osquery Shell das folgende Kommando ab:

osquery> .tables
..
  => os_version
  => osquery_extensions
  => osquery_flags
  => osquery_info
  => osquery_packs
  => osquery_registry
  => osquery_schedule
  => package_bom
  => package_receipts
  => passwd_changes
  => pci_devices
  => preferences
  => process_envs
  => process_events
  => process_memory_map
  => process_open_files
  => process_open_sockets
  => processes
  => routes
  => safari_extensions
  => sandboxes
  => shell_history
  => smbios_tables
  => startup_items
  => suid_bin
  => system_controls
  => time
..

Was wir hier erhalten, sind die Systemfakten welche automatisch im Hintergrund in festgelegten Intervallen abgefragt werden.
Beispiel 1)
Fragen wir zum Test die ‘os_version’ ab.
Dies tun wir folgendermaßen:

osquery> select * from os_version;
+----------+-------+-------+-------+-------+
| name     | major | minor | patch | build |
+----------+-------+-------+-------+-------+
| Mac OS X | 10    | 10    | 4     | 14E46 |
+----------+-------+-------+-------+-------+

Dies ist ein Beispiel für ein einfaches Abfragestatement. (Wenn wir wissen wollen welche OS-Version unsere Rechnerflotte hat.)
Beispiel 2)
Ein Komplexeres Beispiel in SQL:

osquery> select distinct process.name, listening.port, listening.address, process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid;
+----------------+-------+---------+-----+
| name           | port  | address | pid |
+----------------+-------+---------+-----+
| UserEventAgent | 0     | 0.0.0.0 | 251 |
| UserEventAgent | 0     |         | 251 |
| Adium          | 55648 | 0.0.0.0 | 261 |
| SystemUIServer | 59036 | 0.0.0.0 | 265 |
+----------------+-------+---------+-----+

Dies wird alles mit durch OSQuery in festgelegten Intervalle in das Logfile überführt.
Es liegt in unserem Beispielsystem unter

/var/log/osquery.log

und kann mit einer geeigneten Software wie Icinga & Logstash weiter ausgewertet werden.
Nun noch der knifflige Teil des Setups: Ich habe kurz angerissen, wie die SQL Syntax von OSQuery funktioniert und angedeutet, wie flexibel das Ganze ist.
Die unbeantwortete Frage ist allerdings, wie ich meine eigenen Checks in einem Interval definiere.
Dies erfolgt bei OSQuery über eine simple ‘.conf’-Datei. In diesem Beispiel liegt diese unter /var/osquery/osquery.conf.
In der osquery.conf wird beispielsweise ein Check mit der folgenden Syntax erstellt:

.. excerpt
 "schedule": {
        "info": {
        "query": "select * from startup_items"
        "interval": 3600
        }
 }
../excerpt

Fazit:
Aufgrund der simplen Abfragestatements und den kleinen Footprint durch eine SQLite Datenbank kann man im Hintergrund auf Linux & OS X Clients/Servern einen Faktencheck durchführen und durch andere Tools “in der Ferne” auswerten lassen.
Kurzum, man bekommt ein mächtiges Werkzeug für Devops und Systemadministratoren, welches an die meisten Umgebungen angepasst werden kann.
Bis zum nächsten Post!

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...