Transcription

Wisse, was deine Elefanten machenPostgreSQL Performance-Analyse mit collectdSebastian tokkee“ Harl [email protected] ”teamix GmbH / collectd core teamPGConf.DE 201111. November 2011

Über teamix gegründet 2001 Ursprünge: Open-Source und NetzwerkeDebianNagiosSchulungenu.v.m. Heute auch:NetAppVMWareRiverbed (WAN-Beschleunigung)JuniperN-IX (Nürnberger Internet-eXchange)Wisse, was deine Elefanten machenFolie 2

Was ist collectd?ÜberblickWichtige EigenschaftenPlugin-ÜberblickPostgreSQL ProzesseStatistiken von PostreSQL abfragenPerformance-Daten in RDBMS speichernÜber den TellerrandWisse, was deine Elefanten machenFolie 3

Was ist collectd? collectd sammelt Leistungsdaten von Rechnern Leistungsdaten sind zum ehr Daten werden erhoben, verarbeitet und gespeichert Häufig: Darstellung als Graphen Performance-Analyse, Kapazitätsplanung Nicht verwechseln mit Monitoring! Homepage: http://collectd.org/Wisse, was deine Elefanten machenFolie 4

Wichtige Eigenschaften Daemon Freie Software (größtenteils GPLv2) Portierbar (Linux, *BSD, Solaris, . . . ) Skalierbar (OpenWrt, . . . , Cluster / Cloud) Effizient (Default-Auflösung: 10 Sekunden) Modular (über 100 Plugins in Version 5.0)Wisse, was deine Elefanten machenFolie 5

Wichtige Eigenschaften Daemon Freie Software (größtenteils GPLv2) Portierbar (Linux, *BSD, Solaris, . . . ) Skalierbar (OpenWrt, . . . , Cluster / Cloud) Effizient (Default-Auflösung: 10 Sekunden) Modular (über 100 Plugins in Version 5.0)Wisse, was deine Elefanten machenFolie 5

10-Sekunden-AuflösungWisse, was deine Elefanten machenFolie 6

Wichtige Eigenschaften Daemon Freie Software (größtenteils GPLv2) Portierbar (Linux, *BSD, Solaris, . . . ) Skalierbar (OpenWrt, . . . , Cluster / Cloud) Effizient (Default-Auflösung: 10 Sekunden) Modular (über 100 Plugins in Version 5.0)Wisse, was deine Elefanten machenFolie 7

Wichtige Eigenschaften Daemon Freie Software (größtenteils GPLv2) Portierbar (Linux, *BSD, Solaris, . . . ) Skalierbar (OpenWrt, . . . , Cluster / Cloud) Effizient (Default-Auflösung: 10 Sekunden) Modular (über 100 Plugins in Version 5.0)Wisse, was deine Elefanten machenFolie 7

Verfügbare Plugins tch itchcurl onewirepingpythonserialtailteduserswrite tappnotify mmsWisse, was deine Elefanten etlinkntpdOpenVZpowerdnsrrdcachedswaptarget scaletokyotyrantvmemzfs arcFolie 8

Technische Details Aktuelle Version ist 5.0 (Release: März 2011) Pakete für diverse Distributionen vorhanden(Debian, RedHat, FreeBSD, OpenWrt, OpenSolaris [WIP], . . . ) Major-Version 4.x ist an einigen Stellen inkompatibel1 v5upgrade Target Geschrieben in C Versionsverwaltung mit Git d.org/wiki/index.php/V4 to v5 migration guideWisse, was deine Elefanten machenFolie 9

Verwendung Daemon läuft auf jedem Client (Ausnahme: SNMP o.ä.) üblicherweise: ein oder mehrere zentrale Server, die Werte vonClients empfangen (Push-Modell) First steps: install; select plugins; start daemon;enjoy ;-)Wisse, was deine Elefanten machenFolie 10

Darstellung: Collection 4 (C4) Grundidee: Daten über, z. B., JSON zur Verfügung stellen verschiedene Frontends davor möglich effiziente Handhabung von vielen Datensätzen durch Caching flexible Konfiguration von GraphenWisse, was deine Elefanten machenFolie 11

Was ist collectd?Plugin-ÜberblickCPU, Speicher, Netzwerk-I/ONetzwerk-PluginRRDtool-Plugin (Überblick)Generische Plugins (Überblick)Eigene Erweiterungen (Überblick)PostgreSQL ProzesseStatistiken von PostreSQL abfragenPerformance-Daten in RDBMS speichernÜber den TellerrandWisse, was deine Elefanten machenFolie 12

Plugin-Überblick Spezielle Lese-PluginsCPU, Speicher, Netzwerk-Schnittstellen Schreib- bzw. IO-PluginsNetzwerk-PluginRRDtool, RRDCacheD Generische PluginsSNMPtailPostgreSQLWisse, was deine Elefanten machenFolie 13

CPU, Speicher, Netzwerk-I/OSynopsisLoadPlugin "cpu"LoadPlugin "memory"LoadPlugin "interface"Wisse, was deine Elefanten machenFolie 14

CPU, Speicher, Netzwerk-I/OSynopsisLoadPlugin "cpu"LoadPlugin "memory"LoadPlugin "interface" Plugin interface Interface loInterface sit0IgnoreSelected true /Plugin Wisse, was deine Elefanten machenFolie 14

CPU, Speicher, Netzwerk-I/OWisse, was deine Elefanten machenFolie 15

CPU, Speicher, Netzwerk-I/OWisse, was deine Elefanten machenFolie 16

CPU, Speicher, Netzwerk-I/OWisse, was deine Elefanten machenFolie 17

Netzwerk-PluginBetriebsarten Daten versenden ( Client“)” Daten empfangen ( Server“)” Weiterleiten ( Proxy“)” Unicast ( Punkt-zu-Punkt“)” Multicast ( Punkt-zu-Gruppe“)” IPv4 und IPv6Ein Daemon für allesRolle des Daemon hängt von der Konfiguration ab.Wisse, was deine Elefanten machenFolie 18

Netzwerk-Plugin: UnicastWisse, was deine Elefanten machenFolie 19

Netzwerk-Plugin: MulticastWisse, was deine Elefanten machenFolie 20

Netzwerk-Plugin: Server/ClientSynopsis: ClientLoadPlugin "network" Plugin "network" Server "collectd0.musterfirma.de"Server "collectd1.musterfirma.de"Server "ff18::efc0:4a42" /Plugin Wisse, was deine Elefanten machenFolie 21

Netzwerk-Plugin: Server/ClientSynopsis: ServerLoadPlugin "network" Plugin "network" Listen "collectd0.musterfirma.de"Listen "ff18::efc0:4a42" /Plugin Wisse, was deine Elefanten machenFolie 22

Netzwerk-Plugin: ProxyWisse, was deine Elefanten machenFolie 23

Netzwerk-Plugin: ProxySynopsis: ProxyLoadPlugin "network" Plugin "network" Listen "collectgw.extern.musterfirma.de"Server "collectd1.intern.musterfirma.de"Forward true /Plugin Wisse, was deine Elefanten machenFolie 24

Netzwerk-PluginAuthentifizierung / Verschlüsselung (seit Version 4.7.0) Authentifizierung via HMAC-SHA-256 Verschlüsselung mit AES-256 (OFB)Wisse, was deine Elefanten machenFolie 25

Netzwerk-PluginAuthentifizierung / chtsakzeptiertakzeptiertnicht akzeptiertnicht nicht akzeptiertWisse, was deine Elefanten machenEncryptnicht möglichakzeptiertakzeptiertakzeptiertFolie 26

RRDtool-Plugin (Überblick) Schreibt Daten effizient in RRD-Dateien Caching Funktionalität nun in RRDtool als RRD Caching DaemonverfügbarSynopsisLoadPlugin "rrdtool" Plugin "rrdtool" DataDir "/var/lib/collectd/rrd" /Plugin Wisse, was deine Elefanten machenFolie 27

RRDtool-Plugin (Caching)Konfiguration Plugin "rrdtool" DataDir "/var/lib/collectd/rrd"CacheTimeout 3600CacheFlush 86400# 1 hour# 1 dayWritesPerSecond 30 /Plugin FLUSH ermöglicht dennoch die graphische Darstellung vonaktuellen DatenWisse, was deine Elefanten machenFolie 28

Generische Plugins (Überblick) Idee: Generische Ansätze, statt Speziallösungen Benutzerkonfiguration bestimmt das Verhalten Unterstützung für neue Geräte braucht i.d.R. keine neueVersion von collectd Beispiele: SNMP, tail, curl, DBI, PostgreSQLWisse, was deine Elefanten machenFolie 29

Eigene Erweiterungen (Überblick) collectd API: C, Perl, Python, Java Externe Programme mittels unixsock- oder exec-PluginWisse, was deine Elefanten machenFolie 30

Was ist collectd?Plugin-ÜberblickPostgreSQL ProzesseStatistiken von PostreSQL abfragenPerformance-Daten in RDBMS speichernÜber den TellerrandWisse, was deine Elefanten machenFolie 31

PostgreSQL Prozesse% ps ax grep postgres20177 ? S0:05 /usr/lib/postgresql/8.3/bin/postgres-D /var/lib/postgresql/8.3/main-c config file /etc/postgresql/8.3/main/postgresql.conf20183 ? Ss0:09 postgres: writer process20184 ? Ss0:05 postgres: wal writer process20185 ? Ss0:04 postgres: autovacuum launcher process20186 ? Ss0:13 postgres: stats collector process20312 ? Ss2:04 postgres: collectd mail 127.0.0.1(33027) idle Behandlung einer Client-Verbindung:postgres: user database host activityWisse, was deine Elefanten machenFolie 32

Das processes Plugin von collectd Das processes Plugin kann div. Informationen über einzelneProzesse (oder Gruppen)RSS- und VM-GrößeUser- und System-ZeitAnzahl Page-FaultsSchätzwerte zum I/O Auswahl entweder an Hand des Prozessnamens oder Regex aufKommandozeileWisse, was deine Elefanten machenFolie 33

Das processes Plugin: Konfigurationcollectd.conf Plugin "processes" ProcessMatch pg writer "postgres:.writer.process"ProcessMatch pg wal writer "postgres:.wal.writer.process"ProcessMatch pg autovacuum "postgres:.*autovacuum"ProcessMatch pg stats collector \"postgres:.stats.collector.process"# Datenbankverbindungen durch Benutzer ’user’ProcessMatch pg user mail "postgres:.user"# Datenbankverbindungen auf DB ’mail’ProcessMatch pg db mail "postgres:.[A-Za-z0-9] .mail" /Plugin (vor 5.0.1 durften Regexen kein Whitespace enthalten)Wisse, was deine Elefanten machenFolie 34

Was ist collectd?Plugin-ÜberblickPostgreSQL ProzesseStatistiken von PostreSQL abfragenDer PostgreSQL Statistik-SammlerDas postgresql Plugin von collectdPerformance-Daten in RDBMS speichernÜber den TellerrandWisse, was deine Elefanten machenFolie 36

Der PostgreSQL Statistik-Sammlerpostgresql.conf# Aktuell ausgeführtes Kommandotrack activities on# Tabellen- und Index-Zugrifftrack counts on# Benutzerdefinierte Funktionentrack functions none # none, pl, allAblegen der Statistiken, z.B. auf Flash-Speicher:stats temp directory ’/mnt/flash/pg stat tmp’Wisse, was deine Elefanten machenFolie 37

Sammeln der Statistiken Server Prozesse übermitteln Statistiken vor idle Reports werden vom Sammler minimal allePGSTAT STAT INTERVAL Millisekunden erstellt Während einer Transaktion wird ein Snapshot des Reportsverwendet siehe pg stat clear snapshot()Wisse, was deine Elefanten machenFolie 38

Abfrage der Statistiken Einige vordefinierte Viewspg stat bgwriterpg stat databasepg stat all indexespg statio all tablesu.v.m. (Tabelle 27.1 in Doku) alternativ: Funktionen zur Abfrage der einzelnen WerteWisse, was deine Elefanten machenFolie 39

Das postgresql Plugin von collectd Generisches Plugin, welches beliebige (numerische) Werte überSQL abfragen kann Standardmäßig werden diverse Werte vom Statistik-Sammlerabgefragt Konfiguration besteht aus zwei Teilen:SQL-Queries mit Spezifikation zur Interpretation der WerteDatenbankverbindungenWisse, was deine Elefanten machenFolie 40

Einschub: Namensschema von collectd jeder Datensatz hat einen eindeutigen IdentifierHostnamePlugin NamePlugin Instanz (optional)TypTyp Instanz (optional) hostname/plugin[-instanz]/typ[-instanz] Der Typ definiert, wie ein Datum interpretiert werden soll(angelehnt an RRDtools Datasource-Typen) Typen müssen vordefiniert sein (types.db(5)) Beispiel: server1.bsp.de/cpu-0/cpu-idleWisse, was deine Elefanten machenFolie 41

Das postgresql Plugin: Query-Definitioncollectd.conf Plugin postgresql Query disk usage Statement "SELECT pg database size( 1) AS size;"Param database Result Type pg db sizeValuesFrom "size" /Result /Query /Plugin Wisse, was deine Elefanten machenFolie 42

Das postgresql Plugin: DB-Definitioncollectd.conf Plugin postgresql Database mail Host "db.bsp.de"User "user"Password "geheim"Query disk usageQuery disk io /Database /Plugin Wisse, was deine Elefanten machenFolie 43

Was ist collectd?Plugin-ÜberblickPostgreSQL ProzesseStatistiken von PostreSQL abfragenPerformance-Daten in RDBMS speichernÜber den TellerrandWisse, was deine Elefanten machenFolie 44

Performance-Daten in RDBMS speichern Traditionell: Speichern in RRDtool (konstanter Speicherverbrauch,Konsolidierung, schlechte Skalierbarkeit) Speicherung in RDBMS ermöglicht komplexe Auswertung undbessere Skalierung Probleme:Struktur der Datenbank (Komplexität vs. unnötige Redundanz vs.Performance)Behandlung von alten Daten (Partitionierung?)Wisse, was deine Elefanten machenFolie 45

Was ist collectd?Plugin-ÜberblickPostgreSQL ProzesseStatistiken von PostreSQL abfragenPerformance-Daten in RDBMS speichernÜber den TellerrandWisse, was deine Elefanten machenFolie 46

Über den Tellerrand: Interaktion collectd-nagiosFragt Daten via unixsock-Plugin ab und erzeugt Nagios-kompatibleAusgabe exec-nagios.pxPerl-Skript welches Nagios-Plugins ausführt ( exec-Plugin) exec-munin.pxPerl-Skript welches Munin-Plugins ausführt ( exec-Plugin) gmond-PluginEmpfängt und verarbeitet Ganglia Multicast-PaketeWisse, was deine Elefanten machenFolie 47

Wisse, was deine Elefanten machenVielen Dank für die Aufmerksamkeit!Gibt es gconfde2011/Wisse, was deine Elefanten machenFolie 48

Wisse, was deine Elefanten machenKontakt:Sebastian tokkee“ Harl”teamix GmbH, Nürnberg [email protected] [email protected] — irc.freenode.net/#collectd — http://identi.ca/collectdArtikel zum Thema llectdWisse, was deine Elefanten machenFolie 49

OptionalWisse, was deine Elefanten machenFolie 50

SNMP-PluginAllgemeines Fragt Netzwerk-Zubehör via SNMP ab Generisch: Nicht für ein gestimmtes Gerät geschrieben Mehrere Geräte werden parallel abgefragtKonfiguration Data“-Blöcke” Host“-Blöcke”Wisse, was deine Elefanten machenFolie 50

SNMP-PluginSynopsis: Data-Block Plugin "snmp" Data "ifmib if octets64" Type "if octets"Table trueInstance "IF-MIB::ifName"Values "IF-MIB::ifHCInOctets" \"IF-MIB::ifHCOutOctets" /Data /Plugin Wisse, was deine Elefanten machenFolie 51

SNMP-PluginSynopsis: Host-Block Plugin "snmp" Host "switch0.intern.musterfirma.de" Address "10.0.42.2"Version 1Community "public"Collect "ifmib if octets64"Interval 60 /Host /Plugin Wisse, was deine Elefanten machenFolie 52

SNMP-Plugin: UsersWisse, was deine Elefanten machenFolie 53

SNMP-Plugin: USV-LastWisse, was deine Elefanten machenFolie 54

SNMP-Plugin: Cache-AlterWisse, was deine Elefanten machenFolie 55

tail-PluginAllgemeines Verfolgt Log-Dateien Extrahiert Werte oder zählt Ereignisse Selektion der Zeilen / Werte mit regulären Ausdrücken Verwendbar für MTAs, Web-Server, . . .Wisse, was deine Elefanten machenFolie 56

tail-PluginKonfiguration Plugin "tail" File "/var/log/exim4/mainlog" Instance "exim" Match Regex "S ([1-9][0-9]*)"DSType "CounterAdd"Type "ipt bytes"Instance "total" /Match /File /Plugin Wisse, was deine Elefanten machenFolie 57

tail-Plugin: Verbindungen von EximWisse, was deine Elefanten machenFolie 58

tail-Plugin: SSH Brute-Force-AttackeWisse, was deine Elefanten machenFolie 59

RRDCacheD-PluginAllgemeines Update-Prinzip des RRDtool-Plugins Eigenständiger Daemon Integration in RRDtool 1.4 Weitere Funktionen, z. B. Journaling Vorteil: Neustart von collectd ohne Cache-VerlustWisse, was deine Elefanten machenFolie 60

SuchbaumRRDCacheD-PluginGraphik c Florian octo“ Forster”Wisse, was deine Elefanten machenFolie 61

SuchbaumRRDCacheD-PluginGraphik c Florian octo“ Forster”Wisse, was deine Elefanten machenFolie 61

heD-PluginGraphik c Florian octo“ Forster”Wisse, was deine Elefanten machenFolie 61

date-RRDCacheD-PluginGraphik c Florian octo“ Forster”Wisse, was deine Elefanten machenFolie 61

Perl-PluginAllgemeines Integriert einen Perl-Interpreter(vergleichbar zu Apaches mod perl) Instanziierung und Syntax-Analyse nur einmal Exportiert die API( nicht nur Lese-Plugins möglich)Wisse, was deine Elefanten machenFolie 62

Perl-Plugin: Beispielpackage Collectd::Plugin::Magic;use Collectd qw( :all );sub magic read{my vl { plugin ’magic’,values [Magic- getCurrentLevel ()] };plugin dispatch values (’magic level’, vl);}plugin register (TYPE READ, ’magic’, ’magic read’);Wisse, was deine Elefanten machenFolie 63

unixsock-PluginAllgemeines Öffnet einen UNIX-Domain-Socket Kennt mehrere Befehle(z. B. PUTVAL, FLUSH, LISTVAL) Interaktion mit externen Programmen möglich collectdctl (ab Version 5.0, eta: dieses Jahr ;-)) cussh.pl: collectd UNIX socket shell“”Wisse, was deine Elefanten machenFolie 64

unixsock-Plugin: Beispiel- PUTVAL "testhost/magic/magic level" \interval 10 1179574444:42 - 0 SuccessWisse, was deine Elefanten machenFolie 65

exec-PluginAllgemeines Führt Programme aus Liest von deren Standard-Ausgabe Können über längere Perioden laufen(vgl. init)Wisse, was deine Elefanten machenFolie 66

exec-Plugin: Beispiel#!/bin/shINTVL {COLLECTD INTERVAL:-10}CHOST " {COLLECTD HOSTNAME:-localhost}"IDENT " CHOST/magic/magic level"while sleep INTVLdoVALUE ‘magic --level‘echo "PUTVAL \" IDENT\" interval INTVL N: VALUE"doneWisse, was deine Elefanten machenFolie 67

Java-PluginAllgemeines Integriert eine Java Virtual Maschine“ (JVM)” Exportiert die API( nicht nur Lese-Plugins möglich) Prinzipielle Ähnlichkeit zum Perl-PluginWisse, was deine Elefanten machenFolie 68

Java-Plugin: Beispielimport org.collectd.api.Collectd;import org.collectd.api.CollectdReadInterface;public class MagicPluginimplements CollectdReadInterface{public int read ();/* Callback-Funktion */public MagicPlugin (); /* Konstruktor */}Wisse, was deine Elefanten machenFolie 69

Java-Plugin: Beispielpublic int read (){ValueList vl new ValueList ();vl.setHost ("testhost");vl.setPlugin ("magic");vl.setType ("magic level");vl.addValue (Magic.getCurrentLevel ());return (Collectd.dispatchValues (vl));}Wisse, was deine Elefanten machenFolie 70

Java-Plugin: Beispielpublic MagicPlugin (){/* Callback-Funktion anmelden */Collectd.registerRead ("MagicPlugin", this);}Wisse, was deine Elefanten machenFolie 71

Erweiterungen: Zusammenfassung collectd API nutzenC, Perl, Python und Java möglichWisse, was deine Elefanten machenFolie 72

Erweiterungen: Zusammenfassung collectd API nutzenC, Perl, Python und Java möglich Externe Programme erweiternunixsock-Plugin ermöglicht KommunikationWisse, was deine Elefanten machenFolie 72

Erweiterungen: Zusammenfassung collectd API nutzenC, Perl, Python und Java möglich Externe Programme erweiternunixsock-Plugin ermöglicht Kommunikation Eigenes Programm / Skript schreiben exec-PluginWisse, was deine Elefanten machenFolie 72

Über den Tellerrand: Zubehör snmp-probe-host.pxErzeugt semi-automatisch Host / -Blöcke für das SNMP-Plugin jcollectdJava-Implementierung des Netzwerk-Protokolls ( JMX) kcollectdKDE-Programm zur Near-Realtime-Anzeige von Graphen Perl, Ruby, Python Module und C-Bibliothek für dieKommunikation mit dem unixsock-Plugin verfügbarWisse, was deine Elefanten machenFolie 73

Wisse, was deine Elefanten machen PostgreSQL Performance-Analyse mit collectd Sebastian ” tokkee“