diff --git a/README.html b/README.html new file mode 100644 index 0000000..b54d926 --- /dev/null +++ b/README.html @@ -0,0 +1,248 @@ + + + + + + + + + + + + Data Collector Service - README + + + + + +
+
+
+
+
+
Πλέγμα Δικτύου μεταξύ 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

    +
  • +
+
+
+
+
+
+
+

1. Πρώτη Ενότητα

+
+
+

1.1. Δημιουργία Δικτύου:

+
+

Για να μπορέσουμε να θέσουμε σε λειτουργία τις εικονικές + μηχανές αλλά και να τις διαμορφώσουμε κατάλληλα έτσι + ώστε να συλλέγουν και να μεταφέρουν δεδομένα, + θα χρειαστεί να δημιουργήσουμε ένα δίκτυο, πάνω στο + οποίο θα γίνουν οι επιθυμητές ενέργειες.

+
+
+
+

1.2. Αυτόματη Εγκατάσταση Προγράμματος Σύλλογης Δεδομένων:

+
+

Για να μπορέσουμε να συλλέξουμε δεδομένα από ένα σύνολο εικονικών μηχανών + και να τα στείλουμε σε διάφορα σημεία, θα πρέπει οι εικονικές μηχανές + να έχουν εγκαταστήσει ορισμένα πακέτα που θα περιέχουν + ειδικά εργαλεία για την κάθε διαδικασία που επιθυμούμε + να εκτελέσουν.

+
+
+

Χρησιμοποιούμε το Ansible, με το οποίο δίνουμε τις διευθύνσεις + των εικονικών μηχανών που επιθυμούμε να κάνουν τις απαραίτητες εγκαταστάσεις πακέτων, + σε ένα αρχείο Inventory, καθώς και σε ένα άλλο αρχείο + fluentd.conf.yml δίνουμε ορισμένα πακέτα που θέλουμε + να εγκατασταθούν στις εικονικές μηχανές.

+
+
+

Για την συλλογή δεδομένων θα χρησιμοποιήσουμε ένα ειδικό εργαλείο, + το οποίο έχει την δυνατότητα να συλλέγει δεδομένα από διάφορες πηγές + (π.χ. system logs, apache logs, web app / mobile logs, + IoT Sensors logs κλπ.) και να τα στέλνει σε διάφορα + σημεία που επιθυμούμε (π.χ. AWS, Hadoop, + Βάσεις Δεδοένων).

+
+
+

Το εργαλείο που θα χρησιμοποιήσουμε ονομάζεται Fluentd και θα επιχειρήσουμε την συλλογή δεδομένων από αρχεία logs αναφορικά με διάφορα στατιστικά της εφαρμογής μας, + καθώς και από αρχεία που έχουμε γράψει μέσα σε αυτά.

+
+
+

Η αποστολή και αποθήκευση της παραπάνω συλλογής δεδομένων, + όπως θα δούμε και παρακάτω, θα γίνεται αρχικά, σε + ένα αρχείο μέσα από το οποίο θα μπορούμε να δούμε + τι πληροφορίες έχουν συλλεχθεί. Έπειτα, με το κατάλληλο configuration, + η αποθήκευση των δεδομένων που συλλέχθηκαν θα γίνεται σε ένα κεντρικό σημείο και πιο συγκεκριμένα σε μια Βάση Δεδομένων. Για τους + σκοπούς του εργαστηρίου, θα χρησιμοποιήσουμε την MongoDB replica.

+
+
+

Στην Ενότητα 2, θα γίνει λεπτομερής περιγραφή της αποθήκευσης + δεδομένων στην Βάση Δεδομένων.

+
+
+
+

1.3. onEvent - Τοπική / Προσωρινή Αποθήκευση Δεδομένων:

+
+

Όπως αναφέρθηκε στην προηγούμενη υποενότητα, με τη βοήθεια του εργαλέιου Fluentd θα ορίσουμε ποιες εικονκές μηχανές θα συλλέξουν δεδομένα + και από ποια αρχεία εισόδου για διάβασμα.

+
+
+

Σε αυτό το σημείο του project, θα ορίσουμε το αρχείο εξόδου στο οποίο + θα αποθηκεύονται όλα τα συμβάντα σε περίπτωση που + υπάρξουν στα αρχεία εισόδου.

+
+
+
+
+
+

2. Δεύτερη Ενότητα

+
+
+

2.1. Δημιουργία Βάσης Δεδομένων:

+
+

Για να μπορέσουμε να στέλνουμε δεδομένα σε μια Βάση Δεδομένων, + θα χρειαστεί να την δημιουργήσουμε πρώτα.

+
+
+

Χρησιμοποιώντας το εργαλείο Mongo μπορούμε να σηκώσουμε + μια replicated Βάση Δεδομένων, να ορίσουμε το username και το password για την πρόσβασή μας σε αυτήν, καθώς + και τις πόρτες για την μελλοντική σύνδεση της Βάσης με ένα Websocket, + το οποίο θα καλυφθεί στην Ενότητα 3.

+
+
+
+

2.2. onEvent - Αποθήκευση Δεδομένων στην Βάση:

+
+

Αφότου δοκιμάσουμε την αποθήκευση των δεδομένων σε ένα αρχείο εξόδου, + μπορούμε έπειτα με την κατάλληλη διαμόρφωση στα configuration αρχεία του εργαλείου Fluentd, να ορίσουμε πλεόν ως + έξοδο για αποθήκευση δεδομένων την Βάση Δεδομένων, την οποία δημιουργήσαμε + μόλις.

+
+
+
+
+
+

3. Τρίτη Ενότητα

+
+
+

3.1. Δημιουργία Websocket:

+
+

Για να μπορέσουμε να έχουμεάμεση μεταφορά των δεδομένων, + θα χρειαστεί να ενεργοποιήσουμε Server, καθώς και + την Τεχνολογία των Sockets, έτσι ώστε να έχουμε την + δυνατότητα να ζητάμε κάποια δεδομένα από τον Server (ως Clients) και + να παίρνουμε το αποτέλεσμα.

+
+
+

Αυτό επιτυγχάνεται με την δημιουργία ενός Websocket, + το οποίο το θέτουμε σε λειτουργία μέσω Web Browser αφότου το προγραμματίσουμε κατάλληλα για την πόρτα στην οποία θα "ακούει" η σύνδεση.

+
+
+

Για τους σκοπούς του project, θα χρησιμοποιηθεί η Υπηρεσία RESTful API μέσω του Πρωτοκόλλου REST, για την επιχείρηση σύνδεσης + ενός (ή περισσότερων) Client με έναν Server σε μια συγκεκριμένη διεύθυνση και σε μια συγκεκριμένη πόρτα.

+
+
+
+

3.2. Σύνδεση Websocket και Βασικών Υπηρεσιών:

+
+

Για να μπορέσουμε να μεταφέρουμε δεδομένα μέσω ενός Websocket, η μια + λύση είναι να επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε + προηγουμένως, με τις βασικές υπηρεσίες που δημιουργήσαμε + στην Ενότητα 1, μέσω ορίσματος κατάλληλων ports.

+
+
+
+

3.3. Σύνδεση Websocket και Βάσης Δεδομένων:

+
+

Μια άλλη λύση για την μεταφορά δεδομένων μέσω ενός Websocket, είναι να + επιχειρήσουμε την σύνδεση του Websocket που δημιουργήσαμε προηγουμένως, + με την Βάση Δεδομένων που δημιουργήσαμε στην Ενότητα 2, + μέσω ορίσματος κατάλληλων ports.

+
+
+
+
+
+ + + \ No newline at end of file