Seite wählen

NETWAYS Blog

Epische Entwicklungsumgebung in Eclipse

In letzter Zeit habe ich häufiger mit dem Thema Plugin Programmierung zu tun. Und da, wie letzte Woche schon geschrieben, die Programmiersprache meiner Wahl in den meisten Fällen Perl ist, suche ich schon seit längerem eine adäquate IDE. Nun gibt viele Wege ein Programm in Perl zu schreiben. Der auf jedem unixoiden System verfügbare Weg ist vi, mit vim sogar mit Syntax highlighting. Unter win-digen Umständen tut’s auch das notepad. Aber so richtig komfortabel sieht das alles nicht aus.
Eine wirklich gute Hilfe, die ich vor kurzem gefunden habe, ist die Erweiterung EPIC für Eclipse. Eclipse ist an und für sich als Entwicklungsumgebung für Java bekannt, viele kennen auch noch die Erweiterung für C/C++ aber dass Eclipse auch etwas für Perl bietet ist nicht jedem bekannt. Natürlich steht es wie Eclipse selber auch unter einer Open Source Lizenz, der Source Code kann daher hier bezogen werden, die Installation gestaltet sich aber ungleich einfacher wenn man den Eclipse Update Manager benutzt. Dieser befindet sich im Menü „Help“ unter „Install new Software“.
Trägt man hier die Adresse „http://e-p-i-c.sf.net/updates/testing“ ein, ist man nur noch einen Klick von der fertigen Installation entfernt.
Eclipse selber steht für die meisten Plattformen zur Verfügung. Entweder man installiert es unter der jeweiligen Linux Distribution direkt aus den Software Repositories oder man bezieht es von der Eclipse Homepage.

Vorteile

Ich kann hier in der kürze natürlich nicht alle Features aufzählen, die wichtigsten sind jedoch:

  • Syntax Highlighting
    Sieht nett aus und funktioniert richtig gut.
  • Syntax Validation
    Man muss nicht immer erst das Programm starten damit man merkt dass es doch nicht so tut wie man will
  • Debugger
    Erleichtert einem das debugging enorm durch die Möglichkeit Breakpoints zu setzen und den Wert von Variablen zur Laufzeit zu überprüfen und wahlweise auch zu ändern.
  • Wortvervollständigung
    für tippfaule, ein Druck auf Enter und das Wort ist da
  • Integrierte Hilfe
    Integration von perldoc. Man hält den Mauszeiger über einen Befehl und schon erscheint die Hilfe. (Wichtig: unter dem Menü Window \ Preferences muss der Pfad zu Perl vollständig und richtig hinterlegt sein)
  • Regex Testing Machine
    Gegen böse Überraschungen gut. Einfach mal testen ob der Regex auch das findet was man erwartet.
Christoph Niemann
Christoph Niemann
Senior Consultant

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

Weekly Snap: AwStats Reporting, Perl for Programming & CSS Frameworks

26 – 30 December bid 2011 farewell with handy tools for reporting and programming.
Ronny took a look at report generation with AwStats. The well known tool can generate static PDF reports when combined with htmldoc. From classic log files such as web, ftp or mail servers to network traffic. All that AwStats needs is a log file like source from which it can process according to parameters given in its configuration. Corporate branding of reports with images, styles and HTML links is of course also possible.
Following on, Christoph glorified Perl as his language of choice in writing monitoring plugins. Nagios and Icinga offer complete freedom in this regard, so operating system portability plays a more important role. Java, Python and Perl win points here, especially when interpreters are available. Nonetheless Christoph’s preference is Perl thanks to the flexibility CPAN provides. Language aside, the Nagios development guidelines are important to abide by, and modules for Perl such as Nagios::Plugin::Threshold or Nagios::Plugin::Range are particularly useful. For database interfaces, he recommended DBD::Sybase, DBD::mysql and Win32::OLE.
Continuing with the programming thread, Marius signed off by sharing the Swiss Army knives of CSS. In creating web designs what work with all browsers, he recommended various CSS frameworks. Reset CSS from both Eric Meyer or YUI allow developers to “reset” the pre-defined formatting of a browser for a fresh start, and BluePrint goes a step further to offer help in structural design, typography and columns. From there, he picked out  960 Grid System for tables, sketchbooks and templates for use with Inkscape, Gimp, Illustrator or even Photoshop. Finally, for a complete all-in-one solution Marius recommended HTML5 Boilerplate.

The glory of Perl

Immer wieder kommt es im Alltag eines Sysadmins mit  Monitoring Ambitionen zu dem Fall, dass er etwas überwachen möchte, dass so vorher noch nie dagewesen ist oder dass er bestimmte Aspekte mit einbeziehen will/muss/möchte die bisher noch nicht in ein Plugin gegossen wurden.
An Stellen wie diesen kommt man oft nicht am neu- oder umprogrammieren eines Plugins vorbei. Hierbei stellt sich im Regelfall die Frage: „Welche Sprache benutze ich denn?“
Nagios und Icinga verstehen alle Programmiersprachen, die es fertig bringen auf der Kommandozeile ein Zahl zwischen 0 und 3 auszugeben. Das sind meines Wissens nach so gut wie alle und daher ist man der Lösung der Frage noch keinen Schritt näher gekommen.
Ein weit wichtigerer Aspekt der Auswahl ist wohl die Portierbarkeit auf verschiedenartige Systeme. So kann man z.B. mit Microsofts Powershell viele tolle Sachen machen. Sobald man dieses aber auf einem alten Windows oder wohl möglich auf einem unixoiden System ausführen will wird es trickreich bis unmöglich.
Sprachen wie Java, Python oder Perl sind hierfür einfach besser geeignet. Sie bieten für alle gängigen und für viele exotische Systeme Interpreter oder lassen sich, wie z.B. Perl, auch gleich mit Interpreter in ein handliches Paket (windows Exe) schnüren. Wie das funktioniert wurde im Blog vor kurzem schon mal erklärt.
Meine Wahl fällt schon seit längerem immer wieder auf Perl. Wenn’s ums umschreiben geht kommt man oft nicht dran vorbei weil viele Plugins schon in Perl verfasst wurden. Wenn’s ums neu schreiben geht macht einem Perl das Leben einfach einfacher. Dank des universellen und einfach nur genialen CPAN, dass mit einem Haufen von Modulen für jeden nützlichen bis unnützen Zweck daher kommt, kann man innerhalb kürzester Zeit eigene Plugins für so ziemlich alles schreiben was eine Schnittstelle aufweist bis hin zu Modulen die einem die Logüberwachung oder das auslesen von CLI tools vereinfachen.
[poll id=“3″]
Wie mit jeder Sprache ist es wichtig, die Nagios Developement Guidelines einzuhalten, um den Nutzen eines Plugins zu maximieren. Nützlich sind hierfür z.B. die Module Nagios::Plugin::Threshold und Nagios::Plugin::Range. Beide kann man hier finden. Jedoch kann man diesen Teil auch noch leicht selbst implementieren.
Schwieriger wird es bei so Dingen wie einer Datenbankschnittstelle. Aber auch hierfür bietet Perl schon fix und fertige Module die bloß noch eingebunden werden müssen. Das sind z.B. DBD::Sybase für mssql oder DBD::mysql.
Auch für die universelle Windows Verwaltungs Datenbank bietet das CPAN ein Modul(Win32::OLE), mit dessen Hilfe man fix ein generisches Plugin für WMI angelegt hat.
Und last but not least hat Perl einfach das schönste Wappentier 🙂 Für mich steht die Entscheidung fest und Ihnen wird sie hoffentlich jetzt einfacher gemacht die „richtige“ Sprache für die Plugin Programmierung auszuwählen.

Christoph Niemann
Christoph Niemann
Senior Consultant

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

Perl-Scripts mit PAR::Packer kompilieren

Manchmal ist es notwendig, Perl-Scripts auf Systeme zu verteilen, auf denen entweder kein Perl installiert ist oder auf dem keine zusätzlichen Perl-Module installiert werden können.
Für diesen Fall gibt es ein Perl-Modul namens PAR::Packer, mit dem beliebige Perl-Scripts inklusive aller Abhängigkeiten kompiliert und in ein einziges Binary gelinkt werden können.
PAR::Packer ist dabei plattformunabhängig und kann so z.B. unter Windows und Linux eingesetzt werden.
Zunächst installieren wir PAR::Packer mit Hilfe von CPAN:
# cpan install PAR::Packer

Je nach Anzahl der noch fehlenden Perl-Module kann dies einige Minuten dauern. Da Windows von Haus aus kein Perl anbietet, muss dieses evtl. vorher installiert werden (Tipp: Strawberry Perl – .
Danach können wir unser erstes Perl-Script kompilieren:
$ cat hello.pl
print "Hello World!\n";
$ pp -o hello hello.pl
$

Als Ergebnis erhalten wir ein Binary namens „hello“, das nun neben dem kompilierten Script auch die Teile der Perl-Laufzeitumgebung enthalten, die zum Ausführen des Scripts notwendig sind. Das Binary hat dabei keine Abhängigkeiten auf Perl-Libraries:
$ ldd hello
linux-vdso.so.1 => (0x00007fffad7ff000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5a23cc0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5a23921000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5a23f0a000)

Ansonsten verhält sich das Binary genauso wie unser ursprüngliches Perl-Script:
$ ./hello
Hello World!
$

Weitere Informationen zu PAR::Packer gibt es z.B. unter http://search.cpan.org/dist/PAR/lib/PAR/Tutorial.pod.

Weekly Snap: Monitoring Aida Cruises, Linux VFS & Perl Tips

6 – 10 June gave advice on Linux VFS and Perl script dependencies and shared a monitoring project from ships at sea.
Starting off, Sebastian put the Linux Virtual File System (VFS) API to the test. Since the improvements made to “path lookup” and “dcache” in Linux kernel v. 2.6.38, performance gains of up to 35% were promised. Unfortunately Sebastian found only a 7% improvement in his test system of a home directory with git-checkouts of various Linux versions and an additional 1 million files.  He tested both the current stable Debian 2.6.32 and the recently compiled v.3 on the same system. From these results, he recommended against VFS for Debian Squeeze servers, in favour of the corresponding distribution kernel.
Also happy to help, Eric shared his script to check the dependencies of various Perl scripts. Helpful to those who find themselves installing missing modules for unfamiliar Perl scripts, it extracts the modules used, and checks if they are already on your system. Through the commented lines, missing modules can then be installed via CPAN.
Finally from the consulting team, Birger got excited about his recent monitoring project for Aida cruises. At the headquarters in Rostock and on their cruise liners across the seven seas, Aida needed to ensure their IT infrastructure would always run smoothly. So Birger implemented Icinga with LConf for centralised configuration, and enabled monitoring results to be received via satellite from ships at sea. Understandably for him, the project gave the term ‘monitoring satellites’ a whole new meaning.