docker-ELK, Filebeat, ๊ทธ๋ฆฌ๊ณ docker compose - #2
์๋ ๊ธ์ ์ด์ด์ง๋ ๊ธ์ ๋๋ค๐ณ
docker-ELK, Filebeat, ๊ทธ๋ฆฌ๊ณ docker compose - #1
์ค๋๋ ์๋ก์ด ๊ฑธ ๊ฑด๋๋ฆฌ๊ณ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์น๊ตฌ๋ค๊ณผ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์์ ๋์ ์ฒ์ ELK ์คํ๊ณผ docker๋ฅผ ์จ๋ณด๊ฒ ์๊ฒผ๋ค์๐ณ๐ณ ์๋ ์ด๊ฒ์ ๊ฒ ๋ง์ด ๊ธ์ด๋ชจ์ผ๋ฉด์ ์งํํ๋ ์ค์ด๋ผ
morgenmuffel.tistory.com
์ค๋์ Filebeat๋ฅผ log ํ์ผ์ ์ฐ๊ฒฐํ๊ณ , ์ฝ์ด์จ ๊ฐ์ Logstash๋ก ๋ณด๋ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๊ฒ๊น์ง ํด๋ณด๋ ค๊ณ ํฉ๋๋ค!
์ผ๋จ ์์ํ๊ธฐ ์ ์ ์ด์ ์๋ฒฝ๊น์ง log ๊ด๋ จ ์์ ํ๋ฉด์ ํธ๋ ํ๋ ๋ด์ฉ์
ํ์ด์ฌ ์ ๋ฌธ๊ฐ ์น๊ตฌ๊ฐ ์์นจ์ ์ผ์ด๋์ ์ฝ๊ณ ์ฝ๋ฉํธ๋ฅผ ์คฌ๋๋ฐ
- logger๊ฐ ์น ํ๋ ์์ํฌ์์ ์ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ file writer ๋์ logger๋ฅผ ์ฐ๋๊ฒ ์ข๋ค
- ํ์ด์ฌ logging์ด ์๋ ๋ณต์กํด์ ์ฌ์ง์ด ์ฑ ๋ ์๋ ์์ค์ด๋ค
- ํ์ด์ฌ์ ์ด๋ค ๋์ด ์คํ์ํค๋์ง์ ๋ฐ๋ผ ๋ฉ์ธ ์ํธ๋ฆฌ๊ฐ ๋ฐ๋๋ค(__name__ ๊ด๋ จ)
- werkzeug๋ Flask ๋ด๋ถ์ ์๋ ์์ด๋ผ์ ๊ฒ์ํ ๋ ํ์ด์ฌ logging ๋ง๊ณ Flask logging์ผ๋ก ๊ฒ์ํด์ผ ํ์ ๊ฒ์ด๋ค
๋ฑ๋ฑ.... ํํ ์ด ์น๊ตฌ๊ฐ ๊ทธ ๋ ์๋ฒฝ 3์๋ฐ์ ์ ๋ค์๋์ใ ใ
๊ทธ๋๋ ์ธ๋ชจ์๋ ๋๋ฆฌ๋ฅผ ์น ๊ฒ ๊ฐ์์ ๋๋ฆ ๋ง์กฑ์ค๋ฌ์ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋ ๊ตฌ์กฐ ๊ด๋ จํด์ ๋ค ์๋ฒ์ธ๋ฐ ๊ตณ์ด -server๋ฅผ ๋ถ์ด์ง ์์๋ ๋ ๊ฒ ๊ฐ๋ค๋ ์ฝ๋ฉํธ์
docker ํ์ผ๋ค์ docker/ ํด๋์ ๋ค ๋ชจ์๋๋ฉด ์ข๊ฒ ๋ค๋ ์๊ธฐ๊ฐ ์์ด์ ํด๋ ๊ตฌ์กฐ๋ฅผ ์์ ํ๊ตฌ์.
์ด๊ฑด ์ด๋ฒ์ ์ ์ฉํ ๋ด์ฉ์ ์๋์ง๋ง
Docker Hub
hub.docker.com
์ด ์น๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด Dockerfile์ ๊ตณ์ด ์์ฑํ์ง ์์๋ ํ์ด์ฌ์ผ๋ก ์๋ฒ๋ฅผ ๋์ธ ์ ์๋ค๊ณ ํ๋ค์.
์ด๊ฑด ๋์ค์ ์ธ ์ผ์ด ์์๊น ์ถ์ด ์ฌ๋ ค๋ก๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋๋ฒ์ ๋ณด์ จ๋ค์ํผ ์๋ ์ค๊ฐ์ค๊ฐ ์ฝ์ง์ด ๋ง์์
์ง๋๋ฒ์๋ ์์ ํ ์์๋๋ก ์ญ ์ ์๋๋ฐ ๊ทธ๋ฌ๊ธฐ์ ๊ณ ์น ๋ด์ฉ์ด ๋๋ฌด ๋ง์ ์ด์ ๋ถํฐ๋ ์ฑ๊ณตํ ๋ด์ฉ๋ง ์ ์ผ๋ ค๊ณ ํฉ๋๋ค!
์ ๊ฐ ๊ณ ์ํ๊ฑธ ๋ค๊ฐ์ด ๋ณผ ํ์๋ ์์ผ๋๊น์๐คฃ
3. Filebeat ์ค์
์๋ ๋๋ํ ๋ง์ ๋ถ๋ค์ด Filebeat ์ค์ ์ ๋ํด ์ ๋ฆฌํด์ฃผ์ ์ ์ฐธ๊ณ ํ ๊ธ์ด ๋ง๋ค์!
์ผ๋จ Filebeat ์ค์ ๊ด๋ จ๋ ๋ด์ฉ๋ ์ ๊ฐ ์์ ํ๊ณ ์๋ ํด๋์์ ์งํํ๋๊ฒ ๋ง๋ ๊ฒ ๊ฐ์์
๊ธฐ์กด ํด๋๋ฅผ ์๋์ ๊ฐ์ด ์์ ํด์ฃผ์์ต๋๋ค.
morgen-muffel
โโdocker
โ โโdocker-compose-test.yml
โโtest
โ โโ... (๊ธฐ์กด๊ณผ ๋์ผ)
โโlog
โ โโelasticsearch/
โ โโkibana/
โ โโlogstash/
โ โโfilebeat
โ โโconfig
โ โโfilebeat-test.yml
โ โโtest.Dockerfile
โ โโdocker-compose.yml
์ผ๋จ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก test.Dockerfile์ ์์ฑํ๊ธฐ ์ํด ์ฐธ๊ณ ํ ๋ด์ฉ์ ์ด๊ฑฐ๊ตฌ์.
Run Filebeat on Docker | Filebeat Reference [7.13] | Elastic
Run Filebeat on Dockeredit Docker images for Filebeat are available from the Elastic Docker registry. The base image is centos:7. A list of all published Docker images and tags is available at www.docker.elastic.co. These images are free to use under the E
www.elastic.co
FROM docker.elastic.co/beats/filebeat:7.13.4
COPY /config/filebeat-test.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat
USER ๊ถํ ๊ฐ์ ๊ฒฝ์ฐ์๋ ํ์ํ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ผ๋จ ๋ฃ์ด๋์์ต๋๋ค. ํ์์์ผ๋ฉด ๋์ค์ ๋นผ์ผ์ฃ ๋ญ ใ ใ
๊ทธ๋ฆฌ๊ณ filebeat-test.yml ํ์ผ์ ์์ฑํ๊ธฐ ์ํด์
Configure Filebeat | Filebeat Reference [7.13] | Elastic
See the Config File Format for more about the structure of the config file.
www.elastic.co
์ด ๋ด์ฉ์ ์ฐธ๊ณ ํด ์ฌ๊ธฐ์ input๊ณผ ouput๋ง ์ ์ด์ฃผ๋ ์์ผ๋ก ์งํํ์ต๋๋ค.
input์๋ test-server๊ฐ ๋ก๊ทธ๋ฅผ ๋จ๊ถ์ฃผ๋ ์์น๋ฅผ ์ ์ผ๋ฉด ๋๋๋ฐ, ์๋ docker compose์์ ์ ์ ๊ฒ์ฒ๋ผ ๋ณผ๋ฅจ์ ๊ณต์ ํ๊ฒ๋ ํด์ค ๋ค ๊ทธ ์์น๋ฅผ ์ง์ ํด ์ฃผ์์ต๋๋ค.
output์ docker-elk ๋ด์ฉ๋ฌผ์ ๋ณด๋ 5044 ํฌํธ๋ก ๋ฐ๊ณ ์์ด์ ์ด๋ฅผ ์ฐธ๊ณ ํด ์์ฑํด ์ฃผ์์ต๋๋ค.
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/share/filebeat/test_logs/test.log
# ================================== Outputs ===================================
# ------------------------------ Logstash Output -------------------------------
output.logstash:
hosts: ["logstash:5044"]
์ฌ๊ธฐ์ logstash์ 127.0.0.1:5044 ์ฒ๋ผ ์ ์ด์ฃผ์ง ์์ ์ด์ ๋ ๊ทธ๋ ๊ฒ ํด์ ์ ๋๋ก ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค..
์ด์ ๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๊ณ์ tcp connection refused๊ฐ ๋ ์
์๋ docker compose ์ฒ๋ผ elk docker compose์์ ์ฌ์ฉํ๊ณ ์๋ network์ ๋ถ๋ ์์ผ๋ก ์ธํ ํ๊ณ ,
๊ทธ๋์ logstash:5044๋ก ์ฌ์ฉํ์ต๋๋ค.
์๋์ฐ์์ WSL2๋ก ๋์ปค๋ฅผ ๋์์ ๊ทธ๋ฐ๊ฑด์ง... ์ฐ์ฐํ์ง๋ง ์ผ๋จ์ ํ ์คํธ์ฉ์ด๋๊น ๋์ด๊ฐ์ต๋๋ค.
4. docker compose ์์
์ผ๋จ์ ์ง๋๋ฒ์ ์์ฑํ docker compose ํ์ผ์ ์์ ํด์ฃผ๋๋ก ํฉ์๋ค.
์ง๊ธ์ flask๋ฅผ ๋์ฐ๋ ๊ฒ๋ง ๋์ด์๋๋ฐ, ์ฌ๊ธฐ์ Filebeat๋ ๋์ด๋ค๊ณ ์ ์ด์ค์ผ ํ๊ฒ ์ฃ .
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ ํด๋ ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํด์ ๋น๋ ๊ฒฝ๋ก ๋ฑ๋ ์์ ํด ์ฃผ์์ต๋๋ค.
๊ด๋ จ๋ ๋ด์ฉ์ ์๋ ๋ด์ฉ๊ณผ ์ง์ธ์ ์กฐ์ธ์ ์ฐธ๊ณ ํ์ต๋๋ค.
Compose file version 3 reference
docs.docker.com
version: "3.9"
services:
web:
build: ../test
ports:
- "8000:8000"
volumes:
- test_log:/code/logs
filebeat:
build:
context: ../log/filebeat/
dockerfile: test.Dockerfile
container_name: testfilebeat
volumes:
- test_log:/usr/share/filebeat/test_logs
networks:
- log_elk
volumes:
test_log:
networks:
log_elk:
external: true
์ volumes ๋ถ๋ถ์ด ์๋นํ ํท๊ฐ๋ ธ๋๋ฐ
๋ ์ปจํ ์ด๋๊ฐ ๊ณต์ ํ ์ ์๋ volume์ ์์ฑํ๊ณ , ๊ฐ ์ปจํ ์ด๋์ ๋ด๋ถ ํด๋์ mount ํด์ฃผ๋ ํ์์ผ๋ก ์ดํดํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ปจํ ์ด๋์ "app-volume:location_in_the_container" ๊ฐ์ ์์ผ๋ก ์ ์ด์ฃผ๋ ๊ฒ์ด๊ตฌ์.
ํฌํธ๋ 5000 ํฌํธ๊ฐ docker-elk์์ ์ ์ ํ๊ณ ์์ด์ 8000์ผ๋ก ๋ฐ๊ฟ์ฃผ์์ต๋๋ค.
์ด์ ๊ด๋ จํด์ Flask์ Dockerfile๋ ์๋์ ๊ฐ์ด ์์ ํด ์ฃผ์๋๋ฐ
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 8000
COPY . .
CMD ["flask", "run", "--port=8000"]
์์ง EXPOSE์ CMD์์ ๋๊ฒจ์ฃผ๋ --port parameter์ docker compose์ ports๋ ์ด๋ป๊ฒ ์ฐ๊ด๋๋์ง ๋ชจ๋ฅด๊ฒ ๊ตฐ์...
์ด๊ฑด ์ฐจ์ฐจ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค....
๋ง์ง๋ง์ ์๋ networks๊ฐ 3๋ฒ์์ ์ธ๊ธํ ๋ด์ฉ์ด๊ตฌ์.
์๋ก ๋ง๋๋๊ฒ ์๋๋๊น external: true๋ก ํด์ค๋๋ค.
์ด๋ ๊ฒ ํ๊ณ ๋๋ฉด kibana์์ ๋ก๊ทธ๊ฐ ๋ณด์ ๋๋ค!
๋์ ์ง๋๋ฒ์ ๋๋ฌด ์ ๋๊ฒ formattingํ๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ๊ฐ ํ์ค ํ์ค ์ชผ๊ฐ์ ธ์ ๋ณด์ ๋๋ค
์ง๊ธ ๋๋ฌด ์ง์ณ์ ์ปจํ ์ด๋ ๋ณผ๋ฅจ ์ด๋ฏธ์ง ๋ค ์ญ์ ํ ์ํ๋ผ์
๋ค์ ๊ธ์์ kibana์์ ์กฐํํ๋ ๋ด์ฉ์ ๋ค๋ฃฐ๊ฒ์!