Skip to content

PGCenter - PostgreSQL Datenbank Statistiken und Leistungsdaten auf einen Blick

PostgreSQL ist die Tage in Version 9.5 erschienen (siehe Artikel). 
Egal ob neues oder altes DB System, eine Analyse der Performance und Auswertung von Zugriffszeiten- oder daten, usw. ist bei vielen Anwendungsszenarien unerlässlich.

PGCenter

Eine Auswertungsmöglichkeit bringt PostgreSQL selbst mit. Unter dem Prefix "pg_stats" stehen verschiedene Mechanismen für Auswertungen zur Verfügung.

Weiter geht PGCenter. Es bündelt diese Auswertungen in einer Ausgabe, die der Prozessüberwachung top ähnelt. Dies sorgt für eine schnelle Übersicht und bringt zusätzlich die Möglichkeit selbst Aktionen auszuführen.

Die Hauptfunktionen von PGCenter werden wie psql Befehle ausgeführt und bieten momentan folgende Möglichkeiten:

postgresql

  • top-like interface
  • use same connection options as with psql
  • show current system load and cpu/memory/swap usage
  • show input/output statistics for devices and partitions like iostat
  • show network traffic statistics for network interfaces like nicstat
  • show current postgres state (connections state, longest transaction, autovacuum)
  • show statistics about tables, indexes, functions, activity, replication
  • show pg_stat_statements statistics: calls, rows
  • show pg_stat_statements statistics: cpu timings, io timings
  • show pg_stat_statements statistics: blks i/o (hits, reads, dirtied, written, temp)
  • show relations sizes info
  • configuration files editor and postgres reload
  • log files viewing (full log or tail)
  • cancel/terminate queries or processes by pid or whole group
  • query reporting

Installation von PGCenter Statistik

Referenzsystem ist ein Ubuntu Server 14.04. Weitere Installationsarten werden auf der Homepage beschrieben 

sudo add-apt-repository ppa:lesovsky/pgcenter
sudo apt-get update
sudo apt-get install pgcenter

Benutzung von PGCenter

Wie bereits oben erwähnt ist die Nutzung von PGCenter an psql Befehle angelehnt. Damit alle Daten ausgewertet werden können, muss ein superuser account wie "postgres" verwendet werden, ansonsten kann es zu Einschränkungen kommen

Eine Möglichkeit die PGCenter Konsole zu starten wäre beispielsweise

sudo -u postgres pgcenter

Hier wird das Tool direkt als Benutzer Postgres gestartet.

pgcenterpgcenter

Befehle für PGCenter

Ein interaktive Bedienung erfolgt mit folgenden Befehlen (Hilfe mit F1).

 

general actions:
  a,d,i,f,r       mode: 'a' activity, 'd' databases, 'i' indexes, 'f' functions, 'r' replication,
  s,t,T           's' sizes, 't' tables, 'T' tables IO,
  x,X,c,v         'x' stmt timings, 'X' stmt general, 'c' stmt IO, 'v' stmt temp.
  Left,Right,/    'Left,Right' change column sort, '/' change sort desc/asc.
  C,E,R           config: 'C' show config, 'E' edit configs, 'R' reload config.
  p                       'p' start psql session.
  l               'l' open log file with pager.
  N,Ctrl+D,W      'N' add new connection, Ctrl+D close current connection, 'W' write connections info.
  1..8            switch between consoles.
subscreen actions:
  B,I,L           'B' iostat, 'I' nicstat, 'L' logtail.
activity actions:
  -,_             '-' cancel backend by pid, '_' terminate backend by pid.
  >,.             '>' set new mask, '.' show current mask.
  Del,Shift+Del   'Del' cancel backend group using mask, 'Shift+Del' terminate backend group using mask.
  A               change activity age threshold.
  G               get report about query using hash.

other actions:
  , Q             ',' show system tables on/off, 'Q' reset postgresql statistics counters.
  z,Z             'z' set refresh interval, 'Z' change color scheme.
  space           pause program execution.
  F1              show help screen.
  q               quit.

Fazit

PGCenter bindet sich gut in die Umgebung ein und liefert viele wichtige Werte rund um einen PostgreSQL Datenbankbetrieb. Anwender, welche mit "top" arbeiten, werden pgcenter mögen.

https://github.com/lesovsky/pgcenter

Linux Script - Postfix Mail Server Logauswertung mit dem Postfix Log Entry Summarizer

Wer sich schon einmal mit MTAs (Mail Transfer Agent) auseinandergesetzt hat, dem wird Postfix sicherlich ein Begriff sein. Postfix zählt zu den bekanntesten Mailservern im Linuxbereich, ist schnell und recht einfach zu konfigurieren, eine gewisse Grundkenntnis vorausgesetzt. Für einen sicheren Mailverkehr möchte ich hier noch einmal auf das Crypto Handbuch verweisen.

Letzte Woche war ja ein wenig Exchange Server im Programm, heute soll es aber um eine Auswertung des Mailverkehrs, welcher täglich über einen Postfix Server rauscht, gehen. 

Postfix Log Entry Summarizer

Hierfür gibt es sicherlich einige Monitoring Tools, eines davon ist Pflogsumm (Postfix Log Entry Summarizer), welches eine ausführliche Auswertung bietet, ohne, dass der Anwender viel konfigurieren muss.

Unter Ubuntu ist dieses Tool recht schnell konfiguriert und im Optimalfall erhaltet ihr am Ende eine Übersicht aller Nachrichten, egal ob gesendet, empfangen oder geblockt. Auch der Traffic, die Menge oder die Mailadressen werden ausgewertet. Bis zu dieser Statistik ist aber noch ein wenig Vorarbeit zu leisten.

Pflogsumm installieren (Ubuntu)

sudo apt-get install pflogsumm 

Postfix Log Entry Summarizer konfigurieren

Ihr habt nun die Möglichkeit das Tool direkt aufzurufen und euch eine Liveauswertung geben zu lassen, um zu sehen was gerade auf dem Mailserver passiert. Pflogsumm macht nichts anderes, als auf die Logfiles des Postfix Server zurückzugreifen und diese auszuwerten. Mit einem Einzeiler lässt sich so eine Statistik in eine Datei schreiben oder per Mail versenden.

sudo pflogsumm -u 5 -h 5 --problems_first -d today /var/log/mail.log >> test oder

sudo pflogsumm -u 5 -h 5 --problems_first -d today /var/log/mail.log | mail -s "Postfix Mail Report" info@example.com

Vorarbeit zur regelmäßigen Postfix Analyse

Eine IST Auswertung mag zwar interessant sein, die regelmäßige Auswertung der letzten Tage ist jedoch um einiges interessanter. Realisierbar ist dies mit den Logs des Vortages, diese werden Mittels logrotate gepackt und können danach ausgewertet werden. Zunächst muss logrotate angepasst werden, damit täglich neue Logs geschrieben werden.

sudo nano /etc/logrotate.conf

/var/log/mail.log {

missingok

daily

rotate 7

create

compress

start 0

}
sudo nano /etc/logrotate.d/rsyslog

#/var/log/mail.log

Wenn gewünscht ist, dass die Logrotation pünktlich zu einer gewissen Uhrzeit laufen soll, sagen wir um 2 Uhr Nachts , ist es nötig /etc/crontab zu editieren und dort die Laufzeit anzupassen.

sudo nano /etc/crontab 

/etc/cron.daily anzupassen 0 2 * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Skript zur Postfix Analyse 

Nun können wir unser eigenes Script zusammen stellen, welches am Schluss eine Auswertung versendet.

 sudo nano mailstats.sh

#!/bin/bash

#

###############

# mailstats   #

###############


PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


# Log Archive entpacken

gunzip /var/log/mail.log.1.gz


#Temporaere Datei anlegen

MAIL=/tmp/mailstats


#Etwas Text zum Anfang

echo "Taeglicher Mail Stats Report, erstellt am $(date "+%H:%M %d.%m.%y")" > $MAIL

echo "Mail Server Aktivitaeten der letzten 24h" >> $MAIL


#Pflogsumm aufrufen

/usr/sbin/pflogsumm --problems_first /var/log/mail.log.1 >> $MAIL


# Versenden der Auswertung


cat /tmp/mailstats | mail -s "Postfix Report $(date --date='yesterday')" stats@example.com


#Archiv wieder packen, damit alles seine Ordnung hat

gzip /var/log/mail.log.1

Insgesamt eine leichte Übung. Das fertige Skript noch mit "chmod +x" ausführbar machen und am besten via "crontab -e" zu einem gewünschten Zeitpunkt ausführen.

Am Ende solltet ihr jeden Tag per Mail eine ausführliche Zusammenfassung alles E-Mails Statistiken erhalten. 

Grand Totals

------------

messages

   4321   received

   1234   delivered

      5   forwarded

      1   deferred  (3  deferrals)

      0   bounced

      0   rejected (0%)

      0   reject warnings

      0   held

      0   discarded (0%)

   1234m  bytes received

   1234m  bytes delivered

    123   senders

    321   sending hosts/domains

   1234   recipients

    123   recipient hosts/domains

message deferral detail

-----------------------

  smtp (total: 3)

         3   invalid sender domain 'example.de' (misconfigured ...

message bounce detail (by relay): none

message reject detail: none

message reject warning detail: none

message hold detail: none

message discard detail: none

smtp delivery failures: none

Warnings: none

Fatal Errors: none

Panics: none

Master daemon messages: none

Per-Hour Traffic Summary

------------------------

    time          received  delivered   deferred    bounced     rejected

    --------------------------------------------------------------------

    0000-0100           0          0          0          0          0 

    0100-0200          21        321        0          0          0 

    0200-0300         321        321          1          0          0 

    0300-0400           7          7          1          0          0 

    0400-0500           3          5          1          0          0 

    0500-0600           4          5          1          0          0 

    0600-0700         133        217          1          0          0 

    0700-0800          36         31          0          0          0 

    0800-0900         321        321          1          0          0 

    0900-1000         123        123          1          0          0 

    1000-1100        1234       1234          1          0          0 

.....

...

Tweetping - Tweets weltweit in Echtzeit

Könnt ihr euch noch erinnern, vor drei Jahren hatte ich hier mit "A world of tweets" bereits eine Weltkarte, die mehr oder weniger live das weltweite Tweetaufkommen visualisiert. Mit Tweetping gibt es nun eine würdige Alternative in dunkelblau mit Blitzlichtgewitter.

Neben dem Aufsplitten in einzelne Kontinente, wird bei Tweetping sogar der aktuelle Hashtag und die Anzahl der Wörter angezeigt.Umgesetzt wurde das Projekt mit Nodejs, Socket.io, Processing.js und Backbone.js. via

Tweetping