Icinga 2 – Monitoring automatisiert mit Puppet Teil 3: Plugins

This entry is part 3 of 14 in the series Icinga 2 Monitoring automatisiert mit Puppet

Heute gehen wir der Frage nach wann und wie Plugins installiert werden sollten, was besonders wichtig bei Systemen mit icinga Benutzern zum Gegensatz nagios zu beachten ist. Auf z.B. RedHat-Systemen besteht das Problem, dass der Prozess Icinga 2 unter dem Benutzer icinga läuft, aber unteranderem das Plugin check_icmp oder auch check_dhcp nur vom Benutzer root oder einem Mitglied der Gruppe nagios mittels suid-Bit ausgeführt werden können.

# ls -l /usr/lib64/nagios/plugins/check_icmp
-rwsr-x---. 1 root nagios ... /usr/lib64/nagios/plugins/check_icmp

Das Ändern der Gruppenzugehörigkeit mit Puppet ist wenig hilfreich, da leider bei einem Update des Paketes nagios-plugins die alten Berechtigungen wieder hergestellt werden. Man könnte nun natürlich den Benutzer icinga und das Paket nagios-plugins explizit vor der Klasse icinga2 managen, verliert dann jedoch die Paketkontrolle über die uid und muss das Home-Directory, Shell und weitere Eigenschaften per Hand in Puppet entscheiden. Klarer ist die Methode genau diese Sachen dem Paket zu überlassen und erst danach icinga in die Gruppe nagios aufzunehmen.

yumrepo { 'icinga-stable-release':
  ...
}
->
package { [ 'icinga2', 'nagios-plugins' ]:
  ensure => installed,
}
->
user { 'icinga':
  groups => [ 'nagios' ],
}
->
class { '::icinga2':
  manage_package => false,
}

Um dieses Vorhaben umzusetzen ist es erforderlich die benötigten Repositories zuerst einzubinden, hier mit yumrepo angedeutet, dann die Pakete zu installieren, den Benutzer anzupassen und erst dann die Klasse icinga2 zu deklarieren.

Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

Twitter Development – Benutzerinformationen

twitter-tIm ersten Teil der Serie haben wir Verbindung mit Twitter aufgenommen. Alle Merkmale eines Benutzers und auch dessen Profils sind in Twitter via API zugänglich. Das heisst sämtliche Informationen, welche im Webinterface angezeigt werden, darüber hinaus jedoch auch die die Einstellung des Profils wie Farben, Hintergrundbild und ob der Benutzer z.B. den Benachrichtigungsdienst von Twitter aktiviert hat.
twitter_page
Soweit das Profil des Benutzers nicht geschützt ist (Der Status kann nur von autorisierten Freunden eingesehen werden), sind diese Informationen für alle Twitter-Benutzer verfügbar.
Auch in diesem Beispiel wäre keine Implementierung einer eigenen Methode notwendig um die benötigten Informationen zu ermitteln. Die Kapselung erleichtert jedoch die nachfolgenden Beispiele.
So einfach geht die Implementierung:

package org.netways.api.twitter;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
public class TwitterFunctions {
Twitter twitter;
public TwitterFunctions(String user, String password) {
twitter = new Twitter(user, password);
}
public User getUserInfo(String username) throws TwitterException {
User user = twitter.getUserDetail(username);
return user;
}
}

Die Ermittlung der Benutzerinformationen geht über die Funktion getUserDetail, welche die Übergabe des Twitter-Namens voraussetzt.

package org.netways.api.twitter;
import twitter4j.User;
public class TwitterApi {
/**
* @param args
*/
public static void main(String[] args) {
try {
TwitterFunctions tf = new TwitterFunctions("netways", "password");
User user = tf.getUserInfo("aplusk");
System.out.println("Name: " + user.getName());
System.out.println("Screenname: " + user.getScreenName());
System.out.println("Web: " + user.getURL());
System.out.println("Description: " + user.getDescription());
System.out.println("Location: " + user.getLocation());
System.out.println("Last Status: " + user.getStatusText());
System.out.println("Followers: " + user.getFollowersCount());
System.out.println("Following: " + user.getFriendsCount());
} catch (Exception e) {
System.err.println(e.toString());
}
}
}

Anschließend schreiben wir die ermittelten Daten einfach auf die Konsole:

Name: netways
Screenname: netways
Web: https://www.netways.de
Description: Open Source IT Infrastructure
Location: Germany, Nürnberg
Last Status: New blog post: NETWAYSGrapherV2 RC3 veröffentlicht http://bit.ly/1wbXDH
Followers: 159
Following: 161

Zum Beweis noch der Output des Benutzers mit den meisten Followern (die Description ist echt lesenswert ;-)):

Name: ashton kutcher
Screenname: aplusk
Web: http://blahgirls.com
Description: I make stuff, actually I make up stuff, stories mostly, collaborations of
thoughts, dreams, and actions. Thats me.
Location: here
Last Status: it was a little hot today  http://bit.ly/oy5TI
Followers: 2839413
Following: 184

Während wir noch daran arbeiten Ashton mit unserem NETWAYS Twitter Account zu übertreffen, geht es in den nächsten beiden Blogposts um die Beziehung zwischen Twitter-User.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.