Numeric datatypes as primary key in databases

Most likely primary keys in databases are numbers. But what happens, when an administrator uses the wrong numeric data type? In the worst case, databases can’t write down entries anymore.

For example, if an administrator wants to write customer information into the databases and wants to use the customerID itself as the primary key, then the numeric data type “TINYINT” would cause that only 255 entries can be written. But on the other hand the “BIGINT” numeric data type, could be too large for smaller databases.
So when you are setting up a database, you should think about how many entries will be written the next months/years and think about which datatype is the right one for your setup. Also you should think about if you should use the data types unsigned or not. This value will change the range of the datatypes.

Typ signed unsigned
Min Max Min Max
TINYINT -128 +127 0 255
SMALLINT -32.768 +32.767 0 65.535
MEDIUMINT -8.388.608 +8.388.607 0 16.777.215
INT/INTEGER -2.147.483.647 +2.147.483.646 0 4.294.967.295
BIGINT -263 +263 – 1 0 264 – 1

Another example:
If an administrator wants to store 60000 customer information in the database, he should use at least a “SMALLINT”. Should he use the unsigned version or not? Lets have a look.
With the signed data type he has a range from -32.768 up to +32.767, but no customerID (primary key as mentioned above) has a negative number, so a “unsigned SMALLINT” would be necessary.

The case, that you thought about the questions above but your data type got out of range, could happen. There is a way to change the datatype and to increase the range in a simple way.
*ALTER TABLE tablename MODIFY column MEDIUMINT UNSIGNED;*
But remember: The larger your database is, the longer will it take to do such changes!

Marius Gebert

Autor:

Marius ist seit September 2013 bei uns beschäftigt. Er hat im Sommer 2016 seine Ausbildung zum Fachinformatiker für Systemintegration absolviert und kümmert sich nun um den Support unserer Hostingkunden. Seine besonderen Themengebiete erstrecken sich vom Elastic-Stack bis hin zu Puppet. Auch an unserem Lunchshop ist er ständig zu Gange und versorgt die ganze Firma mit kulinarischen Köstlichkeiten. Seine Freizeit verbringt Marius gern an der frischen Luft und wandert dabei durch die fränkische Schweiz

TLS Konfiguration von Icinga 2 mit collect_ssl_info checken

In Icinga2 und dessen Kommunikationsprotokoll ist SSL/TLS die Kommunikationsbasis. Transportverschlüsselung von Daten ist heute weit verbreitet wie das Beispiel HTTPS zeigt. Die technische Grundlage ist SSL/TLS. SSL steht für Secure Socket Layer und TLS bedeutet Transport Layer Security. Transportlayer Security ist nur eine neuer Name der die Weiterentwicklung verdeutlichen soll. Die entscheidende Grundlage ist die Standardisierung dieser Kommunikation um möglichst vielen Kommunikationspartnern eine problemlose Kommunikation zu ermöglichen.

Die Kryptographische Grundlagen sind mehrere Algorithmen für Datenhashing und Verschlüsselung die sich in vier Gruppen aufteilt. Die erste Gruppe sind Securehashe. Beim Hashing besteht die Aufgabe von Quelldaten eine Quersumme zu erzeugen die zweifelsfrei nur von identischen Daten identische Quersummen erzeugt und gleichzeitig einen Rückschluss von der erzeugten Quersumme, Hashwert auf die Quelldaten unmöglich macht. Die zweite Gruppe sind symmetrische Chiffrierer. Bei Symmetrischer Verschlüsselung muss zuallererst ein geheimer Schlüssel erzeugt und nur an den Kommunikationspartner übermittelt werden. Danach wird ein symmetrisches Verfahren vereinbart und mit dem geheimen Schlüssel die Daten an der Quelle verändert und diese Transformation am Ziel wieder Rückgängig gemacht. Für alle unbeteiligten sind diese veränderten Daten unleserlich und damit wertlos. Die Dritte Gruppe sind asymmetrische Chiffren. In den siebziger Jahren wurden Asymmetrische Verfahren erfunden. Der erste Algorithmus der sich verbreitet hat trägt den Namen RSA nach den Anfangsbuchstaben der Entwickler. Wesentliches Prinzip ist hier dass immer zwei komplementäre Schlüssel erzeugt werden wobei immer was mit dem einen Schlüssel verändert wurde kann nur mit dem zweiten Schlüssel rückgängig und wieder lesbar gemacht werden. Und weiter kann von einem Schlüssel nicht der andere hergeleitet oder erzeugt werden. Das bietet die schöne Möglichkeit einen Schlüssel zu veröffentlichen und den anderen geheim zu halten. Da jetzt beliebig viele diesen öffentlichen Schlüssel anwenden und damit Daten verschlüsseln können und nur der Besitzer des zweiten geheimen Schlüssels dies Daten wieder lesbar machen kann, sonst niemand und damit entfällt die Notwendigkeit zwischen Beteiligten geheime Schlüssel vorher austauschen zu müssen. Noch erwähnen möchte ich eine vierte Gruppe, die Schlüsselaustauschprozeduren wie beispielsweise Diffie-Hellman. Solche Verfahren ermöglichen es ein gemeinsames Geheimnis, geheime Schlüssel, zwischen zwei Partnern zu verabreden ohne das Dritte durch abhören erfahren können was ausgehandelt wurde.

Im praktischen Einsatz werden meist alle verfahren kombiniert eingesetzt um damit die Aufgaben

  • Identitätsfeststellung
  • Massendatenverschlüsselung
  • Datenauthentizität
  • Schlüsselaustausch

zu bewältigen. Asymmetrische Verfahren bieten bisher nur geringen Datendurchsatz und sind für Massendaten kaum zu gebrauchen, bieten aber die Möglichkeit der Identitätsfeststellung indem man mit dem öffentlichen Schlüssel ein bestimmtes Datenmuster verschlüsselt, zur Gegenseite transferiert mit der Aufforderung zu entschlüsseln, das Muster zu invertieren und mit dem zweiten privaten Schlüssel zu verschlüsseln und wieder zurückzusenden. Kann an der Datenquelle die Antwort mit dem öffentlichen Schlüssel wieder erfolgreich entschlüsselt werden und liefert das erwartete invertierte Bitmuster, ist sichergestellt dass am andern Ende der zugehörige private Schlüssel vorhanden ist und somit ist die Identität festgestellt. Bisherige Asymmetrische Verfahren benötigen zur ausreichenden Schlüssel-härte größere Schlüssellängen. Schlüssel-härte bezeichnet die Resistenz gegen Knacker. Als neue Verfahren sind in den letzten Jahren EC Verfahren, Elliptische Kurven Kryptographie, dazugekommen, die erheblich härtere Schlüssel haben und damit deutlich kürzer sein können. Ein Vergleich, beim RSA Verfahren sind weniger als 2048 Bit als unsicher anzusehen, hingegen ECDSA erreicht die gleich Härte schon mit gut 200 Bit Schlüssellänge. Mit Symmetrische Verfahren können Massendaten am schnellsten codiert werden und sie bieten eine relativ hohe Schlüssel-härte. Symmetrische Verfahren sind bereits mehrere tausend Jahre bekannt und es gibt viele verschiedene davon. In neuere Zeit hat sich hier der AES, Advanced Encryption Standard, verbreitet. 128 Bit lange Schlüssel sind heute bei diesem symmetrischen Verfahren schon als hart und damit als sicher zu betrachten. Aber beide Kommunikationspartner brauchen denselben geheimen Schlüssel und der muss vorher sicher erzeugt und ausgetauscht werden. Hier kommen Schlüsselaustauschprozeduren wie DH, Diffie-Hellman oder die neuere Variante ECDH, Elliptische Kurven Kryptographie Diffie Hellman zum Einsatz oder alternative werden auch asymmetrische Cipher dazu eingesetzt. Und nicht vergessen möchte ich die Aufgabe übermittelte Daten auf Authentizität zu prüfen und jede Veränderung zu bemerken und solche Daten als falsch abzuweisen wozu wieder Hashverfahren angewendet werden, mein HMAC bezeichnet, Hashed Message Authentication Code

Zusammengefasst

  • Symmetrische Verfahren arbeiten performant aber benötigen ein gemeinsames Geheimnis
  • Asymmetrische Verfahren arbeiten langsam aber verwenden zwei komplementäre Schlüssel die als privat und öffentlich bezeichnet werden
  • Secure Hashe bilden Prüfsummen von Daten
  • Schlüsselaustauschprozeduren handeln Geheimnisse aus

So besteht heute die Aufgabe öffentliche Schlüssel und Daten zu Personen, Firmen oder Rechnern zuzuordnen. Dazu haben sich mehrere Arbeitsabläufe etabliert. Manche, handeln nach dem Prinzip des Web of Trust, also wer kennt wen und vertraut wem und welche Schlüssel gehören zu wem. Andere handeln nach der Standardisierung x509, einem ITU-T Standard. Zur Erfüllung dieses Standards haben sich sogenannte Trustcenter etabliert die sich in zwei Aufgaben splitten der CA und der RA. CA bedeutet Zertifikatsautorität und hat zur Aufgabe kryptographisch Schlüssel und Datenzugehörigkeit zu beweisen in Form eines x509 Zertifikats. Der zweite Teil besteht aus der Registrierungs Autorität und der Aufgabe die Verifikation von Kundendaten wie Adresse, Firmenname, Rechnernamen und bei Fehlern Zertifikate zu verweigern. Ein Zertifikat enthält dann diese Daten, einen öffentlichen Schlüssel und die Signatur durch die CA.

Signaturen sollen Datenauthentizität sicherstellen. Dazu wird über die als korrekt bewerteten Daten mit einem Secure Hase eine Prüfsumme erstellt und mit dem privaten Schlüssel der CA verschlüsselt. Diese CA stellt ihren öffentlichen Schlüssel mit Ihren Daten als x509 Root-Zertifikat aus und hat diesen normalerweise bereits weit verteilt in Webbrowsern oder anderen Programmen. Eine zu jeder Zeit durchführbare Authentizitätsprüfung wiederholt den Schritt die Quersumme aus den vorhandenen Daten, wie Rechnernamen neu zu erzeugen, die verschlüsselte Quersumme in der Signatur mit dem öffentlichen Schlüssel der CA aus deren Zertifikat zu entschlüsseln und zu vergleichen. Sind beide identisch, so ist damit die Authentizität bewiesen. Solche Zertifikate können mehrstufige Ketten bilden und beginnen immer mit einem Root-Zertifikate der CA, einem Zwischenzertifikat und dem Server oder Clientzertifikat am Ende das dann in Massen ausgestellt wird.

Heute wird sehr oft SSL/TLS angewendet. Transport Layer Security beschreibt eine große Zahl von verfügbaren Ciphern, Chiffrierverfahren, deren Anwendung, Protokollen und besonders das jeweilige Handshake Protokoll, also das Aushandeln vom Kommunikationsparametern. Für SSL stehen mehrere Softwarepakte zur Verfügung die durch die Standardisierung untereinander in der Kommunikation kompatibel sind und verschlüsselt kommunizieren können. Diese Softwarepakete werden in der Regel in Kommunikationsprogramme als Bibliotheken eingebunden. Solche um SSL erweiterten Programme haben oft ein “S” für Secure im Namen. Das SSL/TLS-Protokoll enthält heute das TLS-Record-Protokoll das die über TCP, Transmission Controll Protocol, die zu transferierenden Datenblöcke behandelt. Darüber werden die TLS-Protokolle, TLS-Handshake, TLS-Cipher-Spec, TLS-Alert-Protocol und das TLS-Application-Protocol transportiert. Für die praktische Anwendung werden fast immer mehrere Algorithmen kombiniert eingesetzt um Identitäten fest zu stellen, das gemeinsame symmetrische Verfahren zu vereinbaren und den gemeinsamen geheimen Schlüssel zu erzeugen und für beide Seiten zugänglich zu machen. Über TLS-Handschake beginnt die Kommunikation, wer ist wer, über TLS-Cipher-Spec wird der Symmetrische Cipher mit Parametern vereinbart. Anschließend werden Meldungen über das Alert-Protocol und die Massendaten über das TLS-Application-Protokoll transportiert.

Das TLS-Handshake-Protocol arbeitet beim Verbindungsaufbau diese Schritte ab

  1. Client schickt zum Server ein Hello
  2. Server identifiziert sich beim Client mit seinem Zertifikat
  3. Client kann sich bei Server mit seinem eigenen Zertifikat ausweisen oder mitteilen dass er keines hat
  4. Sind die vorangegangenen Schritte akzeptiert wird ein einmaliger gemeinsamer Schlüssel nur für diese Verbindung vereinbart, und im Abstand von Stunden geändert

Über das Alert-Protocol verständigen sich die Kommunikationspartner über verschiedene Events während der Kommunikation wie zB Datenblöcke fehlerhaft übermittelt oder andere Ereignisse.

x509 Zertifikate können also auch zur Authentisierung von Clients gegenüber Servern verwendet werden, sodass ein Server dies Zertifikate auf Zugehörigkeit oder weitere Angaben prüfen und dann zur Kommunikation akzeptierten oder ablehnen und die Verbindung beenden oder mit User und Passwortcheck fortfahren kann. Dies Möglichkeit bietet sich für automatische Verbindungen zwischen Servern oder Systemkomponenten an. Eine solche hierarchische x509 Zertifikatskette wird von Icinga 2 zur Authentisierung verwendet. Dabei existiert ein Root-Zertifikat einer CA auf einem Icinga 2 Server. Mit dem privaten Schlüssel dieser CA werden dann für jeden Kommunikationspartner eine eigenes x509 Zertifikat erzeugt. Entscheidender Teil ist der korrekte Rechnername, FQDN, Full qualified Domain Name. Danach erhält jeder Kommunikationspartner sein eigenes Zertifikat, den privaten Schlüssel und das Rootzertifikat der Icinga 2 CA.

Damit kann nur kommunizieren wer die “Erlaubnis” per Zertifikat hat, also ein Zertifikat das in diesem Baum signiert ist und wenn, dann nur verschlüsselt. Zur weiten Detaillierung können in Icinga 2 Konfigurationsdateien die TLS Version und die erlaubten symmetrischen Cipher definiert werden. In jedem Zertifikat ist der Servername hinterlegt und damit wird die Kommunikation nur von diesem System mit einem Zertifikat aus dem Icinga 2 CA Baum angenommen. Im Unterschied zu Zertifikaten von Webservern akzeptiert Icinga 2 keine Metazeichen im Rechnernamen.

Beispieleinträge in einer /etc/icinga2/features-enabled/api.conf Datei

protocolmin = "TLSv1.1"
cipher_list = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256"

Als Erweiterung zur Erleichterung der Einrichtung und Erstkontaktaufnahme mit dem Icinga 2 Server von Systemen mit Agenten werden sogenannte Tickets verwendet. Solche Tickets leiteten sich aus dem Root-Zertifikat, und dem Systemnamen des Agenten, FQDN, ab.

Erzeugen kann man Tickets auf zwei Arten

icinga2 pki ticket --cn mein.agent.de
c4eb335a1e62c4779bed3901eaa245699d92817b

oder via rest-api

curl -k -s -u apiuser:apipassword -H 'Accept: application/json' \
-X POST 'https://IcingaCAServer:5665/v1/actions/generate-ticket' \
-d '{ "cn":"mein.agent.de" }' | python -m json.tool

Und dieser API-User muss natürlich angelegt sein und sollte nur Rechte für generate-ticket haben. Das wird in der api-users.conf eingestellt

object ApiUser "apiuser" {
  password =  "apipassword"
  permissions = [ "actions/generate-ticket" ]
}

Für Administratoren stellt sich Aufgabe solche Sicherheitseinstellungen zu kontrollieren. Und dazu gibt es ein Toolchen das solche Einstellungen einfach über Netz abfragt, das Skript collect_ssl_info.

collect_ssl_info 192.xx.yy.zz:5665

fragt vom Icinga 2 Server das Zertifikat ab

collect_ssl_info 192.xx.yy.zz:5665 -showcerts

fragt die komplette Zertifikateskette ab

Und nun ein kleines Beispiel zur Abfrage nach schwachen Ciphern.

collect_ssl_info -qp -u 192.xx.yy.zz:5665 -u www.xyz.de:443 \
 -c RC4-MD5 -c AES128-SHA256 
===== begin ciphertest 192.xx.yy.zz:5665 =============
RC4-MD5                          failed
AES128-SHA256                    success
===== end ciphertest 192.xx.yy.zz:5665 ===============
===== begin ciphertest www.xyz.de:443 ==============
RC4-MD5                          failed
AES128-SHA256                    success
===== end ciphertest www.xyz.de:443 ===============

jetzt erzeugen wir listen für ein zweites Beispiel

host.txt

192.xx.yy.zz:5665
www.xyz.de:443

cipher.txt

RC4-MD5
AES128-SHA256

und erledigen den gleichen Job mit Anwendung dieser Listen

collect_ssl_info -qp -ul host.txt -cl cipher.txt 
===== begin ciphertest 192.xx.yy.zz:5665 ===============
RC4-MD5                          failed
AES128-SHA256                    success
===== end ciphertest 192.xx.yy.zz:5665 ===============
===== begin ciphertest www.xyz.de:443 ===============
RC4-MD5                          failed
AES128-SHA256                    success
===== end ciphertest www.xyz.de:443 ===============

Eine Übersicht über die Icinga 2 Konfigurationsparameter.

Configuration Attributes:

Name Description
cert_path Required. Path to the public key.
key_path Required. Path to the private key.
ca_path Required. Path to the CA certificate file.
crl_path Optional. Path to the CRL file.
bind_host Optional. The IP address the api listener should be bound to. Defaults to 0.0.0.0.
bind_port Optional. The port the api listener should be bound to. Defaults to 5665.
accept_config Optional. Accept zone configuration. Defaults to false.
accept_commands Optional. Accept remote commands. Defaults to false.
cipher_list Optional. Cipher list that is allowed.
tls_protocolmin Optional. Minimum TLS protocol version. Must be one of TLSv1, TLSv1.1 or TLSv1.2. Defaults to TLSv1.

Das Skript steht zum Download bereit und viel weitere Info zur Konfiguration von Icinga 2.

Siegfried Eichhorn

Autor: Siegfried Eichhorn

Siegfried ist ein Urgestein der IT, das die Dinosaurier noch selbst erlebt hat. Bei den ersten Projekten mit Open Source und Linux gabs noch komische Bemerkungen, aber das ist längst Geschichte. Nach vielen Projekten und Eskapaden hat er jetzt das Abenteuer NETWAYS gewagt und arbeitet dort als Consultant. Und wenn er da mal nicht arbeitet, genießt er Nürnberg.

Clustershell und Foreman-API

i-love-apisForeman bietet die Möglichkeit verschiedene Informationen über die Hosts einzusehen. Dazu gehören der Status, das Betriebssystem, Ressourcen etc. Möchte man nun, auf mehreren Hosts gleichzeitig ein Kommando absetzen, kann man sich auf jedem einzelnen einloggen oder eine Clustershell aufbauen.
Hierfür gibt es verschiedene Tools die dies erlauben. Eine Unbequemlichkeit die hier jedoch schnell aufkommt, ist das kopieren und einfügen der Hostnamen in die Commandline. Aus diesem Grund, habe ich etwas Zeit investiert und ein Ruby Script geschrieben, das es mir ermöglicht, mit festgelegten Filtern nach speziellen Listen von Hostnamen zu suchen und diese als eine einzige Ausgabe zu speichern. Ich habe für das erzeugen von Clustershells “csshX” im Einsatz, welches ich auch direkt mit eingebunden habe.

Das get_hosts Script gibt es als GIST.

In diesem Script wird zunächst eine “config.yml” geladen, in der die Foreman-URL und der Nutzername definiert sind. Eine Passwortabfrage erfolgt in diesem Script direkt auf der Commandline. Anschließend wird die Ausgabe der Foreman-API nach dem Auflisten aller Hostinformationen in JSON geparst und alle verfügbaren Parameter für die Hosts in das entsprechende Array gespeichert. Mit dem Parameter “-s / –server” gibt man einen String an, nachdem speziell gesucht werden soll. Diese Ausgabe wird zusätzlich mit angehängt.

Gefiltert wird nach:
1) Reports enabled
2) OS Ubuntu 14.04 / Debian 8
3) Kein Match auf net-* oder netways.de (Als Beispiel)

Von den selektierten Hosts werden die Hostnamen in einer Commandline-Ausgabe mit einem Leerzeichen getrennt ausgegeben. Verschiedene werden sich eventuell fragen: “Wofür brauche ich das? Wieso sollte ich so ein Script verwenden?”
Die Antwort ist einfach: Bequemlichkeit und live Übersicht, was gerade passiert. Die Suchparameter lassen sich sehr leicht anpassen und die Ausgabe des Scriptes wird etwas an Zeit der administrativen Aufgaben sparen, vorallem dann, wenn man mehr als nur 2 oder 3 Server mit Puppet bespielen lassen möchte.

user@computer ~/Documents/ruby/foreman $ ruby script.rb
Enter password:
[ ] Trying to establish a connection...
[OK] Password correct
[OK] Connection established
[ ] Collecting data...
[OK] Data collected
[RESULTS]
Ubuntu
csshX --login root test1.test.de test2.test.de test34.test.de test19.test.de mail.test.de icinga-001.test.de
Debian
csshX --login root icinga-002.test.de db-003.test.de db-021.test.de
Finished succesfully

Wie bereits erwähnt, ist hierfür noch eine “config.yml” Datei nötig, die gewünschte Parameter enthält. In diesem Fall die URL und den usernamen. Aber auch ein Gemfile, das sich in Ruby um bestimmte Versionen von Gems kümmert. (Mit einem “bundle install” können diese installiert werden)

Die config.yml und das Gemfile gibt es ebenfalls als GIST.

Eingebaute “rescue Execptions” im Script selbst, geben entsprechende Rückmeldung, sollte der Login oder eine der auszuführenden Verarbeitungsschritte fehlschlagen und brechen den Vorgang an dieser Stelle ab.

Marius Gebert

Autor:

Marius ist seit September 2013 bei uns beschäftigt. Er hat im Sommer 2016 seine Ausbildung zum Fachinformatiker für Systemintegration absolviert und kümmert sich nun um den Support unserer Hostingkunden. Seine besonderen Themengebiete erstrecken sich vom Elastic-Stack bis hin zu Puppet. Auch an unserem Lunchshop ist er ständig zu Gange und versorgt die ganze Firma mit kulinarischen Köstlichkeiten. Seine Freizeit verbringt Marius gern an der frischen Luft und wandert dabei durch die fränkische Schweiz

“Multiline” mit Filebeat

simplimages

Das analysieren von Logs mit dem ELK-Stack ist an sich relativ simpel. Ein Problem auf das man hierbei stoßen kann, sind jedoch Logeinträge aus mehreren Zeilen bestehen (“Multiline”).  Das Problem hierbei ist, das Logstash jede dieser Zeilen als einzelne Events versteht und verarbeitet, wodurch das Kibana sehr schnell unübersichtlich werden kann.
Wenn man hierzu etwas recherchiert, kommt man sehr schnell auf eine “Lösung” die wie folgt aussieht:

filter {
multiline {
type => "type"
pattern => "regexpattern"
negate => boolean
what => "previous" or "next"
}
}

Mit dieser Methode, wird am Logstash ein Filter angelegt, der “multiline” erkennt und diese anhand von Regexpattern zusammenfügt. Erfahrungsgemäß funktioniert dies jedoch nicht immer wie gewünscht. Eine wesentlich bessere Methode ist meiner Meinung nach, direkt am Client anzusetzen, der die Logs verschickt. Hierzu kann ich den Einsatz von Filebeat empfehlen.

Die Installation ist sehr simpel:
curl -L -O https://download.elastic.co/beats/filebeat/filebeat_1.3.1_amd64.deb
sudo dpkg -i filebeat_1.3.1_amd64.deb

Alternativ, kann man natürlich auch die Apt-Source mit dem entsprechenden Key lokal hinzufügen und mit dem Paketmanager arbeiten. Nach der Installation steht die Konfiguration aus. Die dafür zuständige Datei ist “/etc/filebeat/filebeat.yml”. Die ist zwar dank vielen Kommentaren sehr lang, doch das wesentliche sieht in einem Beispiel wie folgt aus:

filebeat:
prospectors:
-
paths:
- /var/log/my_multiline_1/*
input_type: log
multiline:
pattern: ^[a-zA-Zä]{3}\ [0-9]{2}\,\ [0-9]{4}
negate: true
match: after
######
-
paths:
- /var/log/my_multiline_2/*
input_type: log
multiline:
pattern: ^[a-zA-Zä]{3}\ [0-9]{2}\,\ [0-9]{4}
negate: true
match: after
######
registry_file: /var/lib/filebeat/registry
######
output:
logstash:
hosts: ["$IP_OF_LOGSTASH:$INPUT_PORT"]
######
logging:
files:
rotateeverybytes: 10485760 # = 10MB

Hierbei werden für verschiedene Logs verschiedene “Prospectors” konfiguriert. Hierzu sind lediglich Informationen über den “input_type”, den Regexpattern nötig und eine Art und Weise wie Logs zusammengefügt werden sollen nötig. In diesem Beispiel würden alle Zeilen, auf die der Regexpattern nicht zutrifft, an die Zeile angefügt, auf die der Regexpattern zutrifft. Mit jeder Änderung am Filebeat, muss der dienst neu gestartet werden.

Damit Logstash aber auch zusätzlich Daten von der neuen Quelle “Filebeat” annimmt und verarbeitet, muss ein neuer “Input” und “Output” definiert werden.

input {
beats {
port => $INPUT_PORT
}
}
output {
redis {
data_type => "list"
key => "logstash"
}
}

Auch hier muss der Logstash natürlich neu gestartet werden. Anschließend können die zusammengefügten Logeinträge im Kibana unter die Lupe genommen werden und im Logstash weiter zerlegt werden.

Marius Gebert

Autor:

Marius ist seit September 2013 bei uns beschäftigt. Er hat im Sommer 2016 seine Ausbildung zum Fachinformatiker für Systemintegration absolviert und kümmert sich nun um den Support unserer Hostingkunden. Seine besonderen Themengebiete erstrecken sich vom Elastic-Stack bis hin zu Puppet. Auch an unserem Lunchshop ist er ständig zu Gange und versorgt die ganze Firma mit kulinarischen Köstlichkeiten. Seine Freizeit verbringt Marius gern an der frischen Luft und wandert dabei durch die fränkische Schweiz

Icinga2 API und BitBar auf MacOs

preview1Wir wollen APIs, warum? Weil sie schnell, einfach zu integrieren und zu bedienen sind. Nun hat Icinga2 eine API und es entstehen ganz viele Möglichkeiten diese zu nutzen. Wir bauen uns Dashboards mit Dashing oder zeigen den Status von Hosts in Foreman an.

Ich bin letztens über ein Tool BitBar gestolpert, dieses Tool kann mit einfachen Skripten die eigene “Mac OS X menu bar” erweitern. Hierfür braucht es nur die richtige Formatierung der Ausgabe und BitBar generiert ein weiteres Dropdown Menu.

Ich hab mir die Icinga2 API zu nutze gemacht und eine kleine Erweiterung gebaut um mir den Status von Icinga2 in meiner Menubar anzuzeigen.
Im Menu wird dann der globale Status entweder in grün oder rot, abhängig davon ob Hosts “down” und “unhandled” sind, angezeigt.
Der Aufruf dafür kann der Adresszeile im Browser entnommen werden.
/icingaweb2/monitoring/list/hosts?host_state=1&sort=host_severity&host_unhandled=1

Wenn wir am Ende dann ein “&format=json” an die URL hängen, haben wir ein gängiges Format um das Ergebnis in jeglichen Applikationen zu verwenden.
[{"host_icon_image":"","host_icon_image_alt":"","host_name":"web01","host_display_name":"web01","host_state":"1","host_acknowledged":"0","host_output":"DOWN","host_attempt":"1\/3","host_in_downtime":"0","host_is_flapping":"0","host_state_type":"1","host_handled":"0","host_last_state_change":"1474556541","host_notifications_enabled":"1","host_active_checks_enabled":"0","host_passive_checks_enabled":"1"},

Mehr dazu gibts auf Github unter icinga2_api_examples oder natürlich in der Icinga2 Dokumentation.

Thilo Wening

Autor: Thilo Wening

Thilo hat bei NETWAYS mit der Ausbildung zum Fachinformatiker, Schwerpunkt Systemadministration begonnen und unterstützt nun nach erfolgreich bestandener Prüfung tatkräftig die Kollegen im Consulting. In seiner Freizeit ist er athletisch in der Senkrechten unterwegs und stählt seine Muskeln beim Bouldern. Als richtiger Profi macht er das natürlich am liebsten in der Natur und geht nur noch in Ausnahmefällen in die Kletterhalle.

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

Autor: David Okon

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 glücklichen Menschen zu machen.