Docker Compose per Elasticsearch & Kibana: Impostazione e configurazione

In questo articolo, esploreremo come distribuire  Elasticsearch  e  Kibana utilizzare Docker Compose. Questi sono due componenti chiave di ELK Stack( Elasticsearch, Logstash, Kibana), che ti aiutano a cercare, analizzare e visualizzare i dati in modo efficace. Di seguito sono riportate le configurazioni dettagliate e il funzionamento di ciascun componente.

1. Elasticsearch

a. Configurazione di base

Elasticsearch è configurato per essere eseguito in un contenitore Docker con i seguenti parametri:

  • Immagine: Elasticsearch viene utilizzata l' immagine   ufficiale, versione 8.17.2.

  • Modalità a nodo singolo:  abilitata tramite la variabile di ambiente  discovery.type=single-node.

  • Sicurezza:  la sicurezza X-Pack è abilitata( xpack.security.enabled=true) e la password per l'  elastic  utente è impostata su  YVG6PKplG6ugGOw.

  • Rete:  Elasticsearch ascolta su tutte le interfacce di rete( network.host=0.0.0.0).

  • Memoria JVM:  configurata con  -Xms1g  (memoria iniziale) e  -Xmx1g  (memoria massima).

b. Ports e Volumes

  • Ports:  La porta  9200  (HTTP) e  9300  (comunicazione interna) vengono mappate dal contenitore all'host.

  • Volumes:  I dati Elasticsearch sono archiviati nel  elasticsearch-data  volume.

c. Controllo sanitario

Un healthcheck è impostato per monitorare Elasticsearch lo stato di chiamando l'  /_cluster/health  API con l'  elastic utente. Se l'API non risponde, il contenitore verrà riavviato.

2. Kibana

a. Configurazione di base

Kibana è configurato per connettersi Elasticsearch ed essere eseguito in un contenitore Docker con i seguenti parametri:

  • Immagine: Kibana viene utilizzata l' immagine   ufficiale, versione 8.17.2.

  • Elasticsearch Connessione:  l' Elasticsearch indirizzo è impostato su  http://elasticsearch:9200.

  • Autenticazione:  Kibana utilizza  kibana_user  la password  YVG6PKplG6ugGOw  per connettersi a Elasticsearch.

b. Ports e reti

  • Ports:  La porta  5601  viene mappata dal contenitore all'host per accedere Kibana all'interfaccia.

  • Reti:  Kibana è connesso a  elk-network.

c. Dipendenza da Elasticsearch

Kibana si avvia solo quando Elasticsearch è pronto, assicurando una connessione riuscita tra i due servizi.

3. Volume e rete

a. Volume

  • elasticsearch-data:  Questo volume viene utilizzato per archiviare Elasticsearch i dati, garantendone la persistenza anche se il contenitore viene eliminato.

b. Rete

  • elk-network:  Una  bridge  rete è creata per connettere Elasticsearch e Kibana fornire servizi.


4. Come utilizzare

a. Avvio dei servizi

Per avviare Elasticsearch e Kibana, eseguire il seguente comando:

docker-compose up -d

b. Creazione di un Kibana utente(se necessario)

Se vuoi utilizzare un utente dedicato per Kibana, puoi crearne uno con il seguente comando:

docker exec -it elasticsearch /bin/elasticsearch-users useradd kibana_user -p you_password-r kibana_system
c. Creazione di un Token(se si utilizzano token)

Per utilizzare un token al posto di una password, puoi crearne uno con il seguente comando:

docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-service-tokens create elastic/kibana kibana-token

5. Risoluzione dei problemi

  • Se si verificano errori, è possibile controllare i log del contenitore utilizzando:

    docker logs elasticsearch 
    docker logs kibana
  • Per riavviare Kibana:

    docker-compose down kibana && docker-compose up -d kibana

Contenuto completo del Docker Compose file

Di seguito il contenuto completo del  docker-compose-els.yml  file:

version: '3.7'  
  
services:  
  elasticsearch:  
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.2  
    container_name: elasticsearch  
    environment:  
   - discovery.type=single-node  
   - xpack.security.enabled=true  
   - ELASTIC_PASSWORD=you_password  
   - network.host=0.0.0.0  
   - ES_JAVA_OPTS=-Xms1g -Xmx1g  
    ports:  
   - '9200:9200'  
   - '9300:9300'  
    volumes:  
   - elasticsearch-data:/usr/share/elasticsearch/data  
    ulimits:  
      memlock:  
        soft: -1  
        hard: -1  
    networks:  
   - elk-network  
  
    healthcheck:  
      test: ["CMD-SHELL", "curl -u elastic:YVG6PKplG6ugGOw --silent --fail localhost:9200/_cluster/health || exit 1"]  
      interval: 10s  
      retries: 5  
      start_period: 30s  
      timeout: 5s  
  
  kibana:  
    image: docker.elastic.co/kibana/kibana:8.17.2  
    container_name: kibana
    ports:  
   - '5601:5601'  
    environment:  
   - ELASTICSEARCH_HOSTS=http://elasticsearch:9200  
   - ELASTICSEARCH_USERNAME=kibana_user  
   - ELASTICSEARCH_PASSWORD=you_password  
    networks:  
   - elk-network  
    depends_on:  
      elasticsearch:  
        condition: service_healthy  
  
volumes:
  elasticsearch-data:  
    driver: local  
  
networks:  
  elk-network:  
    driver: bridge

Conclusione

Con questa Docker Compose configurazione, puoi facilmente distribuire Elasticsearch e Kibana soddisfare le tue esigenze di ricerca, analisi e visualizzazione dei dati. Personalizza ed estendi questa configurazione per adattarla ai requisiti specifici del tuo progetto!