Proaktive Überwachung mit Grafana und Telegram

  1. Einleitung
  2. Telegram Bot erstellen
  3. Telegram Gruppe erstellen und Bot einladen
  4. Grafana konfigurieren
  5. Alerts in Grafana definieren
  6. Weiterführende Links

Einleitung

Eine proaktive Überwachung eines Servers oder einer Platform kann mit relativ einfachen Mitteln realisiert werden. Telegram bietet mit sogenannten Bots die Möglichkeit einen Chat mit Maschinen zu erstellen. In diesem Beitrag verwende ich eine Chatgruppe, in der sich menschliche Teilnehmer austauschen können. Der Bot, welcher Teil der Gruppe ist kann aber keine Nachrichten interpretieren sondern nur selber welche schicken.

Telegram Bot erstellen

Das Erstellen eines Telegram Kontos wird bewusst in diesem Artikel nicht erwähnt. Dies kann über https://web.telegram.org/ oder die Mobile App erledigt werden.

Als erstes muss der BotFather angeschrieben werden (welcher selber ebenfalls ein Bot ist) um einen Bot erstellen zu können. Dazu kann im Kontakt Suchfeld /BotFather geschrieben, der Kontakt ausgewählt und anschliessend im Chatfenster auf Start gedrückt werden.

Darauf präsentiert der BotFather auch gleich seine Interaktions Möglichkeiten. Das Erstellen des Bots läuft interaktiv ab, wir beginnen mit /newbot
Anschliessend werden wir nach dem Namen des Bots gefragt und Usernamen, welcher auf bot enden muss. In meinem Fall ist der Name DirectoryServicesAlerts und der Username DSAlerts_bot. Als Resultat erhalten wir das Token, mit dem Grafana über diesen Bot mit uns kommunizieren kann.

Telegram Gruppe erstellen und Bot einladen

Es ist von Vorteil anstelle eines direkt Chats mit 1 Person eine Gruppe in Telegram zu erstellen, in welcher der Bot Mitglied ist. Dadurch können beliebig menschliche Mitglieder hinzugefügt und entfernt werden je nach Bedarf (z.B im Pikettfall).
Durch klicken auf das Hamburgermenü neben dem Titel Telegram kann mit New Group eine neue Gruppe angelegt werden. Bei Kontakten wird der Bot mit der Suche nach dem Username des Bots (in meinem Fall /DSAlerts_bot ) hinzugefügt. Neben unserem Bot benötigen wir einmalig auch noch den IDBot (/myidbot), welcher uns die ID für die Gruppe sagen kann. Diese wird in Grafana benötigt, damit der Bot weiss in welche Gruppe er die Mitteilungen schicken soll.

Die Gruppen ID kann anschliessend im Gruppen Chat mit /getgroupid@myidbot angezeigt werden.

Anschliessend kann der IDBot wieder aus der Gruppe entfernt werden, er wird nicht mehr benötigt.

Grafana konfigurieren

In Grafana wird über das Alerting Menü ein neuer Notification channel hinzugefügt

Der Name des Channels kann frei gewählt werden. Als Type wird Telegram ausgewählt und bei den Telegram API Settings das BOT API Token, welches uns der BotFather mitgeteilt hat, eingetragen sowie bei Chat ID diejenige welche uns der IDBot im Gruppenchat geschickt hat.

Abschliessend kann das Ganze mit Send Test überprüft werden. Sollte alles korrekt konfiguriert worden sein ist eine Test Nachricht im Gruppen Chat ersichtlich.

Alerts in Grafana definieren

In Grafana kann nun auf einem Panel im Alert Tab der gewünschte Schwellwert hinzugefügt werden, ich nehme zum testen die CPU Auslastung.

Mit folgenden Powershell Einzeiler wird die CPU auf einem Test Server zu 100% ausgelastet

(1..(GWmi Win32_Processor | Select -Expand NumberOfLogicalProcessors)) | ForEach-Object { Start-Job {while(1){}} }; Read-Host "Press any key to stop cpu load test";Stop-Job *;Remove-Job *

und schon meldet der Bot den Alarm, bzw. dessen Aufhebung

Raspberry Pi, Hifiberry und Pi Musicbox

Als neuer Audioplayer habe ich mir kürzlich ein Raspberry Pi B+ mit Hifiberry Digi+ und als Software Pi Musicbox gebastelt. Angeschlossen habe ich das ganze via SPDIF.
Am Anfang war ich frustriert, weil kein Sound zu hören war. Nach einiger Zeit Basteln und Recherchen habe ich einen Workaround gefunden: https://www.hifiberry.com/forums/topic/digi-and-pimusicbox-sync-error/
Im Script /opt/musicbox/setsound.sh muss die Identifikation für die Hifiberry Digi+ angepasst werden:

elif [[ ${dev[1]} == "snd-rpi-hifiberry-digi" ]]; then

ändern in

elif [[ ${dev[1]} == "snd-hifiberry-digi" ]]; then

danach rebooten und prüfen ob der richtige Ausgang gewählt wird:

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sndrpihifiberry [snd_rpi_hifiberry_digi], device 0: HifiBerry Digi HiFi wm8804-spdif-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

bei mir ist die hifiberry die card 1, dies muss mit der Einstellung in /etc/asound.conf übereinstimmen

cat /etc/asound.conf
pcm.!default {
    type hw
    card 1
}
ctl.!default {
    type hw
    card 1
}

 
 

Raspberry Pi Edimax Wifi Adapter einrichten

Der Edimax war einer der ersten verfügbaren Wifi Adapter für die Raspberry Pi. Das Einrichten ist relativ einfach für einigermassen versierte Linux User. Bei Distributionen wie z.B OpenElec 4.0 kann der Wifi Adapter auch direkt in XBMC konfiguriert werden.
Beim konfigurieren unter Raspbian habe ich bemerkt, dass wenn länger keine Aktivität auf dem Adapter stattfindet, dieser in einen Sleep Mode ähnlichen Zuständ fällt und ich ihn nicht mehr wecken konnte. Weiter unten wird beschrieben wie dieser Zustand verhindert werden kann.
raspberry_pi_edimax

Installation Edimax USB Wifi Adapter

Der USB Adapter muss eingesteckt sein. Wird er im laufenden Betrieb eingesteckt startet die Raspberry Pi neu.

OS Update

sudo apt-get update
sudo apt-get upgrade

Dies kann unter Umständen eine Weile dauern

Das Interface konfigurieren

sudo nano /etc/network/interfaces

Die Grundkonfiguration sollte folgendermassen aussehen:

auto lo
auto wlan0
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Diese Konfiguration setzt die IP Adresse via DHCP Server.
Möchte man eine fixe IP setzten muss die Konfiguration wie folgt abgeändert werden:
Address, Netmask und Gateway den eigenen Ansprüchen entsprechend anpassen

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

WPA Konfiguration 1

In der Datei /etc/network/interfaces folgende Ergänzungen machen

iface wlan0 inet dhcp
        wpa-ssid "ssid"
        wpa-psk "password"

WPA Konfiguration 2

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

SSID und PSK mit den eigenen Angaben ersetzten

network={
ssid="SSID-HIER-EINSETZEN"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="WIFI-PASSWORT-HIER-EINSETZTEN"
}

“Sleep” Mode verhindern

sudo nano /etc/modprobe.d/8192cu.conf

Folgende Zeilen hinzufügen

# Disable power management
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

Neustart

Die Konfiguration ist abgeschlossen, nun die Raspberry Pi neustarten.
 

mkv Dateien in avi (xvid) konvertieren unter Linux für PS3

Jeder der sich gerne mal HD Filme via Playstation 3 anschauen will kennt das Problem. Das gebräuchlichste Format für Filme mit einer Auflösung von 720p oder 1080p ist Matroska (.mkv)
Die Playstation 3 hat keinen Codec um Matroska Files zu decodieren. Desshalb müssen diese Files konvertiert werden.
Da ich hauptsächlich mit Linux arbeite konvertiere ich die Filme mit Slackware. Von dem dafür eingesetzten Programm ffmpeg gibt es auch ein GUI.
win_logolinux_logo WinFF

ffmpeg -i INPUT_FILE -f mp4 -r 23.976 -vcodec libx264 -s 1280x720 -b 3000kb -aspect 16:9 -flags +loop -cmp +chroma -deblockalpha 0 -deblockbeta 0  -maxrate 3500k -bufsize 4M -bt 256k -refs 1 -bf 3 -coder 1 -me_method umh -me_range 16 -subq 7 -partitions +parti4x4+parti8x8+partp8x8+partb8x8 -g 250 -keyint_min 25 -level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec libfaac -ab 384kb -ar 48000 -ac 2 OUTPUT.MP4