Peter Roßbach Systemarchitekt. Logging Best Practice formulieren, ausgeben und analysieren



Ähnliche Dokumente
Nuremberg, The Truth is in the Logs

Feedback aus der Produktion Ein Blick in den DevOps-Baukasten

Florian Hopf elasticsearch.

Florian Hopf elasticsearch. Bern

JMeter & ELK. Search Meetup Jan. 2015

Zentralisiertes Log Management

MODERNES LOGGING DATENSAMMELN OHNE REUE. Bert Radke Marco Grunert T-Systems Multimedia Solutions GmbH

DEPLOYMENTS MIT DOCKER. Created by Wojciech Pietrzak

Logging richtig gemacht!

Validiert das RTF-Template auf syntaktische Fehler und gibt Hinweis auf Zeilennummer in der RTF-Datei. der eingebetteten XML-Daten

TELEMETRIE EINER ANWENDUNG

Umsetzung von BI-Lösungen mit Unterstützung einer Suchmaschine. TDWI Stuttgart Tobias Kraft, exensio GmbH

Application Performance Management. Auch eine Frage des Netzwerkes?

Nutzung von Log4J und Commons Logging

Abschlussarbeiten für StudentInnen

Android-Testautomatisierung mit Robotium

Unified Communication Client Installation Guide

Agenda. Anwendungsfälle. Integration in Java

Tanuki Service Wrapper 101. JVM Verwaltung mit der Community Edition. Alexander Pacnik Karlsruhe,

Auf einen Blick. 1 Einführung Die Grundlagen Praxis 1 - das Kassenbuch. (zentraler CouchDB-Server) 139

Indizierungs- und Suchlogs. Version 2015

Scala kann auch faul sein

Wiederholung: Beginn

Xesar. Die vielfältige Sicherheitslösung

Fachbereich Medienproduktion

Fragen Arthur Zaczek. Apr 2015

Weblogic Server: Administration für Umsteiger

Aus unserer Projekt- und Schulungserfahrung Oracle TechNet

Einleitung. Funktion. Panzenböck Phillipp. Download Installation. Testen. Konfiguration

Systemmanagement mit Puppet und Foreman

1 WEB ANALYTICS: PROFESSIONELLE WEB-ANALYSEN UND REPORTING FÜR IHR ONLINE MARKETING.

1 Einführung Die Grundlagen Praxis 1 das Kassenbuch (zentraler CouchDB-Server) Praxis 2 das Kassenbuch als CouchApp...

Mobiles SAP für Entscheider. Permanente Verfügbarkeit der aktuellen Unternehmenskennzahlen durch den mobilen Zugriff auf SAP ERP.

XINDICE. The Apache XML Project Name: J acqueline Langhorst blackyuriko@hotmail.de

Besprechung Übung 1 & Vorstellung Übung 2

Ergebnisse. Umfrage Kurz-Statistiken Umfrage 'Feedback und Entertain 2.0'

Elasticsearch aus OPS-Sicht Teil1. Markus Rodi Karlsruhe,

Infrastruktur entwickeln mit Chef

DevOps bei den ID Build-Automatisierung statt Silo-Betrieb

Internetanbindung von Datenbanken

Löschen eines erkannten aber noch nicht konfigurierten Laufwerks

MOBILE ON POWER MACHEN SIE IHRE ANWENDUNGEN MOBIL?!

Android VPN. Am Beispiel eines Netzwerktunnels für das Domain Name System (DNS) 1 Andiodine - Android DNS-VPN

Konfiguration von Fabasoft Mindbreeze Enterprise für IBM Lotus

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de (c) Michael Behrendt -

Albert Dengg. Graz,

Persona-SVS e-sync GUI/Client Installation

LogApp - Security Information und Event Management leicht gemacht!

Konzept Projekt Lisa

Datenabgleich. Meine Welt auf einen Blick erleben.

Nagios im Novellumfeld

Alarmbilder von Bildquellen per empfangen

Big Data Informationen neu gelebt

MO 27. Aug. 2007, 17:00 UHR JAVA FRAMEWORKS TIPPS VON PROFI-GÄRTNERN GEGEN WILDWUCHS

Tomcat Konfiguration und Administration

Infrastructure Analytics mit idh logging Framework ILF

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Programmers Manual Geodaten Ver. 2.0

Bewusstkaufen.at XML Produkt Importschnittstelle für Händler

GATE General Architecture for Text Engineering. Alexander Hein & Erik Dießler (VL Text Analytics )

Herstellung eines SIP Einsatz Package Handler

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

AJAX DRUPAL 7 AJAX FRAMEWORK. Was ist das Ajax Framework? Ein typischer Ablauf eines Ajax Requests Die Bestandteile des Ajax Frameworks.

Mapbender3 Workshop. Christian Wygoda. FOSSGIS Dessau 2012

Gemeinsam mehr erreichen.

Frühling für iphone-apps

Informatik I: Einführung in die Programmierung

Anleitung zum Prüfen von WebDAV

Konfiguration des Novell GroupWise Connectors

Wolkig bis heiter. Andreas Wismann WHEN OTHERS. APEX als Drehkreuz für Web Service-Anwendungen

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

EPO Consulting GmbH. Ihr Partner für HTML5 und SAP UI5 Apps. Stand 2015/04. EPO Consulting GmbH - 1 -

Monitoring - Vorher Wissen was passieren wird

Erwin Grüner

Intrusion Prevention mit IPTables. Secure Linux Administration Conference, 6. / 7. Dec Dr. Michael Schwartzkopff. iptables_recent, SLAC 2007 / 1

Fragen zur GridVis MSSQL-Server

c t HTML 5 App Werbemittelanforderung

bla bla OX App Suite Kalender und Kontakte synchronisieren mit CalDAV und CardDAV

Windows 7 - Whoami. Whoami liefert Informationen wie z.b. die SID, Anmelde-ID eines Users, sowie Gruppenzuordnungen, Berechtigungen und Attribute.

Systemvoraussetzung < zurück weiter >

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

Hilfe, mein Shop ist langsam! Beziehungskrise zwischen Shopbetreiber, Agentur und Hoster.

Appery.io Mobile Apps schnell und einfach entwickeln

Firewall Implementierung unter Mac OS X

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Zentraler Druckserver mit CUPS

drupal + nodejs erste - fl@flink-solutions.de

Konfigurieren mit Mozilla Thunderbird

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

Inhaltsverzeichnis. Teil 1 Node.js... 1

Web Services Security

Die nachfolgende Anleitung hilft dem Kunden mit den nötigen Informationen zur Installation und Konfiguration der MDWorkflow-Applikation.

Android Testautomatisierung mit dem Framework Robotium

Linux Prinzipien und Programmierung

Mastermind. Testplan. Hochschule Luzern Technik & Architektur. Programmieren 2 FS12. Gruppe 10

OSGi-basierte Webapplikationen Ein Erfahrungsbericht

LÖSUNGEN FÜR TEAMS TEAM-COACHING

potential2 Mitarbeitergespräche als erfolgreiches Führungsinstrument 17. Januar 2013 Susanne Triebs-Lindner // Helmut Lindner Potentialhoch2 (Hamburg)

Transkript:

Peter Roßbach Systemarchitekt Logging Best Practice formulieren, ausgeben und analysieren

Logging Best Practice formulieren, ausgeben und analysieren Peter Roßbach 1 Peter Roßbach Gründer der bee42 solutions gmbh Neartime Application Monitoring DevOps, JavaScript, HTML 5, nosql, Virtual Appliance IT-Systemarchitekt, Berater, Trainer Entwickler im Apache Tomcat Projekt Mitglied der Apache Software Foundation Fachautor und Speaker auf deutschen Java Konferenzen 2

Schmerzlich erlebt vom Administrator Unterschätzt von uns Entwicklern Oft formuliert für den falsche Zweck oder es konnte schlicht kein realer Nutzer identifiziert werden Willkommen im Land der Möglichkeiten 3 Meine Erlebniswelt Logging 4

Es fehlt an Regeln für das produzieren von Log-Ausgaben 5 Verwendet einen aktuellen Log-Framework 6

Slf4j enthältet Möglichkeiten zur Umlenkung aller Ausgaben von JUL,JCL,log4j auf logback! 7 Sprache Formuliere der Ausgaben in englischer Sprache Setzen der Default-Language Je nach Transport muss es Ascii sein Besser ist die Verwendung von UTF-8 8

Nutzt ein einheitliches Standardformat für die Log-Ausgabe und produziere Log-Events Syslog GraylogEventLogFormat logstash Splunk loggly 9 Nah so was... 2013-04-23T09:44:55.000746+0200 INFO {AliveCheckThread [org.apache.http.impl.client.defaulthttpclient] : [I/O exception (org.apache.http.nohttpresponseexception) caught when processing request: The target server failed to respond] ::1 - - [20/Apr/2013:17:42:56 +0200] "GET /ctc-todo-service HTTP/1.1" 200 105 10

MultiLine 2013-04-23T09:44:30.000715+0200 ERROR {Grizzly-IdleTimeoutFilter-IdleCheck xxxx.servlet.heartbeatmessageinboundproxy] : [accesswithwebsocket -> onerror:] java.util.concurrent.timeoutexception: Timeout exceeded! at com.ning.http.client.providers.grizzly.grizzlyasynchttpprovider.timeout(grizzlyasynchttpprovi der.java:518) [async-http-client-1.7.7.jar:na]! at com.ning.http.client.providers.grizzly.grizzlyasynchttpprovider $3.onTimeout(GrizzlyAsyncHttpProvider.java:350) [async-http-client-1.7.7.jar:na]! at org.glassfish.grizzly.utils.idletimeoutfilter $DefaultWorker.doWork(IdleTimeoutFilter.java:385) [grizzly-framework-2.2.10.jar:2.2.10]! at org.glassfish.grizzly.utils.idletimeoutfilter $DefaultWorker.doWork(IdleTimeoutFilter.java:365) [grizzly-framework-2.2.10.jar:2.2.10]! at org.glassfish.grizzly.utils.delayedexecutor$delayedrunnable.run(delayedexecutor.java: 149) [grizzly-framework-2.2.10.jar:2.2.10]! at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1110) [na: 1.7.0_09]! at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:603) [na: 1.7.0_09]! at java.lang.thread.run(thread.java:722) [na:1.7.0_09] 11 Log Event vs. Log Ausgabe Zeitpunkt Kontext Informationen als machinenverarbeitbares Format 12

Was geht... {! "@source":"file://127.0.0.1:6880/access_log",! "@source_host": "127.0.0.1",! "@source_path": "access_log",! "@tags":["proxy","httpd", "httpd6080"],! "@message": "::1 - - [20/Apr/2013:17:42:56 +0200] \"GET /ctc-todo-service/rest/todo HTTP/1.1\" 200 105",! "@fields": {!! "timestamp": "2013-04-20T17:42:56.106+0200",!! "clientip": "::1",!! "duration": 3484,!! "status": 200,!! "request": "/ctc-todo-service/rest/todo",!! "urlpath": "/ctc-todo-service/rest/todo",!! "urlquery": "",!! "method": "GET",!! "bytes": 105!! "referer": \"http://localhost:6880/ctc-todo-angularjs/\",!! "useragent": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10\"!! "requestid": \"httpd6880.uxlbvn8aaaeaasgkctiaaaba\" 13 machine readable log.info( user {, bill {, pay {, userid, billid, betrag); noch ein einfacher Matcher: /user (\d+), bill (\d+), pay (\d+)$/ Text und Information trennen und die Ausgabe vielleicht lieber als JSON Datensatz ausgeben: User pay the bill { "user": 122121, "bill": 12312312, "betrag": 1212.12 14

Verwende die Log-Level konsequent! 15 TRACE Code Trace DEBUG Informationen zur Problemanalyse INFO Start/Stop von Komponenten und Abläufen WARN Funktionalitäten ist beeinträchtigt ERROR Dringender Handlungsbedarf 16

Nutze die Log-Kategorien Einhalten von Hierarchien Auswahl der Aussteuerung Beachte den Modulschnitt Anderer Zweck == andere Kategorie 17 Architektur Log-Category Jersey com.sun.jersey Module Modul 2 Module 3 org.module1 org.module2 org.module3 Spring org.springframework Hibernate org.hibernate 18

Bilde einen LOG-Context Login/SessionID FlowID Request ID Thread ID PID ServiceID Transaction ID Host 19 Zeitstempel... 1304060505 22/Apr/2013:07:05:26 +0000 Thu,22 Apr 2013 01:05:25-0600 Apr 22 20:21:47 030813 13:21:24 110429.071055,118 @60000000037c219bf2ef02e98 20

Einheitliches Format (ISO8601) yyyy-mm-dd't'hh:mm:ss.sssz => 2013-04-22T06:05:56.264+0200 Synchronität zwischen den Systemen gewährleisten (NTP) 21 Formuliere die Ausgaben für einen realen Anwendungsfall! 22

Gibt es eine klare Anforderung für den Zweck der Ausgabe! Journal Debugging Metriken Profiling Fehleranzeige 23 Tools für die Auswertung und Analyse nutzen! 24

Experimente httpd udp Tomcat App syslog access_log GELF logstash shipper statd redis logstash indexer graphite / CtC Monitoring elasticsearch kibana 25 LogStash LogStash 33 17 46 log output inputs filter outputs info Watchdog Config 26

inputs amqp drupal_dblog elasticsearch eventlog exec file ganglia gelf gemfire generator graphite heroku imap irc log4j lumberjack lumberjack2 pipe rabbitmq redis relp snmptrap sqs stdin stomp syslog tcp twitter udp varnishlog websocket xmpp zenoss zeromq 27 Filters alter anonymize checksum clone csv date dns environment gelfify geoip grep grok grokdiscovery json kv metrics multiline mutate noop ruby sleep split syslog_pri translate urldecode useragent xml zeromq 28

outputs amqp boundary circonus cloudwatch datadog elasticsearch elasticsearch_http elasticsearch_river email exec file ganglia gelf gemfire graphite graphtastic hipchat http internal irc juggernaut librato loggly lumberjack metriccatcher mongodb nagios nagios_nsca null opentsdb pagerduty pipe rabbitmq redis riak riemann sns sqs statsd stdout stomp syslog tcp websocket xmpp zabbix zeromq 29 Information Extraktion grok {! type => "tomcat-access-log"! patterns_dir => "patterns"! pattern => '%{IPORHOST:clientip %{USER:ident % {USER:auth \"%{TIMESTAMP_ISO8601:timestamp\" \"% {WORD:verb %{URIPATHPARAM:request HTTP/% {NUMBER:httpversion\" %{NUMBER:response:int (?:% {NUMBER:bytes:int -) \"(?:%{URI:referrer -)\" (?:% {QS:agent -) %{NUMBER:duration:int (?:%{WORD:session_id. %{WORD:node -) \"(?:%{GREEDYDATA:requestid -)\"' 30

31 32

shipper (input) input {! gelf {!! type => "gelf"!! file { path => '/Users/peter/develop/advancedlogging/instance/node60/logs/access.log' format => 'plain' type => 'tomcat-access-log' tags => 'node60' udp {!port => 57080!type => "apache_httpd"!buffer_size => 8192!format => "json_event" 33 shipper (filter) filter { grok {! type => "tomcat-access-log"! patterns_dir => "/Users/peter/develop/advancedlogging/server/stash/patterns"! pattern => '%{IPORHOST:clientip %{USER:ident %{USER:auth \"% {TIMESTAMP_ISO8601:timestamp\" \"%{WORD:verb %{URIPATHPARAM:request HTTP/% {NUMBER:httpversion\" %{NUMBER:response:int (?:%{NUMBER:bytes:int -) \"(?:%{URI:referrer -)\" (?:% {QS:agent -) %{NUMBER:duration:int (?:%{WORD:session_id.%{WORD:node -) \"(?:% {GREEDYDATA:requestid -)\"' date { type => "apache_httpd" match => [ "timestamp", "ISO8601" ] mutate { type => "apache_httpd" remove => [ "timestamp" ] 34

shipper (output) output { stdout {!debug => true!debug_format => "json" redis { host => "127.0.0.1" data_type => "list" key => "logstash" statsd {!! type => "apache_httpd"!! increment => "apache.status.%{status"!! count => ["apache.bytes", "%{bytes"] 35 indexer (input/output) input { redis { host => "127.0.0.1" type => "redis-input" data_type => "list" key => "logstash" format => "json_event" output { elasticsearch {!embedded => true #host => "127.0.0.1"!! #cluster => "stash"! #port => "9300" #index => "logstash-%{+yyyy.mm.dd" #type => "raw_public_log" 36

37 38

39 40

41 42

Anforderung an die Ausgaben klären Logging als Backend, wie eine Datenbank begreifen Vereinbare ein Review und Test der Log-Ausgaben! Validieren der eigenen Ausgaben! 43 Klare Regeln Behandelt Logausgaben wie Datenbank-Operationen Definiere den Zweck Verwende nur Ausgaben die auch ausgewertet werden. 44

Wer ist der Konsument? Operator Developer Produkt Owner Security Officer 45 Die Balance gelingt nur mit Übung... 46

Kommt zu den Workshop in diesem Jahr oder vereinbart eine persönliche Termin!! WJAX München 2013 Apache Tomcat 8 AngularJS Monitoring & Websockets Loganalyse OOP München 2014 CtC goes Live... http://www.bee42.com bee42 suchen Dich... https://github.com/atmosphere/atmosphere Entwickler (JavaScript, node.js, MongoDB, Redis, Java, Ruby, Tomcat) Administrator (Vagrant, Puppet, Mcollective, Jenkins, Linux OS) jobs-2012@bee42.com +49-157-72549263 47