Panagiotis_Klironomos
3 years ago
1 changed files with 105 additions and 0 deletions
@ -0,0 +1,105 @@ |
|||||
|
= Data Collector Service - README |
||||
|
Skouris cs161064@uniwa.gr |
||||
|
Klironomos cs151128@uniwa.gr |
||||
|
// Metadata: |
||||
|
:description: Dockerfile instructions |
||||
|
:keywords: Dockerfile |
||||
|
ifndef::env-browser[] |
||||
|
:data-uri: |
||||
|
endif::[] |
||||
|
:toc: right |
||||
|
:toc-title: Table of contents |
||||
|
:toclevels: 4 |
||||
|
:source-highlighter: highlight |
||||
|
:no-header-footer: |
||||
|
:nofooter: |
||||
|
:last-update-label!: |
||||
|
:icons: font |
||||
|
:sectnums: |
||||
|
:url_mongodb: https://en.wikipedia.org/wiki/MongoDB |
||||
|
|
||||
|
|
||||
|
|
||||
|
.Πλέγμα Δικτύου μεταξύ Services και Microservices |
||||
|
**** |
||||
|
Σκοπός του project, είναι να δημιουργήσουμε ένα "σμήνος" από *εικονικές μηχανές* (ή αλλιώς *nodes* ή *containers*), οι οποίες θα έχουν την δυνατότητα να επικοινωνούν μεταξύ τους με διάφορους τρόπους επικοινωνίας. |
||||
|
|
||||
|
[NOTE] |
||||
|
==== |
||||
|
|
||||
|
Λειτουργικότητα Σμήνους |
||||
|
|
||||
|
Σε ένα *σμήνος εικονικών μηχανών*, υπάρχουν μηχανές που *συλλέγουν δεδομένα* (συνήθως έχουν τον ρόλο των *clients*) και μηχανές που "αποκτούν" αυτά τα δεδομένα καθώς στη συνέχεια *επικοινωνούν μεταξύ τους* για διάφορους σκοπούς (συνήθως έχουν τον ρόλο των *servers ή devices*). |
||||
|
To undertand this better lets look at the picture bellow and imagine that red dots are iot devices that can send and receive and black ones are clients that gather data. |
||||
|
|
||||
|
==== |
||||
|
|
||||
|
|
||||
|
*Για το σκοπό του εργαστηρίου, θα χρησιμοποιηθούν τα παρακάτω εργαλεία:* |
||||
|
|
||||
|
* Swarmlab |
||||
|
* Ansible |
||||
|
* Fluentd |
||||
|
* MongoDB |
||||
|
* NodeJS |
||||
|
|
||||
|
**** |
||||
|
|
||||
|
|
||||
|
== Πρώτη Ενότητα |
||||
|
|
||||
|
=== Δημιουργία Δικτύου: |
||||
|
|
||||
|
Για να μπορέσουμε να θέσουμε σε *λειτουργία* τις εικονικές μηχανές αλλά και να τις *διαμορφώσουμε κατάλληλα* έτσι ώστε να *συλλέγουν* και να *μεταφέρουν δεδομένα*, θα χρειαστεί να δημιουργήσουμε ένα *δίκτυο*, πάνω στο οποίο θα γίνουν οι επιθυμητές ενέργειες. |
||||
|
|
||||
|
=== Αυτόματη Εγκατάσταση Προγράμματος Σύλλογης Δεδομένων: |
||||
|
|
||||
|
Για να μπορέσουμε να συλλέξουμε δεδομένα από ένα σύνολο εικονικών μηχανών και να τα στείλουμε σε διάφορα σημεία, θα πρέπει οι εικονικές μηχανές να έχουν *εγκαταστήσει ορισμένα πακέτα* που θα περιέχουν *ειδικά εργαλεία* για την κάθε διαδικασία που επιθυμούμε να εκτελέσουν. |
||||
|
|
||||
|
Χρησιμοποιούμε το *Ansible*, με το οποίο δίνουμε τις διευθύνσεις των εικονικών μηχανών που επιθυμούμε να κάνουν τις απαραίτητες *εγκαταστάσεις πακέτων*, σε ένα αρχείο *Inventory*, καθώς και σε ένα άλλο αρχείο *fluentd.conf.yml* δίνουμε ορισμένα πακέτα που θέλουμε να εγκατασταθούν στις εικονικές μηχανές. |
||||
|
|
||||
|
Για την *συλλογή δεδομένων* θα χρησιμοποιήσουμε ένα *ειδικό εργαλείο*, το οποίο έχει την δυνατότητα να συλλέγει δεδομένα από διάφορες πηγές (π.χ. *system logs*, *apache logs*, *web app / mobile logs*, *IoT Sensors logs* κλπ.) και να τα στέλνει σε διάφορα σημεία που επιθυμούμε (π.χ. *AWS*, *Hadoop*, *Βάσεις Δεδοένων*). |
||||
|
|
||||
|
Το εργαλείο που θα χρησιμοποιήσουμε ονομάζεται *Fluentd* και θα επιχειρήσουμε την συλλογή δεδομένων από αρχεία *logs* αναφορικά με διάφορα *στατιστικά* της εφαρμογής μας, καθώς και από αρχεία που έχουμε *γράψει* μέσα σε αυτά. |
||||
|
|
||||
|
Η αποστολή και αποθήκευση της παραπάνω *συλλογής δεδομένων*, όπως θα δούμε και παρακάτω, θα γίνεται *αρχικά*, σε ένα *αρχείο* μέσα από το οποίο θα μπορούμε να δούμε τι πληροφορίες έχουν συλλεχθεί. Έπειτα, με το κατάλληλο *configuration*, η αποθήκευση των δεδομένων που συλλέχθηκαν θα γίνεται σε ένα *κεντρικό σημείο* και πιο συγκεκριμένα σε μια *Βάση Δεδομένων*. |
||||
|
Για τους σκοπούς του εργαστηρίου, θα χρησιμοποιήσουμε την *MongoDB replica*. |
||||
|
|
||||
|
Στην *Ενότητα 2*, θα γίνει λεπτομερής περιγραφή της αποθήκευσης δεδομένων στην *Βάση Δεδομένων*. |
||||
|
|
||||
|
=== onEvent - Τοπική / Προσωρινή Αποθήκευση Δεδομένων: |
||||
|
|
||||
|
Όπως αναφέρθηκε στην προηγούμενη υποενότητα, με τη βοήθεια του *εργαλέιου Fluentd* θα ορίσουμε *ποιες* εικονκές μηχανές θα συλλέξουν δεδομένα και από *ποια* αρχεία εισόδου για διάβασμα. |
||||
|
|
||||
|
Σε αυτό το σημείο του project, θα ορίσουμε το αρχείο εξόδου στο οποίο θα αποθηκεύονται όλα τα *συμβάντα* σε περίπτωση που υπάρξουν στα αρχεία εισόδου. |
||||
|
|
||||
|
|
||||
|
== Δεύτερη Ενότητα |
||||
|
|
||||
|
=== Δημιουργία Βάσης Δεδομένων: |
||||
|
|
||||
|
Για να μπορέσουμε να στέλνουμε δεδομένα σε μια *Βάση Δεδομένων*, θα χρειαστεί να την δημιουργήσουμε πρώτα. |
||||
|
|
||||
|
Χρησιμοποιώντας το εργαλείο *Mongo* μπορούμε να σηκώσουμε μια *replicated* Βάση Δεδομένων, να ορίσουμε το *username* και το *password* για την πρόσβασή μας σε αυτήν, καθώς και τις πόρτες για την μελλοντική σύνδεση της Βάσης με ένα Websocket, το οποίο θα καλυφθεί στην *Ενότητα 3*. |
||||
|
|
||||
|
=== onEvent - Αποθήκευση Δεδομένων στην Βάση: |
||||
|
|
||||
|
Αφότου δοκιμάσουμε την αποθήκευση των δεδομένων σε ένα αρχείο εξόδου, μπορούμε έπειτα με την κατάλληλη *διαμόρφωση* στα *configuration* αρχεία του εργαλείου *Fluentd*, να ορίσουμε πλεόν ως έξοδο για αποθήκευση δεδομένων την Βάση Δεδομένων, την οποία δημιουργήσαμε μόλις. |
||||
|
|
||||
|
== Τρίτη Ενότητα |
||||
|
|
||||
|
=== Δημιουργία Websocket: |
||||
|
|
||||
|
Για να μπορέσουμε να έχουμε*άμεση* μεταφορά των δεδομένων, θα χρειαστεί να ενεργοποιήσουμε *Server*, καθώς και την Τεχνολογία των *Sockets*, έτσι ώστε να έχουμε την δυνατότητα να ζητάμε κάποια δεδομένα από τον Server (ως Clients) και να παίρνουμε το αποτέλεσμα. |
||||
|
|
||||
|
Αυτό επιτυγχάνεται με την δημιουργία ενός *Websocket*, το οποίο το θέτουμε σε λειτουργία μέσω *Web Browser* αφότου το προγραμματίσουμε κατάλληλα για την *πόρτα* στην οποία θα "ακούει" η σύνδεση. |
||||
|
|
||||
|
Για τους σκοπούς του project, θα χρησιμοποιηθεί η Υπηρεσία *RESTful API* μέσω του Πρωτοκόλλου *REST*, για την επιχείρηση σύνδεσης ενός (ή περισσότερων) Client με έναν Server σε μια συγκεκριμένη *διεύθυνση* και σε μια συγκεκριμένη *πόρτα*. |
||||
|
|
||||
|
=== Σύνδεση Websocket και Βασικών Υπηρεσιών: |
||||
|
|
||||
|
Για να μπορέσουμε να μεταφέρουμε δεδομένα μέσω ενός Websocket, η μια λύση είναι να επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε προηγουμένως, με τις *βασικές υπηρεσίες* που δημιουργήσαμε στην *Ενότητα 1*, μέσω ορίσματος κατάλληλων *ports*. |
||||
|
|
||||
|
=== Σύνδεση Websocket και Βάσης Δεδομένων: |
||||
|
|
||||
|
Μια άλλη λύση για την μεταφορά δεδομένων μέσω ενός Websocket, είναι να επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε προηγουμένως, με την *Βάση Δεδομένων* που δημιουργήσαμε στην *Ενότητα 2*, μέσω ορίσματος κατάλληλων *ports*. |
Loading…
Reference in new issue