23
Centrale Logging Drupal Logging van meerdere Drupal-sites

Drupaljam2015 logstash

Embed Size (px)

Citation preview

Centrale Logging Drupal

Logging van meerdere Drupal-sites

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

AGENDA

● WIE ZIJN WIJ?

● BELANG VAN LOGGING?

● WAAROM CENTRALE LOGGING?○ VOOR DRUPAL-DEVS○ VOOR SYSOPS

● DE ELK-STACK○ COMPONENTEN

● WAT LEVERT HET OP?

● ERVARINGEN TOT NU TOE

● VRAGEN?

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WIE ZIJN WIJ?● Webscale

○ Hosting sinds 2001○ Hosting voor professionals○ Gespecialiseerd in PHP frameworks

■ zoals Drupal■ maar ook Symfony, Wordpress, Typo3 & Magento

○ ISO 9001 en 27001 NL datacenters○ CISSP management○ 100% open source○ 300+ managed servers○ 200+ Drupal sites

○ Webscale werkt voor:■ Rijksoverheid, Gemeenten, Graydon, Jaguar Land Rover, ThiemeMeulenhoff

○ Webscale werkt met:■ Cipix, d-Media, Merge, ezCompany

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

BELANG VAN LOGGING?

● Vastleggen van events

● Health-status van je applicatie / platform

● Troubleshooting

● Debugging

● Security

● Correlatie van events

● Statistieken gebruik

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WAAROM CENTRALE LOGGING?

Voor de Devs:

● Alle logging inzichtelijk vanuit een lokatie

● Doorzoekbaar middels queries

● Monitoren van nieuwe sites na deployment (ACC en PROD)

● Monitoren van bestaande sites na nieuwe updates

● Monitoren van koppelingen met externe systemen

● Periodieke controle (bijv. elke maand een rapportage t.b.v. audits)

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WAAROM CENTRALE LOGGING?

Voor de SysOps:

● Monitoren van errors

● Monitoren van ongewenst verkeer, proxy-requests, badbots, niet-legitieme requests

● Monitoren van performance

● Monitoren van verbruik resources, voor beslisvorming upgrades

● Correlaties leggen tussen events diverse logfiles van meerdere systemen

● Periodieke controle (bijv. elke maand een rapportage t.b.v. audits)

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WAAROM CENTRALE LOGGING?

Het probleem:

● Logdata is “ongestructureerd” en lastig doorzoekbaar● Vaak op meerdere servers● Zoeken op basis van grep, awk en regex-magic

drupalsite.nl:80 80.60.70.109 - - [30/Mar/2015:12:26:22 +0200] "GET /sites/drupalsite.nl/files/styles/actionblock-image/public/uploads/actionblockimage/szwbannertoeslag300x250_0.gif?itok=0jUPhVnE HTTP/1.1" 200 39342 "http://www.kinderstadtilburg.nl/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4"drupalsite.nl:80 80.60.70.109 - - [30/Mar/2015:12:26:22 +0200] "GET /sites/drupalsite.nl/modules/contrib/colorbox/styles/plain/images/loading_animation.gif HTTP/1.1" 200 2767 "http://www.drupalsite.nl/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4"drupalsite.nl:80 80.60.70.109 - - [30/Mar/2015:12:26:22 +0200] "GET /sites/drupalsite.nl/themes/kinsbase/images/arrows.png HTTP/1.1" 200 408 "http://www.drupalsite.nl/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4"

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WAAROM CENTRALE LOGGING?

De oplossing:

● Transporteer de logging naar een centrale lokatie● Identificeren van velden op basis van “grok-filters”● Filteren en verrijken van de data● Maak van iedere logregel een json-document● Sla het json-document op in ElasticSearch

drupalsite.nl:80 80.60.70.109 - - [30/Mar/2015:12:26:22 +0200] "GET /sites/drupalsite.nl/files/styles/actionblock-image/public/uploads/actionblockimage/szwbannertoeslag300x250_0.gif?itok=0jUPhVnE HTTP/1.1" 200 39342 "http://www.drupalsite.nl/" "Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4"

{ "fqdn": "www01.drupal01.webscale.nl",

"http_vhost": "drupalsite.nl",

"http_port": "80",

"http_clientip": "80.60.70.109",

"http_ident": "-",

"http_auth": "-",

"http_timestamp": "30/Mar/2015:12:26:22 +0200",

"http_method": "GET",

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WAAROM CENTRALE LOGGING?

Uiteindelijke situatie:

● Logging beschikbaar, doorzoekbaar en gevisualiseerd in Kibana

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

DE ELK-STACK

ELASTICSEARCHLOGSTASHKIBANA

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

DE ELK-STACK

● Logstash-Forwarder

● Logstash-Receiver

● Redis

● Logstash-Indexer

● ElasticSearch

● Nginx / Kibana

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

DE ELK-STACK

DRUPALWEBSERVER

LOGSTASH(INDEXER)

LOGSTASH(RECEIVER)

REDIS(MESSAGEQUEUE)

ELASTICSEARCH KIBANA(WEBINTERFACE)

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

WAT LEVERT HET OP?

● Logging centraal beschikbaar

● Logging eenvoudig doorzoekbaar

● Devs hoeven niet meer via ssh in te loggen op server bij onderzoek

● Dashboards via een webinterface geven duidelijk overzicht van de status

● Debugging eenvoudiger

● Root-cause-analysis vele malen sneller bij problemen

● Statistieken over gebruik Drupal-Sites

● Periodieke audits kosten minder tijd

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

ERVARINGEN TOT NU TOE

Positief:

● ELK is snel!

● Met de juiste opzet zeer stabiel

● Logstash-Forwarder lightweight en veilig (TLS)

● Logstash zeer flexibel en uitbreidbaar

● Makkelijk zoeken in Kibana

● Visualisaties veel eenvoudiger in Kibana4

● Biedt al snel toegevoegde waarde

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

ERVARINGEN TOT NU TOE

Negatief of wat kan beter:

● Maken grokfilters soms nog lastig

● Ontwikkeling van ELK gaat zeer snel, dus breekt soms bij nieuwe releases

● Documentatie en tutorials vaak out-of-date

● Schaalbare architectuur biedt wel wat uitdagingen

● Kibana nog beperkt in functionaliteit (t.o.v. bijv. Splunk)

● Kibana out-of-the-box geen authenticatie en autorisatie (wel met Shield-plugin)

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

ERVARINGEN TOT NU TOE

Lessons Learned en plannen voor de toekomst:

● Centrale logging biedt zeker een flinke toegevoegde waarde

● Zowel voor de Devs als voor SysOps

● Let goed op “_grokparsefailures”

● grokdebug.herokuapp.com is een lifesaver!

● Nog meer logfiles opnemen

● Eventueel uitfaseren logstash-forwarder voor rsyslog (Jessie)

● Verder experimenteren met clustered-elasticsearch

● Implementeren authenticatie en authorisatie

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

SCREENSHOTS - DRUPAL LOG

/var/log/drupal/drupal.log

Apr 29 13:55:03 www01 drupal: 5|1430308503|cron|127.0.0.1|0||http://site|http://site.nl/index.php|||Cron run completed.

Apr 29 14:00:02 www01 drupal: 5|1430308802|job_scheduler|127.0.0.1|0||http://site|http://site/index.php|||Finished

processing scheduled jobs (0 sec s, 0 total, 0 failed).

Apr 29 14:23:47 www01 drupal: 5|1430310227|user|109.232.42.91|0||https://www.site.nl|https://www.site.nl/|https://

www.site.nl/||Login attempt failed for a.user.

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

SCREENSHOTS - LOGSTASH-FORWARDER

/etc/logstash/logstash-forwarder.conf

"network": {

"servers": [ "java01.log01.webscale.nl:5000" ],

"timeout": 15,

"ssl ca": "/etc/logstash/java01.log01.webscale.nl.crt"

},

"files": [{

"paths": [ "/var/log/drupal/drupal.log" ],

"fields": { "type": "drupal", "fqdn": "www01.drupal01.webscale.nl" }

}, {

"paths": [ "/var/log/apache2/*access.log" ],

"fields": { "type": "apache-vhost", "fqdn": "www01.drupal01.webscale.nl" }

}, {

"paths": [ "/var/log/apache2/*error.log" ],

"fields": { "type": "apache-error", "fqdn": "www01.drupal01.webscale.nl" }

}

]

}

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

SCREENSHOTS - DRUPAL GROKFILTER

DRUPAL_SYSLOGID [a-zA-Z0-9._-]+

DRUPAL_TYPE [a-zA-Z0-9._ -]+

DRUPAL_TIME %{MONTH} %{DAY} %{TIME} %{YEAR}

DRUPAL_WATCHDOG %{SYSLOGTIMESTAMP:timestamp} %{IPORHOST:host} %{DRUPAL_SYSLOGID:drupal_sylogid}: %

{NUMBER:drupal_severity}\|%{NUMBER:drupal_timestamp}\|%{DRUPAL_TYPE:drupal_type}\|%{IP:drupal_ip}\|(?

<drupal_uid>[^\|]*)\|(?<drupal_username>[^\|]*)\|http(s)?://%{HOSTNAME:drupal_vhost}\|(?<drupal_request>[^\|]*)\|(?

<drupal_referer>[^\|]*)\|(?<drupal_link>[^\|]*)\|(?<drupal_message>.*)

DRUPAL_WATCHDOG_VARNISH %{SYSLOGTIMESTAMP:timestamp} %{IPORHOST:host} %{DRUPAL_SYSLOGID:drupal_sylogid}\[%

{NUMBER:drupal_syslogpid}\]: %{NOTSPACE:varnish_interface} %{NOTSPACE:varnish_command} %{IP:varnish_source_ip} %

{NUMBER:varnish_source_port} %{IP:varnish_destination_ip} %{NUMBER:varnish_destination_port} %{NOTSPACE:varnish_method} %

{GREEDYDATA:varnish_message}

DRUPAL_WATCHDOG_CRON %{SYSLOGTIMESTAMP:timestamp} %{IPORHOST:host} %{DRUPAL_SYSLOGID:drupal_sylogid}: http(s)?://%

{HOSTNAME:drupal_vhost}\|%{NUMBER:drupal_timestamp}\|%{DRUPAL_TYPE:drupal_type}\|%{IP:drupal_ip}\|(?

<drupal_request>[^\|]*)\|\|%{NUMBER:drupal_severity}\|\|(?<drupal_message>.*)

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

SCREENSHOTS - KIBANA DISCOVER

drupal_severity:[1 TO 4] OR drupal_type:php

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

SCREENSHOTS - KIBANA VISUALIZE

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

SCREENSHOTS - KIBANA DASHBOARD

CENTRALE LOGGING DRUPALCENTRALE LOGGING DRUPAL

VRAGEN?