Linuxday2013

22
Case Study MongoDB come collettore di log Mariano Fiorentino

description

Node.js REST interface for MongoDB, we modified mongodb-rest (https://github.com/tdegrunt/mongodb-rest) to manage more operation: counting elements "distinct" operations excel/csv export list of available db collection list of keys of a specific query Multithreading support It's now also possible to search by date range and are managed sort operations.

Transcript of Linuxday2013

Page 1: Linuxday2013

Case Study

MongoDB come collettore dilog

Mariano Fiorentino

Page 2: Linuxday2013

● - Co fondatore Php User Group Torino

● Responsabile Tecnico su progetti legati . all'automotive per Eng it

Chi Sono

Page 3: Linuxday2013

La velocita' in scrittura su mongodb si presta all'utilizzo in un costesto di questo

:tipo

● non viene eseguito un controllo di consistenza in fase di scrittura

● l'affidabilità dei dati è data dalla rindondanza dei server

MongoDB per collezionare log?

Page 4: Linuxday2013

Una delle caratteristiche delle web application moderne e' di produrre un

. grande quantitativo di log :In un lamp stack classico abbiamo

● ( , )Apache error_log access_log● ( )Php php_errors● Le applicazioni

Contesto applicativo

Page 5: Linuxday2013

Contesto applicativo

Page 6: Linuxday2013

Contesto applicativo

● E' evidente che in un sistema di questo tipo centralizzare le informazioni è la

chiave per avere un accesso rapido ai dati in fase di troubleshotting

● Individuare uno strumento compatibile con gli standard di un LAMP Stack

Page 7: Linuxday2013

Fluentd

’ Nell ambito delle soluzioni ri open di log, ( :// . /) collector fluentd http fluentd org è un

componente compatibile con gli standard dei log di apache e php

● Permette di collezionare molteplici , sorgenti verso una o più destinazioni compresi db non relazionali

● E' possibile scrivere plugin personalizzati

Page 8: Linuxday2013

Architettura dellasoluzione

Page 9: Linuxday2013

Cosa succede suMongoDB?

<source> type tail format apache2 path /var/log/apache2/access_log pos_file /var/log/td-agent/access_log.pos tag mongo.apache.access</source>

Le collezioni su vengono automaticamente in :base alla configurazione

Page 10: Linuxday2013

Rendere i datidisponibi l i

● Si e' scelto di separare lo strato di , accessibilita' ai dati su MongoDB resi

, disponibili tramite rest service dalla webapp vera e propria che e' stata sviluppata in solo javascript

● In questo modo i dati eventualmente “ ” possono essere importati da server terzi

.per ulteriori analisi e operazioni

Page 11: Linuxday2013

E' un framework event-driven per il motore Javascript V8, su piattaforme UNIX like.

Si tratta quindi di un framework relativo all'utilizzo server-side di Javascript

.Node js

Page 12: Linuxday2013

● Driver nativi verso MongoDB● Librerie che facilitano la creazione diservizi

● Open Source● Una REST interface su MongoDB in

alpha● Ci ha permesso di lavorare su uno stack

completamente JavaScript

Un REST Service .con Node js

Page 13: Linuxday2013

JavaScript Stack

Page 14: Linuxday2013

AMID : - abbiamo forkato mongodb rest per : gestire un numbero maggiore di operazioni

● / / count distinct sort sulle collezioni● / excel csv export● lista delle db collection● -supporto al multi threads● ricerca per data

. Another js Mongo Internet Driver

Page 15: Linuxday2013

Ritorna i documenti che soddisfano la condizione “ ” :specificata da query ordinati in modo ascendente

GET / /db collection?={“ ”: }& =[{" ": ," ":" "}]query isDone false sort property null direction ASC

:Lista delle collezioni disponibi l i sul db specificato

GET /db

:Ritorna il documento con id specificato

GET / / /db collection id

. Another js Mongo Internet Driver

Page 16: Linuxday2013

:Conta gli elementi

GET / /db collection =% % % % %?query 7B 22isDone 22 3A 20false% & = 7D operation count

: Export in Excel

GET / /db collection?= & =& ={% % :-operation excel query sort 22$natural 22

}& =1 limit 15000

. Another js Mongo Internet Driver

Page 17: Linuxday2013

( Inserisce un nuovo documento il JSON è nel POST):Body

POST / /db collection

( ):Aggiorna un documento il JSON è nel POST Body

PUT / / / db collection id

:Cancella un documento dato un id

DELETE / / /db collection id

. Another js Mongo Internet Driver

Page 18: Linuxday2013

WebApp in Extjs 4

● Griglia autoconfigurante in base alle chiavi delle collection su MongoDB

● Campi di ricerca in base al tipo dicolonna

– Data– Numero– Stringa

Page 19: Linuxday2013

WebApp in Extjs 4

Page 20: Linuxday2013

Punti di attenzione

● Corruzione del db su mongo e indici sulle colonne

● .Out of memory Exception su node js● Gestione dei timeout su tutto lo stack

Page 21: Linuxday2013

Documentazione

● :// . / -https github com mariano/fiorentino amid

● :// . /http nodejs org● :// . . /http www mongodb org● :// . . /http www sencha com