Im Rahmen der Demo der Microservice Architektur mit Spring Boot Netflix werden zwei fachliche Microservices benötigt. Ein einzelner Serivce reicht nicht aus weil hier der synchrone Aufruf von einem Microservice zu einem anderen dargestellt werden soll.
Die hier implementierten Microservices sind
Neben den fachlichen Services werden Infrastrukturservices benötigt:
Alle Services verfügen über einen Health-Endpoint um über den aktuellen Zustand Auskunft zu geben.
Voraussetzung: Der User, der den Maven-Build ausführt, muss docker
ausführen
können. Dazu muss der User Mitglied der Gruppe docker sein:
sudo usermod -aG docker $USER
, ggf. muss sich der User danach noch aus- und
einloggen.
Mit mvn package docker:build
kann das Image gebaut werden. Das Image ist nun
als lokales Image verfügbar. Das kann mit docker images -a
überprüft werden.
Die Services können nun nicht mehr aus der IDE gestaret werden, sondern müssen in einem Docker-Container gestartet werden. Dazu sind folgende Schritte nötig:
Annahme: Es sind keine Docker-Images mit den Services gebaut.
docker-compose build
docker-compose up -d
docker-compose stop
sudo docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs sudo docker rm
sudo docker images -a | grep "^<none>" | awk "{print \$3}" | xargs sudo docker rmi -f
sudo docker rmi microserviceeureka_primes microserviceeureka_hello-world microserviceeureka_monitor microserviceeureka_gateway microserviceeureka_configuration microserviceeureka_service-registry microserviceeureka_logstash microserviceeureka_elasticsearch microserviceeureka_kibana
Docker-Images können bspw. mittels docker-compose scale primes=2
skaliert
werden.
Der ELK-Stack kann unter der URL localhost:5601
aufgerufen werden.
Der ELK-Stack ist ein Quasi-Standard zur Behandlung von Log-Informationen. ELK steht für E = Elasticsearch, L = Logstash und K = Kibana. Elasticsearch ist eine Volltextsuche, Logstash ist ein Filter- und Transformationspipeline und Kibana ist eine Daten-Visualisierung.
Die Konfiguration des ELK-Stack ist ein wenig knifflig und leider nur auf wenigen Seiten (siehe Referenzen) übersichtlich dargestellt. Meine Konfiguration hier basiert auf den offiziellen Docker-Images. Die Konfiguration erfolgt in angepassten Dockerfiles.
Elasticsearch ist sehr ressourcenhungrig. Daher muss noch folgende Konfiguration durchgeführt werden.
https://www.elastic.co/guide/en/elasticsearch/guide/current/_file_descriptors_and_mmap.html
Elasticsearch also uses a mix of NioFS and MMapFS for the various files. Ensure that you configure the maximum map count so that there is ample virtual memory available for mmapped files. This can be set temporarily:
sysctl -w vm.max_map_count=262144
Or you can set it permanently by modifying vm.max_map_count
setting in your
/etc/sysctl.conf
.