Seite wählen

NETWAYS Blog

Mein PHP-Trainingsprojekt

PHP Schulung

Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen vorgearbeitet. Nach nur einer Woche hatten wir ein gewisses Verständnis der PHP-Syntax und begannen mit einigen relativ einfachen Projekten wie einem Taschenrechner und einem Tic-Tac-Toe-Spiel. Nachdem ich meine Projekte abgeschlossen hatte, beschloss ich, die verbleibende Zeit zu nutzen, um mein eigenes kleines Projekt zu starten. Es heißt „Movie Lib“.

 

Was ist Movie Lib?

Manchmal brauche ich fast eine ganze Stunde, um einen guten Film zu finden, und mein Abendessen ist bereits kalt, bis ich etwas Interessantes herausgesucht habe. Manchmal finde ich einen wirklich interessanten Film, habe aber keine Möglichkeit, ihn irgendwo zu speichern, um ihn mir später anzusehen. „Movie Lib“ ist eine kostenlose Online-Bibliothek, in der man seine Lieblingsfilme einfach finden und verwalten kann. Man hat die Möglichkeit, alle Filme in vier Kategorien zu sortieren: „Trend“, „Beliebtes Fernsehen“, „Bestbewertet“, „Kommend“ oder einen Film mit einem Namen oder einem Genre zu finden. Außerdem können Benutzer auch auf eine Filmkarte klicken, wenn sie etwas Interessantes finden, um weitere Details anzuzeigen und ihn in ihrer persönlichen Bibliothek zu speichern, um sie später anzusehen.

Da ich bereits über einige Erfahrungen mit HTML und CSS verfüge, habe ich für die Gestaltung und Erstellung dieser Website nur etwa eine Woche gebraucht. Der einzige schwierige Teil dieses Projekts bestand darin, Guzzle zu lernen und zu verwenden, um Daten aus der Datenbank abzurufen, da es die Verwendung von „Classes“ erforderte – etwas, das wir in unserem grundlegenden PHP-Kurs noch nicht gelernt haben.

Ich habe das Gefühl, dass ich in den letzten zwei Wochen so viel gelernt habe, und ich kann es kaum erwarten, was während meine Ausbildung als nächstes kommt.

Movies data base : https://developer.themoviedb.org/docs .
Source code : https://github.com/HLongNguyen0/php-movies .

Hoang Long Nguyen
Hoang Long Nguyen
Junior Developer

Hoang Long hat im September 2023 seine Ausbildung zum Fachinformatiker für Anwendungsentwicklung im Team Icinga begonnen. In seiner Freizeit geht er gerne joggen, liest Bücher und spielt Klavier.

NETWAYS GitHub Update Juli 2023

This entry is part 6 of 9 in the series NETWAYS GitHub Update

Willkommen beim NETWAYS GitHub Update, unser monatlicher Überblick über unsere neuesten Releases.

Im Juli 2023 haben wir wieder einen ganzen Schwung spannender Updates an den Start gebracht. Dazu gehören unter anderem eine Aktualisierung der Golang Bibliothek für Check-Plugins, Version 1.2.5 unseres beliebten Icinga Installers sowie ein neuer Release des NETWAYS Support Collectors.

Zudem haben die Check-Plugins für Bareos, Elasticsearch und Logstash einige Änderungen spendiert bekommen!

Wenn du in Zukunft Updates direkt zu Release erhalten willst, folge uns einfach auf GitHub: https://github.com/NETWAYS/

check-bareos Release v2.0.0

Wir haben diesen Monat einen großen Refactor des Check Plugins durch, damit werden wir das Tool in Zukunft besser warten können. Gibt viele Änderungen, am besten die Release Notes lesen.

Changelog

  • Hinzugefügt: Viele neue Unittests!
  • Hinzugefügt: CLI Parameter unterstützen Thresholds
  • Ausgabe normalisiert und erweitert
  • Diverse Bugfixes

https://github.com/NETWAYS/check_bareos/releases/tag/v2.0.0

go-check Release v0.5.0

Ein etwas größeres Release unserer Golang Bibliothek für Check Plugins. Mit diesem Release haben wir einiges an Code aufgeräumt.

Changelog

  • Einige Abhängigkeiten entfernt
  • Breaking Change: metric und benchmark Pakete entfernt
  • Breaking Change: http/mock Paket entfernt
  • Breaking Change: Ältere Funktionen entfernt
  • Bugfix: Fehler in der Ausgabe von PartialResult gefixt
  • Viele kleine Fixes unter der Haube

https://github.com/NETWAYS/go-check/releases/tag/v0.5.0

check-elasticsearch Release v0.3.0

Changelog

  • Hinzugefügt: Neuer Subcheck für Ingest Pipelines
  • Refactor um teilweise kompatibel mit OpenSearch zu sein
  • Viele Optimierungen unter der Haube

https://github.com/NETWAYS/check_elasticsearch/releases/tag/v0.3.0

check-logstash Release v0.9.0

Changelog

  • Hinzugefügt: Neuer Subcheck für Logstash 8 Pipeline Metriken
  • Hinzugefügt: Neuer Subcheck für Logstash Pipeline Reload Fehler

https://github.com/NETWAYS/check_logstash/releases/tag/v0.9.0

support-collector Release v0.9.0

Changelog

  • Hinzugefügt: Viele neue Kollektoren (Elastic Stack, Prometheus, Graylog, MongoDB, Foreman, diverse Webserver)
  • Hinzugefügt: Neue CLI Option um sensitive Daten zu entfernen
  • Hinzugefügt: Das Tool sammelt jetzt auch teilweise Logdateien ein
  • Viele Abhängigkeiten unter der Haube aktualisiert

https://github.com/NETWAYS/support-collector/releases/tag/v0.9.0

icinga-installer Release v1.2.5

Changelog

  • Bugfix: Weitere PHP und Apache Konfiguration wird nun von Puppet verwaltet
  • Bugfix: Puppet Daemon auf Debian/Ubuntu deaktiviert

https://github.com/NETWAYS/icinga-installer/releases/tag/v1.2.5

Markus Opolka
Markus Opolka
Consultant

Markus war nach seiner Ausbildung als Fachinformatiker mehrere Jahre als Systemadministrator tätig und hat währenddessen ein Master-Studium Linguistik an der FAU absolviert. Seit 2022 ist er bei NETWAYS als Consultant tätig. Hier kümmert er sich um die Themen Container, Kubernetes, Puppet und Ansible. Privat findet man ihn auf dem Fahrrad, dem Sofa oder auf GitHub.

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen unterschiedliche Rollen im Monitoring, daher besteht oft Bedarf für eine Integration beider Tools. Genau dafür haben wir check_prometheus geschrieben, was wir nun der Öffentlichkeit zur Verfügung stellen.

https://github.com/NETWAYS/check_prometheus

Mit check_prometheus lassen sich der Status deiner Prometheus Server ermitteln, Alarme aus Prometheus auslesen und sogar PromQL aus Icinga auswerten. Das Check Plugin haben wir in Golang geschrieben, das heißt, es werden keine weiteren Abhängigkeiten auf der Icinga Instanz benötigt. Hier einige Beispiele für die Nutzung:

Wir können grundlegend zunächst mal prüfen, ob unser Prometheus Server erreichbar und operativ ist. Dafür nutzen wir den health Unterbefehl:

$ check_prometheus health

[OK] - Prometheus Server is Healthy. | statuscode=200

Natürlich können wir hier Adresse oder TLS Konfiguration als Parameter angeben.

Mit dem alert Unterbefehl, lässt sich außerdem der Status von in Prometheus definierten Alarmen überprüfen. Entweder eines oder mehrerer spezifischen Alarme:

$ check_prometheus alert --name "MyVeryImportantAlert"

[CRITICAL] - 1 Alerts: 1 Firing - 0 Pending - 0 Inactive
\_[CRITICAL] [MyVeryImportantAlert] - Job: [example] is firing - value: 1.00
| firing=1 pending=0 inactive=0

Oder auch einfach alle bereits in Prometheus definierten Alarme und deren Status:

$ check_prometheus alert

[CRITICAL] - 6 Alerts: 3 Firing - 0 Pending - 3 Inactive
\_[OK] [PrometheusTargetMissing] is inactive
\_[CRITICAL] [PrometheusAlertmanagerJobMissing] - Job: [alertmanager] is firing - value: 1.00
\_[OK] [HostOutOfMemory] - Job: [alertmanager]
\_[OK] [HostHighCpuLoad] - Job: [alertmanager]
\_[CRITICAL] [HighResultLatency] - Job: [prometheus] on Instance: [node01] is firing - value: 11.00
| total=6 firing=3 pending=0 inactive=3

Wenn wir keine Alarme in Prometheus definieren wollen, können wir mit dem query Unterbefehl auch direkt PromQL auswerten lassen und gegen Schwellwerte prüfen:

$ check_prometheus query -q my_very_important_metric{job="prometheus"}[10s]' -c5 -w 10

[WARNING] - 1 Metrics: 1 Critical - 0 Warning - 0 Ok
\_[WARNING] my_very_important_metric{instance="node01", job="prometheus"} - value: 15
| my_very_important_metric_node01_prometheus=15

Persönlich empfehle ich jedoch, Alarme in Prometheus zu definieren da wir hier weitere Möglichkeiten haben, den jeweiligen Alarm zu definieren (beispielsweise das for Schlagwort in der Alarm Definition).

Jetzt da wir unsere Prometheus Instanzen mit Icinga integriert haben, können wir uns ansehen, wie wir den Prometheus Alertmanager aus Icinga ansprechen können. Die Integration mit dem Prometheus Alertmanager ist glücklicherweise kein großes Problem. Durch die Prometheus Alertmanager HTTP API, können wir relativ leicht benutzerdefinierte Alarme mittels JSON erzeugen. Alles was wir brauchen ist ein Notification Plugin, das uns die Statusmeldung in Icinga nach JSON transformiert und diese an den Alertmanager schickt.

Da jede Benachrichtigungsstrategie anders aussieht, können wir hier keine universelle Lösung implementieren. Das heißt aber nicht, dass wir nicht Beispiele zur Verfügung stellen können. Im Repository findet ihr ein kleines Python Skript, dass sich ohne Abhängigkeiten auf jeder Icinga Instanz einsetzen lässt:

notify-alertmanager-example.py --hostname mynode01 --service ping --state 2

Hast du einen Bug gefunden, oder brauchst ein neues Feature? Melde dich einfach auf GitHub!

Markus Opolka
Markus Opolka
Consultant

Markus war nach seiner Ausbildung als Fachinformatiker mehrere Jahre als Systemadministrator tätig und hat währenddessen ein Master-Studium Linguistik an der FAU absolviert. Seit 2022 ist er bei NETWAYS als Consultant tätig. Hier kümmert er sich um die Themen Container, Kubernetes, Puppet und Ansible. Privat findet man ihn auf dem Fahrrad, dem Sofa oder auf GitHub.

Neues zum go-check

Lang ist es her, dass ein Blogpost über das hauseigene NETWAYS go-check geschrieben wurde. Seitdem hat sich das go-check immer weiterentwickelt und wurde mit vielen verschiedenen Funktionen erweitert, sodass die Pluginentwicklung noch einfacher von der Hand geht.

Um einen kurzen Umriss zu geben, bei dem go-check handelt es sich um GO Package, mit dem es möglich ist, schnell und einfach, Icinga Plugins zu entwickeln.

Ein Beispiel dafür wäre das Evaluieren von Thresholds und anschließendem Anhängen von Performance data im richtigen Format:

package main

import (
	"github.com/NETWAYS/go-check"
	"github.com/NETWAYS/go-check/perfdata"
)

func main() {
	config := check.NewConfig()
	config.Name = "check_new"
	config.Readme = `example Plugin Readme`
	config.Version = "1.0.0"

	return_code := check.Unknown

	plugin_output := ""

	crit_thresh := config.FlagSet.StringP("crit-example", "c", "20", "Critical threshold")

	warn_thresh := config.FlagSet.StringP("warn-example", "w", "10", "Warning threshold")

	example_val := config.FlagSet.Float64("example-val", 0.0, "Example value")

	config.ParseArguments()

	crit, err := check.ParseThreshold(*crit_thresh)
	if err != nil {
		check.ExitError(err)
	}

	warn, err := check.ParseThreshold(*warn_thresh)
	if err != nil {
		check.ExitError(err)
	}

	if crit.DoesViolate(*example_val) {
		return_code = check.Critical
		plugin_output = "Value is critical!"
	} else if warn.DoesViolate(*example_val) {
		return_code = check.Warning
		plugin_output = "Value is warning!"
	} else {
		return_code = check.OK
		plugin_output = "Everything is fine"
	}

	p := perfdata.PerfdataList{{
		Label: "example_label",
		Value: *example_val,
		Warn:  warn,
		Crit:  crit,
		Uom:   "Mb",
	}}

	example_perf := perfdata.Perfdata{
		Label: "another_perfdata",
		Value: 1.0,
		Warn:  &check.Threshold{Upper: 50.0},
		Crit:  &check.Threshold{Upper: 100.0},
	}

	p.Add(&example_perf)

	check.ExitRaw(return_code, plugin_output, "|", p.String())
}

Nach dem Kompilieren des Programms können beispielhaft Parameter mitgegeben werden:

go build -o check_test main.go

./check_test -c 20 -w 9 --example-val 10
WARNING - Value is warning! | example_label=10Mb;9;20 another_perfdata=1;50;100

Darüber hinaus gibt es folgende weitere Funktionen:

  • Konvertierung von IEC zu SI Einheit
  • Performance data in Human-readable Format
  • Http-Mock, welcher http-requests und results „dokumentiert“ und in XML speichert
  • Evaluierung des „schlechtesten“ Ergebnisses (Value) in einem Array

Somit bietet go-check ein schnelles und komfortables Package für die Entwicklung eines Icinga 2 Check Plugins. Für weitere Releases und Aktualisierungen, einfach bei dem offiziellen NETWAYS Organisation vorbei schauen.

Philipp Dorschner
Philipp Dorschner
Technical Service Manager

Nach seiner Ausbildung zum Fachinformatiker bei der NETWAYS Professional Services GmbH wuchs das Interesse an Development und organisatorischen Themen. Heute unterstützt Philipp die Kollegen aus PS-Services als hybrider Mitarbeiter. Fünfzig Prozent seiner Zeit als Technical Service Manager und die anderen fünfzig Prozent als interner Entwickler. Als Ausgleich zu seiner Arbeit im Büro verbringt er seine Freizeit meistens beim Sport oder trifft sich mit Freunden.

Warum Python?

Als Systemintegrator in der IT-Welt stellt man früher oder später fest, dass man das Verstehen und Schreiben von Programmiersprachen nicht ignorieren kann. Je nachdem, in welcher IT-Bereich man tätig ist, wird man mit Programmiersprachen konfrontiert.

Wir bei NETWAYS bieten Open Source Lösungen, etwa in den Bereichen Monitoring, Cloud, Log-Management und Schulungen zu diesen Themen und Tools. Unter anderem etwa Lösungen für Automation, wo wir uns hauptsächlich mit Puppet und Ansible als Automation-Tools beschäftigen. Nachdem ich in letzter Zeit bei einigen Automation-Projekten dabei war, habe ich mich also mehr mit Ansible auseinander gesetzt. Ansible ist eine Automatisierungswerkzeug zur Orchestrierung, sowie der allgemeinen Konfiguration und Administration von Computern. Ansible ist Open Source und in Python geschrieben. Dabei bin ich immer wieder in Zusammenhang mit den Ansible-Modulen oder spezifischen Ansibel-Rollen für unsere Kunden auf Python gestoßen. In diesem Blog befassen wir uns mit der Definition und mit Vor- und Nachteilen von Python als Programmiersprache.

Was ist Python?

Programmiersprachen haben eine hohe Vielfalt und jede hat ihre eigenen Verwendungen und Vor- und Nachteile. Eine der objektorientierten Sprachen, die viele Anwendungen hat, ist Python. Python wurde im Jahr 1991 entworfen und veröffentlicht. Python ist Open Source und einfach zu lernen und damit geeignet für den Einsieg in die Welt des Programmierens. Python kann in vielen verschiedenen Bereichen wie Website Design, Softwareentwicklung und Skripting eingesetzt werden. Außerdem können die in Python geschriebenen Codes in einer Vielzahl von Plattformen wie Linux, Windows, Mac, sogar in Mobiltelefonen usw. implementiert werden.

Vorteile

Bedienung

Python ist aufgrund der Nähe zur menschlichen Sprache eine der am einfachsten zu erlernenden Sprachen, insbesondere für Anfänger. Im Vergleich zu Java und C können dieselben Funktionen in weniger Zeilen ausgeführt werden.

Libraries

Python verfügt über viele Standardbibliotheken in verschiedenen Bereichen wie das Internet, Webservice-Tools, Betriebssystemschnittstellen und Protokolle. Die am häufigsten verwendeten Programmieraufgaben werden in Python geschrieben, um die Anzahl der Codezeilen zu reduzieren, die zum Schreiben eines Programms erforderlich sind.

Integration

Python integriert „Application Integration“ und verbessert somit die Entwicklung von Webdiensten durch den Aufruf von COM- oder COBRA-Komponenten. Python verfügt über leistungsstarke Steuerungsmöglichkeiten, da sie direkt von C++, C oder Java mit Jython aufgerufen werden kann. Python kann auch XML und andere „Markup Languages“ verarbeiten, um auf modernen Betriebssystemen über ähnlichen Bytecode ausgeführt zu werden.

Flexibilität

Python ist sehr flexibel und erlaubt dem Benutzer daher, neue Dinge auszuprobieren. Python hindert den Benutzer nicht daran, etwas anderes auszuprobieren. Andere Programmiersprachen bieten diese Art von Flexibilität und Freiheit nicht und daher ist Python in diesen Fällen eher vorzuziehen.

Nachteile

Geschwindigkeit

Python ist eine interpretierte Sprache und übersetzt daher den Code Zeile für Zeile. Dadurch ist seine Verarbeitungsgeschwindigkeit niedriger als die einiger anderer Sprachen.

Mobilgeräte

Laut vielen Programmierern ist Python keine geeignete Sprache, um in der mobilen Umgebung ausgeführt zu werden. Außerdem erkennen Android und iOS Python nicht, Python kann jedoch im mobilen Umfeld verwendet werden. Dies erfordert jedoch mehr Zeit und diverse Einstellungen.

Speicherverbrauch

Python hat einen sehr hohen Speicherverbrauch. Dies liegt daran, dass es hinsichtlich Datentypen flexibel ist und viel Speicher verwendet. Python ist keine gute Wahl für speicheroptimierte Aufgaben.

Zusammenfassung

Heutzutage gibt es viele Programmiersprachen in der IT-Welt, die auch rege verwendet werden. Jede dieser Sprachen ist in einem bestimmten Bereich stärker als in anderen. Die Wahl der richtigen Programmiersprache beschäftigt viele, die planen in die Welt des Programmierens einzusteigen.

Die Entscheidung, welche Sprache man lernen soll, hängt von der Anwendung ab und persönlichen Interessen.
Python wurde entwickelt, um Produktivität, Lesbarkeit und Benutzerfreundlichkeit zu betonen. Aus meiner persönlichen Erfahrung als Anfänger kann ich sagen, dass es großen Spaß macht, Codes in Python zu schreiben, da die Lernkurve ab einem gewissen Punkt steil nach oben geht. Falls Du es ebenfalls neu lernen und Dich in Python ausprobieren willst, wünsche ich Dir viel Spaß dabei!

Falls Du es bei NETWAYS lernen oder anwenden magst, dann schau Dir doch mal unsere offenen Jobs und Ausbildungsstellen an!

Saeid Hassan-Abadi
Saeid Hassan-Abadi
Systems Engineer

Saeid hat im Juli 2022 seine Ausbildung als Fachinformatiker für Systemintegration bei uns abgeschloßen, und arbeitet nun in Operation-Team. Der gebürtige Perser hat in seinem Heimatland Iran Wirtschaftsindustrie-Ingenieurwesen studiert. Er arbeitet leidenschaftlich gerne am Computer und eignet sich gerne neues Wissen an. Seine Hobbys sind Musik hören, Sport treiben und mit seinen Freunden Zeit verbringen.