GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Nasazení zásobníku EFK pomocí Dockeru

Monitorování a analýza protokolů se v dnešní době staly kritickými, ať už pro aplikace nebo infrastrukturu serverů/kontejnerů. Jeden z nejoblíbenějších softwarových balíků pro analýzu a monitorování protokolů, který si můžete vybrat, je Elasticsearch, Fluentd a Kibana (EFK stack).

EFK stack je distribuovaný a škálovatelný vyhledávač, který umožňuje strukturované vyhledávání a analýzy. A v tomto tutoriálu se dozvíte, jak nastavit monitorování protokolů zásobníku EFK pomocí Dockeru a centralizovat protokoly kontejnerů do zásobníku EFK.

připraveni? Čtěte dále a usnadněte si analýzu protokolů!

Předpoklady

Tento tutoriál obsahuje praktické ukázky. Chcete-li pokračovat, ujistěte se, že máte následující:

  • Linuxový hostitel – Tento příklad používá server Debian 11 Bullseye s kapacitou paměti 6 GB.
  • Docker CE (Community Edition) a Docker Compose nainstalované na vašem hostiteli Linux.

Nastavení projektu EFK Stack

EFK Stack je rámec pro agregaci protokolů a analýzu protokolů připravený pro podniky pro infrastrukturu holého kovu a kontejnerů. Před nasazením zásobníku EFK však nejprve nastavíte adresář projektu a vytvoříte konfiguraci Dockeru pro nasazení zásobníku EFK na hostiteli Dockeru.

V tomto příkladu použijete obrázky Docker s následujícími specifikacemi:

  • Elasticsearch 7.17.0 – Schopnost ukládat data pomocí rychlého vyhledávání založeného na Apache Lucene
  • Kibana 7.17.0 – agregace a kolektor dat s otevřeným zdrojovým kódem, který podporuje data JSON, a
  • Fluentd Custom image založený na v1.14.1 – software pro vizualizaci dat pro Elasticsearch.

Postup nastavení projektu zásobníku EFK:

1. Otevřete terminál a přihlaste se ke svému serveru.

2. Spusťte níže uvedené příkazy a ověřte, zda jsou ve vašem systému nainstalovány Docker i Docker Compose.

# Checking Docker version
docker --version

# Checking docker-compose version
docker-compose version

Jak vidíte níže, nainstalované verze Docker CE (Community Edition) v20.10.12 a Docker Compose v1.29.2.

3. Spuštěním následujícího příkazu vytvořte nový adresář projektu (mkdir ) a nastavte jej jako pracovní adresář (cd ).

Adresář můžete pojmenovat, jak chcete, ale v tomto tutoriálu se adresář jmenuje efk. Tento adresář bude obsahovat všechny konfigurační soubory EFK Stack v tomto tutoriálu.

mkdir -p ~/efk; cd ~/efk

4. Nyní vytvořte nový konfigurační soubor (docker-compose.yml ) pomocí preferovaného editoru a vyplňte následující konfigurace.

Níže uvedená konfigurace používá skript Docker Compose v3 a definuje všechny zásobníky EFK.

version: "3"

# Define the Docker volume named esdata for the Elasticsearch container.
volumes:
  esdata:

# Deploying three container services (fluentd, elasticsearch, and kibana)
services:
	# Deploy using the custom image automatically be created during the build process.
  fluentd: 
    build: ./fluentd
    links: # Sends incoming logs to the elasticsearch container.
      - elasticsearch
    depends_on:
      - elasticsearch
    ports: # Exposes the port 24224 on both TCP and UDP protocol for log aggregation
      - 24224:24224
      - 24224:24224/udp

	# Created using the Docker image elasticsearch:7.17.0
  elasticsearch:
    image: elasticsearch:7.17.0
    expose: # Exposes the default port 9200
      - 9200
    environment:
      - discovery.type=single-node # Runs as a single-node
    volumes: # Stores elasticsearch data locally on the esdata Docker volume
      - esdata:/usr/share/elasticsearch/data

	# Created using the Docker image kibana:7.17.0
  kibana:
    image: kibana:7.17.0
    links: # Links kibana service to the elasticsearch container
      - elasticsearch
    depends_on:
      - elasticsearch
    ports: # Runs kibana service on default port 5601
      - 5601:5601
    environment: # Defined host configuration
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200

5. Spuštěním níže uvedeného příkazu vytvořte nový adresář fluentd a přejděte do tohoto adresáře. fluentd adresář bude ukládat fluentd konfigurace služeb.

mkdir -p fluentd/; cd fluentd/

6. Uvnitř ~/efk/fluentd adresář, vytvořte nový Dockerfile pomocí preferovaného editoru a vyplňte následující konfiguraci.

Tato konfigurace vytvoří plynulý vlastní obrázek obsahující ovladač klienta elasticsearch a fluentd-plugin-elasticsearch.

Ujistěte se, že používáte stejnou verzi mezi elasticsearch a elasticsearch klientským ovladačem — tento tutoriál používá verzi 7.17.0.

# image based on fluentd v1.14-1
FROM fluentd:v1.14-1

# Use root account to use apk
USER root

# below RUN includes plugin as examples elasticsearch is not required# you may customize including plugins as you wish
RUN apk add --no-cache --update --virtual .build-deps \
        sudo build-base ruby-dev \
&& gem uninstall -I elasticsearch \
&& gem install elasticsearch -v 7.17.0 \
&& sudo gem install fluent-plugin-elasticsearch \
&& sudo gem sources --clear-all \
&& apk del .build-deps \
&& rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem

# copy fluentd configuration from host image
COPY ./conf/fluent.conf /fluentd/etc/
# copy binary start file
COPY entrypoint.sh /bin/

RUN chmod +x /bin/entrypoint.sh

USER fluent

7. Dále vytvořte další konfigurační soubor (entrypoint.sh ) pomocí preferovaného editoru a vyplňte následující konfiguraci. Tento skript se spustí, když fluentd kontejnerová služba začíná.

Níže je spouštěcí skript pro kontejnerovou službu fluentd, která spouští základní příkaz fluentd –config /fluentd/etc/fluentd.conf –plugin /etc/fluentd/plugins.

#!/bin/sh

#source vars if file exists
DEFAULT=/etc/default/fluentd

if [ -r $DEFAULT ]; then
    set -o allexport
    . $DEFAULT
    set +o allexport
fi

# If the user has supplied only arguments append them to `fluentd` commandif [ "${1#-}" != "$1" ]; then
    set -- fluentd "[email protected]"
fi

# If user does not supply config file or plugins, use the defaultif [ "$1" = "fluentd" ]; then
    if ! echo [email protected] | grep -e ' \-c' -e ' \-\-config' ; then
      set -- "[email protected]" --config /fluentd/etc/${FLUENTD_CONF}
    fi

    if ! echo [email protected] | grep -e ' \-p' -e ' \-\-plugin' ; then
      set -- "[email protected]" --plugin /fluentd/plugins
    fi
fi

8. Spuštěním níže uvedeného příkazu vytvořte nový adresář conf pod ~/efk/fluentd adresář.

mkdir -p conf

9. Nyní vytvořte plynulou konfiguraci (conf/fluentd.conf ) pomocí preferovaného editoru a vyplňte následující konfiguraci.

Tato konfigurace umožňuje plynulé kontejnerové službě přijímat zprávy protokolu a předávat je kontejnerové službě elasticsearch.

# bind fluentd on IP 0.0.0.0
# port 24224
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

# sendlog to the elasticsearch
# the host must match to the elasticsearch
# container service
<match *.**>
  @type copy
  <store>
    @type elasticsearch
    host elasticsearch
    port 9200
    logstash_format true
    logstash_prefix fluentd
    logstash_dateformat %Y%m%d
    include_tag_key true
    type_name access_log
    tag_key @log_name
    flush_interval 300s
  </store>
  <store>
    @type stdout
  </store>
</match>

10. Nakonec spusťte níže uvedené příkazy a zkontrolujte strukturu adresáře projektu EFK Stack.

Pokud nemáte příkaz tree, nainstalujte jej pomocí následujícího příkazu:apt install tree -y

# Checking list of files and directory
ls

# Checking directory structure
tree

Níže je kompletní struktura adresáře projektu EFK Stack.

Nasazení zásobníku EFK pomocí Dockeru

Nyní jste vytvořili všechny konfigurační soubory pro nasazení EFK Stack pomocí Docker a Docker Compose. Dalším krokem je nasazení EFK Stack pomocí docker-compose příkaz a nasazení proběhne ve vašem projektovém adresáři (~/efk ).

1. Nejprve spusťte níže uvedený příkaz a změňte pracovní adresář na efk adresář projektu.

cd ~/efk/

2. Dále spusťte docker-compose příkaz níže k nasazení (up ) systém analýzy a monitorování protokolů EFK Stack.

Tento příkaz automaticky stáhne obrazy Docker Elasticsearch a Kibana. A obraz Fluentd Docker se automaticky vytvoří pomocí Dockerfile v plynulém adresář.

Nasazení může nějakou dobu trvat v závislosti na specifikacích hostitele Docker.

docker-compose up -d

Níže je snímek obrazovky procesu sestavení obrázku Fluentd Docker.

A níže je snímek obrazovky, který ukazuje, že nasazení je dokončeno a služba kontejneru Kibana je spuštěna.

3. Spusťte každý níže uvedený příkaz a zkontrolujte protokoly procesu sestavení zásobníku EFK. Vždy spusťte tyto příkazy, kdykoli se v procesu nasazení objeví chyba.

# Checking logs for service fluentd
docker-compose logs fluentd

# Checking logs for service kibana
docker-compose logs kibana

Níže je zpráva protokolu, když je spuštěna služba plynulého kontejneru.

A níže je protokol pro kontejner kibany.

4. Nyní spusťte níže uvedený příkaz a zkontrolujte stav všech kontejnerových služeb (ps ).

docker-compose ps

Jak vidíte níže, kontejnerová služba EFK Stack je Up. Poznamenejte si název kontejneru elasticsearch (efk_elasticsearch_1), abyste v dalším kroku ověřili, že kontejner správně běží.

5. Dále spusťte níže uvedený příkaz a ověřte službu kontejneru elasticsearch. Tento příkaz vytiskne podrobné nastavení efk_elasticsearch_1 kontejner.

docker inspect efk_elasticsearch_1

Jak můžete vidět níže, kontejner efk_elasticsearch_1 získá IP adresu 172.18.0.2.

6. Nakonec spusťte níže uvedený příkaz pro přístup a ověření kontejneru elasticsearch podle IP adresy (172.18.0.2 ). Port 9200 je výchozí port pro kontejner elasticsearch.

curl 172.18.0.2:9200

Pokud na vašem počítači běží kontejner elasticsearch, uvidíte výstup podobný tomu níže.

Konfigurace vzoru indexu Kibana

Nyní, když jste dokončili nasazení EFK Stack v prostředí Docker, otevřete Kibana z vašeho webového prohlížeče. Nastavíte vzor indexu pro monitorování a analýzu protokolů.

1. Otevřete svůj oblíbený webový prohlížeč a přejděte na IP adresu serveru následovanou servisním portem Kibana 5601 (tj. http://172.16.1.10:5601).

2. Dále klikněte na Prozkoumat sám tlačítko na uvítací stránce níže.

3. Klikněte na Správa zásobníku možnost nastavení vzoru indexu Kibana v sekci Správa.

4. Na Kibaně v levé části nabídky klikněte na nabídku Vzory indexu a klikněte na Vytvořit vzor indexu tlačítko pro vytvoření nového vzoru indexu.

5. Nyní zadejte vzor indexu Název jako plynule- *, nastavte pole Časové razítko na adresu @timestamp a klikněte na Vytvořit vzor indexu tlačítko pro potvrzení nastavení indexového vzoru.

Na pravé straně můžete vidět dostupné vzory indexů od plynule, jako je plynule-%Y%m%d. Formát data %Y%m%d je založen na plynulé konfiguraci (fluentd.conf ).

6. Nakonec klikněte na nabídku vlevo nahoře (elipsa) a poté klikněte na tlačítko Objevit menu pro zobrazení sledování protokolů.

Níže je snímek obrazovky řídicího panelu monitorování a analýzy protokolů Kibana. Všechny uvedené protokoly jsou převzaty z Elasticsearch a odeslány agregací protokolů Fluentd.

Spuštění kontejneru Docker s ovladačem Fluentd Log Driver

Po konfiguraci vzoru indexu Kibana spustíte kontejner Docker s jednotkou protokolů Fluentd, která automaticky odešle protokoly do zásobníku EFK.

1. Spusťte níže uvedený příkaz ke stažení obrazu NGINX. alpine verze je menší než normální obrázky založené na Ubuntu, CentOS nebo Fedoře.

docker pull nginx:alpine

2. Dále spusťte níže uvedený příkaz a spusťte nový kontejner NGINX (nginx_container ) v odděleném režimu (-d ).

Příkaz také nastaví jednotku protokolu na Fluentd (–log-driver=fluentd) a zpřístupní port 8080 na hostitelském počítači Docker pro kontejner (nginx_container).

docker run --name nginx_container -d --log-driver=fluentd -p 8080:80 nginx:alpine

3. Po spuštění kontejneru spusťte docker příkaz níže pro kontrolu všech běžících kontejnerů.

docker ps

Měli byste vidět, že nginx_container je v provozu a běží na hostitelském portu 8080.

4. Nyní spusťte níže uvedený příkaz pro přístup k nginx_container a generovat přístupové protokoly.

curl localhost:8080

Případně otevřete novou kartu ve webovém prohlížeči a zadejte IP adresu serveru následovanou portem 8080 (tj. http://172.168.1.10:8080).

Pokud vše půjde dobře, uvidíte výchozí index.html stránku z nginx_container.

5. Nakonec se přepněte zpět na řídicí panel Kibana a klikněte na tlačítko Objevit menu na levé straně.

Klikněte na dotaz container_name :nginx_container v poli KQL (Kibana Query Language) a uvidíte protokoly z nginx_container, jak je znázorněno níže.

Závěr

V tomto kurzu pro monitorování a analýzu protokolů pomocí Dockeru jste se naučili, jak nasadit EFK Stack (Elasticsearch, Fluentd a Kibana). Také jste se naučili, jak nastavit protokolování pro kontejner Docker pomocí ovladače protokolu Fluentd. A v tomto okamžiku máte nyní plně funkční monitorování protokolů pro aplikace a služby.

V další fázi by vás mohlo zajímat použití KQL (Kibana Query Language) k vizualizaci monitorování a analýzy protokolů.


Docker
  1. Nainstalujte server Wireguard VPN pomocí Docker

  2. Nastavte Nextcloud s Redis pomocí Dockeru

  3. Jak nainstalovat Jenkins pomocí Docker

  1. Nainstalujte ModSecurity s Apache v kontejneru Docker

  2. Jak nasadit mikroslužby s Dockerem

  3. Jak nasadit aplikace s Rancherem

  1. Dockerizing LEMP Stack pomocí Docker-Compose na Ubuntu

  2. Docker Guide:Deploying Ghost Blog with MySQL a Traefik with Docker

  3. Jak spustit zásobník ELK na kontejneru Docker