application logging with the elk stack

42
Application Logging With The ELK Stack @bwaine - #DPC15 Monday, 29 June 15

Upload: benwaine

Post on 07-Aug-2015

111 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Application Logging With The ELK Stack

Application Logging With The ELK Stack

@bwaine - #DPC15

Monday, 29 June 15

Page 2: Application Logging With The ELK Stack

2

Ben Andersen-Waine

Software Engineer Contractor

Deployed ELK To Prod Numerous Times

Monday, 29 June 15

Page 3: Application Logging With The ELK Stack

Logging?

Monday, 29 June 15

Page 4: Application Logging With The ELK Stack

System Logs

Monday, 29 June 15

Page 5: Application Logging With The ELK Stack

5

Monday, 29 June 15

Page 6: Application Logging With The ELK Stack

Application Log

Monday, 29 June 15

Page 7: Application Logging With The ELK Stack

Debug Information - Errors (connections, uncaught exceptions, resource exhaustion)

Narrative Information - Methods Calls, Event Triggers

Business Events - Purchases, Logins, Registrations, Unsubscribes

7

Application Log

Monday, 29 June 15

Page 8: Application Logging With The ELK Stack

ssh [email protected] -f /var/log/nginx/my-site.access.logtail -f /var/log/my.application.log

ssh [email protected] -f /var/log/mysql/mysql.log

ssh [email protected] -f /var/log/rabbitmq/nodename.log

8

Keeping Track Of All This....

Monday, 29 June 15

Page 9: Application Logging With The ELK Stack

9

The Elk Stack

Monday, 29 June 15

Page 10: Application Logging With The ELK Stack

Monday, 29 June 15

Page 11: Application Logging With The ELK Stack

1) Monolog2) Everything else....

11

PHP Logging Tools

Monday, 29 June 15

Page 12: Application Logging With The ELK Stack

1) Monolog: Loggers And Handlers2) Monolog: Tags & Formatters3) Logging business events

12

Basic Logging Examples

Monday, 29 June 15

Page 13: Application Logging With The ELK Stack

use Monolog\Logger;use Monolog\Handler\FingersCrossedHandler;use Monolog\Handler\StreamHandler;

$logEnv = getenv('LOG_LEVEL');$level = empty($logLevel) ? $logEnv : Logger::WARNING;

$appLog = new Logger('AppLog');

$strHandler = new StreamHandler('/var/log/app.log', Logger::DEBUG); $fcHandler = new FingersCrossedHandler($strHandler, $level);

$appLog−>pushHandler($fcHandler);$appLog−>debug('LOGGING!');

EG1: Loggers And Handlers

13

Monday, 29 June 15

Page 14: Application Logging With The ELK Stack

// Set A Log Level$logEnv = getenv('LOG_LEVEL');$level = empty($logLevel) ? $logEnv : Logger::WARNING;

// Create A Logger$appLog = new Logger('AppLog');

14

Monday, 29 June 15

Page 15: Application Logging With The ELK Stack

$strHandler = new StreamHandler('/var/log/app.log', Logger::DEBUG);

$fcHandler= new FingersCrossedHandler($strHandler, $level);

// Create Handlers

$appLog−>pushHandler($fcHandler);

$appLog−>debug('Start Logging!');$appLog−>emergency('Something Terrible Happened');

// Push The Handler And Start Logging

15

Monday, 29 June 15

Page 16: Application Logging With The ELK Stack

EG 2: Tagging Formatting

$appLog = new Logger('AppLog');

$strHandler = new StreamHandler('/var/lg.lg', $level);$formatter = new LogstashFormatter("helloapp", "application");

$strHandler−>setFormatter($formatter); $appLog−>pushHandler($strHandler));

$id = $_SERVER('X_VARNISH');$tag = new TagProcessor(['request−id' => $id])

$appLog−>pushProcessor($tag); $appLog−>debug("LOGGING!");

16

Monday, 29 June 15

Page 17: Application Logging With The ELK Stack

// Create A Logger$appLog = new Logger('AppLog');

$strHandler = new StreamHandler('/var/lg.lg', $level);$formatter = new LogstashFormatter("helloapp", "app");

// Create A Handler & Formatter

// Set Formatter Onto Handler$strHandler−>setFormatter($formatter);

$appLog−>pushHandler($strHandler));

//Push Handler Onto Logger

17

Monday, 29 June 15

Page 18: Application Logging With The ELK Stack

$id = $_SERVER('X_VARNISH');$tag = new TagProcessor(['request−id' => $id])$appLog−>pushProcessor($tag); $appLog−>debug("LOGGING!");

// Capture A Unique Id, Create A Tag Processor, Push

18

Monday, 29 June 15

Page 19: Application Logging With The ELK Stack

2009 - RFC 5424 - Syslog Protocol

Code / Severity

0 Emergency: system is unusable1 Alert: action must be taken immediately2 Critical: critical conditions3 Error: error conditions4 Warning: warning conditions5 Notice: normal but significant condition6 Informational: informational messages7 Debug: debug-level messages

https://tools.ietf.org/html/rfc542419

Log Levels

Monday, 29 June 15

Page 20: Application Logging With The ELK Stack

2013 - PSR03 - PHP Logging Interface Standard

http://www.php-fig.org/psr/psr-3/

20

PSR3

Monday, 29 June 15

Page 21: Application Logging With The ELK Stack

EG 3: Event Logginguse Monolog\Logger;use Symfony\Component\EventDispatcher\EventDispatcher;

$dispatcher = new EventDispatcher();

$dispatcher−>addListener( "business.registration.post", function () use ($busLog) { $busLog−>info("Customer registered"); });

$dispatcher−>dispatch("business.registration.post");

Monday, 29 June 15

Page 22: Application Logging With The ELK Stack

Logstash Architecture

1. Logstash Shipper ships logs to logstash

2. Logstash processes them

3. Logstash Inserts Into Elastic Search

4. Kibana exposes a web interface to Elastic Search data

Monday, 29 June 15

Page 23: Application Logging With The ELK Stack

Logstash Architecture

Monday, 29 June 15

Page 24: Application Logging With The ELK Stack

Why not rate the talk now BEFORE the demo?

24

https://joind.in/talk/view/14235

Monday, 29 June 15

Page 25: Application Logging With The ELK Stack

ELK Demo

25

1) Discover Data (search / diagnose)2) Visualize Data 3) Produce A Dashboard 4) Demonstrate ‘the new hotness’ of Kibana 4

Monday, 29 June 15

Page 27: Application Logging With The ELK Stack

Monday, 29 June 15

Page 28: Application Logging With The ELK Stack

Monday, 29 June 15

Page 29: Application Logging With The ELK Stack

Monday, 29 June 15

Page 30: Application Logging With The ELK Stack

Monday, 29 June 15

Page 31: Application Logging With The ELK Stack

Logstash Config

31

Monday, 29 June 15

Page 32: Application Logging With The ELK Stack

Logstash Collecting{ "network": { "servers": [ "logs.logstashdemo.com:5000" ], "timeout": 15, "ssl ca": "/etc/pki/tls/certs/logstash−forwarder.crt" }, "files": [ { "paths": [ "/var/log/nginx/helloapp.access.log" ], "fields": { "type": "nginx−access" } } ] }

32

Monday, 29 June 15

Page 33: Application Logging With The ELK Stack

Logstash Processing

input { lumberjack { port => 5000 ssl_certificate => "/etc/pki/tls/certs/logstash−forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash−forwarder.key"}

}

Input

33

Monday, 29 June 15

Page 34: Application Logging With The ELK Stack

Logstash ProcessingFilteringfilter { if [type] == "nginx−access" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } date { match => [ "logdate", "dd/MMM/yyyy:HH:mm:ss Z" ] } } }

34

Monday, 29 June 15

Page 35: Application Logging With The ELK Stack

Logstash ProcessingOutput

output { elasticsearch { host => localhost }}

35

Monday, 29 June 15

Page 36: Application Logging With The ELK Stack

Groking grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }

https://github.com/elasticsearch/logstash/blob/v1.4.2/patterns/grok-patterns

http://grokdebug.herokuapp.com/

55.3.244.1 GET /index.html 15824 0.043

%{IP:client}%{WORD:method}%{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

Monday, 29 June 15

Page 37: Application Logging With The ELK Stack

37

Hey Ben.... Have you got time for that

gratuitously flashy geo data demo?

Monday, 29 June 15

Page 38: Application Logging With The ELK Stack

Monday, 29 June 15

Page 39: Application Logging With The ELK Stack

Logging IdeasRelease MarkerError rates of various applications over timeLatency in various percentiles of each application tierHTTP Responses: 400 series responsesHTTP Responses: 500 series responsesAuto git blame production errorsAuth and Syslogs

39

Monday, 29 June 15

Page 40: Application Logging With The ELK Stack

Go Forth And Log....BUT

Remember log rotation

Beware running out of space

Beware file logging on NFS

40

Monday, 29 June 15

Page 41: Application Logging With The ELK Stack

Questions?

41

Monday, 29 June 15

Page 42: Application Logging With The ELK Stack

https://joind.in/talk/view/14235

42

Monday, 29 June 15