IPs bei Google Analytics anonymisieren

Januar 24

Schon lange ist Google aufgrund des Datenschutzes von Google Analytics in der Kritik. Es war auch die Sprache davon, dass die Nutzung ohne ausdrückliche Zustimmung des Besuchers rechtswidrig ist.

Doch für viele Website-Betreiber und somit auch für mich sind derartige Analysen ziemlich wichtig und ein Opt-In-Verfahren wäre nicht nur umständlich, sondern hinderlich bei der Datenerhebung. Ein Datenschutzhinweis beispielsweise im Impressum sollte wohl Pflicht sein.

Beim Herumsurfen habe ich entdeckt, dass Google inzwischen auch die Möglichkeit bietet, dass die IP-Adressen der Nutzer anonymisiert werden, indem der letzte IP-Block entfernt wird. Somit ist keine eindeutige Identifizierung mehr möglich und es können trotzdem noch Daten zur Analyse erhoben werden.

Dafür wird der nachfolgende Code eingebunden:

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-396223-2'])
    _gaq.push(['_gat._anonymizeIp']);
    _gaq.push(['_trackPageview']);
    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>

Neu ist dabei die Zeile mit _gaq.push(['_gat._anonymizeIp']);, welche für die Anonymisierung sorgt. Weiteres dazu und auch den Code für die Nutzung des älteren Codes gibt es auf http://code.google.com/intl/de-DE/apis/analytics/docs/gaJS/gaJSApi_gat.html#_gat._anonymizeIp

Auf dieser Seite werden die IPs nur noch anonymisiert übertragen. Längerfristig wird auch ein Wechsel auf Piwik in Betracht gezogen.


Monitoring - Teil 2: Sensorinformationen auslesen

Dezember 07

Nachdem im ersten Teil das Projekt und die damit verbundenen Herausforderungen bereits erklärt wurden, geht es in diesem Teil schon direkt los. In diesem Artikel beschreibe ich, wie die Sensordaten in die WMI übermittelt werden und wie diese anschließend mittels PHP-Script in die Datenbank geschrieben werden können. Alternativ ließe sich das sicher auch mit anderen Mitteln lösen, aber die PHP-Lösung funktioniert auf jeden Fall auch gut.

 

Teil 2: Systemdaten auslesen

Da sich in meinem Testsystem eine aquastream XT Ultra befindet, welche auch die Wassertemperatur auslesen kann, nutze ich zusätzlich zu AIDA64 eine zusätzliche Datenquelle. Über die Software aquasuite kann im Reiter „XML & Logdaten“ die Protokollierung und XML-Ausgabe eingestellt werden. In gewünschten Abständen wird dabei unter anderem die Wassertemperatur in der XML-Datei abgespeichert. Bei AIDA64 Extreme Edition (ehem. EVEREST Ultimate Edition) wird im Menüpunkt „Externe Applikationen“ der Einstellungen eingestellt, dass die Sensordaten in die WMI geschrieben werden. Im Menüpunkt „Updatefrequenz“ sollte für die Externe Applikationen auch ein relativ geringer Wert (z. B. 10 Sekunden) eingestellt sein, damit bei der Ausführung des Ausleseprozesses auch aktuelle Daten gespeichert werden.

Damit ist die Grundlage geschaffen, um überhaupt die Daten auslesen zu können. Als nächstes wird eine php-Datei erstellt, welche den Namen readdata.php erhalten hat. Für das Ermitteln der Daten habe ich zwei Funktionen angelegt.

    function getSensorAquasuite(){
        $xml = simplexml_load_file("aquasuite.xml");
        $data[] = array('name' => 'TemperatureSensorWater','value' => $xml->aquastreamXtLogData->TemperatureSensorWater."");
        
        return $data; 
    }

Die Funktion getSensorAquasuite() liest die aquasuite.xml ein, welche die Wassertemperatur enthält, und schreibt den Wert von TemperatureSensorWater in ein Array, welches anschließend zurückgegeben wird. Ein Array aus dem Grunde, damit später auch ggf. weitere Werte der Aquasuite als Sensordaten übermittelt werden können ohne außerhalb der Funktion Änderungen vornehmen zu müssen.

Doch das Interessante dürfte wohl die WMI sein. Was es damit genau auf sich hat, werde ich noch in einem separaten Artikel ausführlich erklären. In diesem Falle stellen wir uns einfach vor als wäre es eine Art Datenbank, welche die Temperaturdaten für uns parat hält. Der Code zum Auslesen sieht wie folgt aus:

    function getSensorAIDA64(){
        $wmi = new COM("winmgmts://localhost/root/WMI");
        $sensorwerte = $wmi->ExecQuery("Select * from AIDA64_SensorValues");
        foreach ( $sensorwerte as $wert ){
            $data[] = array('name' => $wert->ID,'value' => $wert->Value);
        }
        
        return $data;
    }

Zuerst wird OLE-kompatibles COM-Objekt erzeugt (siehe http://de3.php.net/manual/de/class.com.php), mit welche auf die WMI zugegriffen wird. Anschließend werden die Daten von der Klasse AIDA64_SensorValues ausgelesen und in einer Schleife in ein Array gespeichert und anschließend zurückgegeben. Außerhalb jeglicher Funktion werden bei mir nun die Daten aufgerufen und an die Funktion writeData() weitergeleitet.

    include "config.inc";
    $data['time'] = date('Y-m-d H:i').':00';
    $data['sensor'] = getSensorAquasuite();
    $data['sensor'] = array_merge($data['sensor'],getSensorAIDA64());
    $data['sensor'][] = getCPULoad();	
    writeData($data);

Die Ausgabe von $data sieht gekürzt wie folgt aus:

Array
(
    [time] => 2010-10-03 20:27:00
    [sensor] => Array
        (
            [0] => Array
                (
                    [name] => TemperatureSensorWater
                    [value] => 38.5
                )
            [1] => Array
                (
                    [name] => SUSEDMEM
                    [value] => 2315
                )
            [2] => Array
                (
                    [name] => TCC-1-4
                    [value] => 44
                )
            [3] => Array
                (
                    [name] => SUPTIME
                    [value] => 03:48:46
                )
            [4] => Array
                (
                    [name] => THDD3
                    [value] => 33
                )
)

Die Verwertung der Daten wird dann im nächsten Teil erklärt.

//Update:
Nachdem EVEREST durch AIDA64 abgelöst wurde, habe ich auch die Funktionen entsprechend angepasst. Wer noch EVEREST nutzt, der kann die Daten weiterhin aus EVEREST_SensorValues auslesen, Nutzer von AIDA64 verwenden hierfür AIDA64_SensorValues

Tags:

Monitoring - Teil 1

Oktober 09

Hin und wieder kommen mir einige etwas andere Projekte als Homepages in den Sinn, welche etwas Entwicklungszeit Wert sind. Da diese Ansätze zumindest nicht im Großteil der Literatur wiederzufinden sind (und damit auf der Seite auch mal etwas Content kommt) dokumentiere ich die Entwicklung auf meiner Homepage.

Es soll kein komplettes Tutorial werden, sondern vielmehr für andere Entwickler als Inspiration und eventuell kleine Hilfestellung dienen. Daher sind Programmiererkenntnisse auf jeden Fall notwendig; und auch den vollständigen Code behalte ich lieber für mich. Im ersten Teil meines Projekttagebuchs stelle ich zunächst das Vorhaben und die damit verbundene Problematiken vor.

 

Teil 1: Die Idee

Eines meiner Projekte ist ein auf Windows laufendes, webbasiertes Monitoring System. Dieses System liest aktuelle Systemdaten, in meinem Fall Temperaturen, CPU-Last oder auch dem freien Arbeitsspeicher aus, schreibt die Werte regelmäßig in die Datenbank und gibt die Daten grafisch im Webbrowser aus. Somit kann auch von Außerhalb der Systemstatus eingesehen werden. Zudem sollen die aktuellen Daten auch auf dem Desktop angezeigt werden. Da meine Stärke nun mal bei PHP liegt, habe ich auch eben diese Entwicklungssprache für dieses Vorhaben ausgewählt. Bei den Anforderungen gibt es jedoch schon direkt mehrere „Probleme“:

  1. Wie lassen sich die Daten überhaupt ermitteln?
  2. Wie können die Werte in regelmäßigen Abständen mittels PHP-Script in die Datenbank geschrieben werden?
  3. Wie können die Daten grafisch ausgegeben werden
  4. Wie erfolgt die Anzeige auf dem Desktop?

Die Fragen werden in den nächsten Teilen nach und nach beantwortet.

 

Verwendetes System

In diesem Falle ist ein Windows-Betriebssystem (Windows ME oder höher) erforderlich, die Realisierung erfolgt auf einem Windows 7-Rechner. Für die programmiertechnische Umsetzung mit PHP ist ein Apache Webserver mit PHP und einer Datenbank (z. B. MySQL) notwendig. Die Ermittlung der Daten erfolgt übe die WMI (Windows Management Instrumentation). Jedoch lassen sich aktuelle Temperaturen damit nicht immer ohne weiteres auslesen. Aus diesem Grunde war für mich die Nutzung der kostenpflichtigen Software EVEREST Ultimate Edition von Lavalys unumgänglich. Die Software kann die Daten regelmäßig in die WMI-Speichern. Die Corporate Edition soll wohl auch eine Anbindung an SQL-Datenbanken bieten, kostet jedoch (da mindestens fünf Lizenzen gekauft werden müssen) auch etwas mehr.

Tags:

Kategorien

Kalender

Februar 2012
Mo Di Mi Do Fr Sa So
« Jan 2012   Mär 2012 »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        

Valid XHTML 1.0!
Valid CSS!

XING