Benutzer-Werkzeuge

Webseiten-Werkzeuge


nosql:flume_erste_schritte

Apache Flume im Überblick

Mit Apache Flume können Log Events eingesammelt und zentral auf dem HDFS abgelegt werden.

  • Eine Art „syslog“ Demon
  • Übernimmt den Transport der Log Daten
  • Eine „Source“ ließt die Quelle ein
  • Ein „Channel“ puffert zwischen
  • Ein „Sink“ liefert die Daten ab / schreibt die Daten z.B. auf das HDFS

Übersicht:

 Apache Flume Architektur

Installation unter Linux auf einer Datenbank Umgebung

Da die Logs der Datenbanken auf dem Host sollen eingesammelt werden sollen, wird auf dem Host Flume installiert. Weitere Libraries sind nicht notwendig.

Download der Software : http://flume.apache.org/download.html und prüfen der md5 Summe:

http://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist/flume/1.5.0.1/apache-flume-1.5.0.1-bin.tar.gz 
 
md5sum apache-flume-1.5.0.1-bin.tar.gz
fa43105db822ce045f885a5ebc0f869e  apache-flume-1.5.0.1-bin.tar.gz
 
tar xfvz apache-flume-1.5.0.1-bin.tar.gz
 
mv apache-flume-1.5.0.1-bin /usr/lib/apache-flume-1.5.0.1-bin
 
ln -s /usr/lib/apache-flume-1.5.0.1-bin  /usr/lib/flume-ng
 
cd /usr/lib/flume-ng/bin
 
# Testen ob flume sich starten läßt
./flume-ng version
Flume 1.5.0.1
 
 
#Prüfen ob auch ein "echtes" Java 7 ist installiert!
 
java -version
 
java version "1.7.0_67"
 
#falls nicht installieren und mit alternatives bekannt geben!

Aufgabe - Lesen des Listener Logs einer Oracle 11g Datenbank

Architektur

Struktur der XML Log Datei im DIAG Verzeichnis

zum Beispiel dieser typische Eintrag unter $ORACLE_BASE/diag/tnslsnr/<your-server>/listener/alert/log.xml:

<msg time='2014-09-06T11:21:44.179+02:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='JUPITER'
 host_addr='127.0.0.1'>
 <txt>06-SEP-2014 11:21:44 * (CONNECT_DATA=(SID=GPI)(CID=(PROGRAM=null)(HOST=__jdbc__)(USER=null))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.10.1)(PORT=49831)) * establish * GPI * 0
 </txt>
</msg>

Da im Listener.log auch viele interne Vorgänge der Datenbanken, speziell im Cluster Umfeld, protokolliert werden, sollen bereits beim Lesen bestimmte Events ausgefiltert werden. Dazu muss dann später eine eigene „Source“ definiert werden.

Wir lesen die Logs direkt auf dem Oracle Server aus und schreiben die Einträge in den Logs über eine eigenen Agent auf dem HDFS Node 1 in das HDFS.

Übersicht:

 Auslesen Oracle Listener Log mit Apache Fume

Der Agent auf dem DB Server liest als Source die XML Log Datei des Listeners ein.

Ein Channel im Memory sorgt für die Flusssteuerung, ein Avro Skink serialisert die Daten und versendet diese Daten an den Agent auf dem HDFS Knoten.

Der Agent auf dem HDFS Knoten hat eine Source die wiederum die serialisierten Daten im Afro Format empfangen kann, einen Channel im Memory und einen Skink vom Typ HDFS. Damit werden dann die Daten in das HDFS geschrieben.

Voraussetzung

Flume ist installiert, Verzeichnis für die Konfiguration ist bekannt.

/usr/lib/flume-ng/bin/flume-ng version
 
ls - /usr/lib/flume-ng/conf

Test 1 - Nur das Log auslesen und 1zu1 in das HDFS übertragen

Im ersten Test werden die Log Daten einfach in das HDFS geschrieben, um die Grundarchitektur und Konfiguration besser zu verstehen und um die Umgebung zu testen.

Die Daten werden auf dem Oracle Server gelesen und auf den HDFS übertragen, dort übernimmt ein weitere Agent die Daten und schreibt das in das HDFS.

Auf dem HDFS Node 1 - der OracleBigData Lite

Es wird ein Agent angelegt der Daten im Avro Format serialisiert annimmt und auf dann einfach auf das HDFS schreibt.

Dazu wird eine Konfiguration erstellt und der Agent gestartet:

vi /etc/flume-ng/conf/agent2-conf.properties
 
# The configuration file needs to define the sources, the channels and the sinks
# Sources, channels and sinks are defined per agent, in this case called agent2
 
agent2.sources  = OraLogFiles
agent2.channels = memoryChannel
agent2.sinks    = hdfsSink
 
# Channel type avro
 
agent2.sources.OraLogFiles.type = avro
agent2.sources.OraLogFiles.bind = 10.10.10.12
agent2.sources.OraLogFiles.port = 44444
 
 
# The channel can be defined as follows
 
agent2.sources.OraLogFiles.channels = memoryChannel
 
 
# Each sinks type must be defined
agent2.sinks.hdfsSink.type = hdfs
agent2.sinks.hdfsSink.hdfs.path = hdfs://bigdatalite.localdomain:8020/user/oracle/gpi
agent2.sinks.hdfsSink.hdfs.filePrefix = OraLogs-
agent2.sinks.hdfsSink.hdfs.rollCount = 1000
agent2.sinks.hdfsSink.hdfs.batchSize = 10
 
#Specify the channel the sink should use
agent2.sinks.hdfsSink.channel = memoryChannel
 
# Each channels type is defined
agent2.channels.memoryChannel.type = memory
agent2.channels.memoryChannel.capacity = 100
 
#
# starten
#
 
flume-ng agent -n agent2 -c conf -f /etc/flume-ng/conf/agent2-conf.properties
Auf dem Oracle Server

Eine einfache Agent Konfiguration für eine Data Source vom Type „exec“ erstellen (mit dem Typ exec wird ein OS Kommando als Datenquelle angegeben) und als Sink den Agent auf dem Hadoop Node angeben:

# Testen ob der Sink auf dem HDFS Node überhaupt erreichbar ist
 
telnet bigdatalite.localdomain 44444
 
Trying 10.10.10.12...
Connected to bigdatalite.localdomain.
Escape character is '^]'.
 
#OK!
 
 
#Konfiguration anlegen
 
vi /usr/lib/flume-ng/conf/agent-conf.properties
 
# The configuration file needs to define the sources, the channels and the sinks
# Sources, channels and sinks are defined per agent, in this case called agent2
 
agent.sources  = OraListener
agent.channels = memoryChannel
agent.sinks    = avro-forward
 
# For each one of the sources, the type is defined
 
# in this example we use a command from the os
# Channel type exec
 
agent.sources.OraListener.type = exec
agent.sources.OraListener.command = tail -F /opt/oracle/diag/tnslsnr/oradb12c01/listener/alert/log.xml
 
# The channel can be defined as follows
agent.sources.OraListener.channels = memoryChannel
 
#sink
agent.sinks.avro-forward.type = avro
agent.sinks.avro-forward.hostname = 10.10.10.12
agent.sinks.avro-forward.port = 44444
 
#Specify the channel the sink should use
agent.sinks.avro-forward.channel = memoryChannel
 
# Each channels type is defined
agent.channels.memoryChannel.type = memory
agent.channels.memoryChannel.capacity = 100
 
#
# starten
#
 
export JAVA_HOME=/usr/java/jdk1.7.0_67
 
/usr/lib/flume-ng/bin/flume-ng agent -n agent -c /usr/lib/flume-ng/conf -f /usr/lib/flume-ng/conf/agent-conf.properties
 
# einen Eintrag in das Listener Log erzeugen
 
$ORACLE_HOME/bin/lsnrctl status

Auf dem HDFS Server:

#
# Logs auf dem HDFS kontrollieren:
#
 
hdfs dfs -ls /user/oracle/gpi/
 
hdfs dfs -cat /user/oracle/gpi/OraLogs-.1410615198350
 
SEQ!org.apache.hadoop.io.LongWritable"org.apache.hadoop.io.BytesWritabl]dñ´AZ¤¯¨ QHo9eU </txtHo9eV</msg>Ho9eWK<msg time='2014-09-13T15:34:58.686+02:00' org_id='oracle' comp_id='tnslsnr'Ho9eW= type='UNKNOWN' level='16' host_id='oradb12c01.pipperr.local'Ho9eW host_addr='10.10.10.110'>Ho9eX= <txt>WARNING: Subscription for node down event still pendinHo9eX </txtHo9eX</msg>Ho9eXK"
 
# Daten sind angekommen!

Erweitertes Beispiel

Im nächsten Schritt wird das Log vom Flume Agent mit einer eigenen Filter Source gelesen und übertragen.

Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
nosql/flume_erste_schritte.txt · Zuletzt geändert: 2014/11/16 16:26 von Gunther Pippèrr