Search

docker-elk 셋업 & django 연결

카테고리
Back-end
태그
Django
ELK
Docker
게시일
2023/02/07
수정일
2024/02/24 09:41
시리즈
1 more property

1. 개요

1.1 Version 이슈

MAC OS에서 intel CPU 기준으로 docker-elk를 셋업할 때 버전 정보에 따라 셋업이 안 되는 케이스가 발생하였습니다. 8.2, 8.19, 7.17 등 다양한 케이스로 docker-elk를 셋업해보았지만 여러 문제가 발생하여 셋업이 원활하게 진행되지 않았습니다. 여러 버전 중 성공한 케이스는 7.12.1 버전이며, 해당 버전을 기준으로 셋업 방법을 작성해보도록 하겠습니다.

docker-elk github

$ git clone -b release-7.x https://github.com/deviantony/docker-elk.git
Bash
복사

Version Settings

# cat ~/docker-elk/.env # ELASTIC_VERSION=7.17.3 ELASTIC_VERSION=7.12.1 ## Passwords for stack users # # User 'elastic' (built-in) # # Superuser role, full access to cluster management and data indices. # https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html ELASTIC_PASSWORD='changeme' # User 'logstash_internal' (custom) # # The user Logstash uses to connect and send data to Elasticsearch. # https://www.elastic.co/guide/en/logstash/current/ls-security.html LOGSTASH_INTERNAL_PASSWORD='changeme' # User 'kibana_system' (built-in) # # The user Kibana uses to connect and communicate with Elasticsearch. # https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html KIBANA_SYSTEM_PASSWORD='changeme'
Bash
복사

Elasticsearch xpack license

license 정보를 basic으로 설정하여 build해야 kibana에서 라이센스 에러가 발생하지 않습니다.
--- ## Default Elasticsearch configuration from Elasticsearch base image. ## https://github.com/elastic/elasticsearch/blob/7.17/distribution/docker/src/docker/config/elasticsearch.yml # cluster.name: "docker-cluster" network.host: 0.0.0.0 ## X-Pack settings ## see https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-settings.html # xpack.license.self_generated.type: basic xpack.security.enabled: true
Bash
복사

1.2 apm-server 추가

APM을 이용하여 로깅을 하기 위해서는 apm-server를 실행해야 합니다. 해당 apm-server 실행을 위한 가이드는 Setup 진행하는 과정에서 함께 가이드 진행하도록 하겠습니다.

2. Setup

2.1 Build

github에서 docker-elk를 clone할 경우 release-7.x 버전의 브랜치를 받아와야 합니다.
10:50:13 > rootsik1221@hwangjeongsig-ui-iMac > ...2022.Works/elk_test/docker-elk-for-docs > $ release-7.x ✔ > $ $ ll total 56 -rw-r--r-- 1 rootsik1221 staff 1.1K 5 11 10:50 LICENSE -rw-r--r-- 1 rootsik1221 staff 19K 5 11 10:50 README.md -rw-r--r-- 1 rootsik1221 staff 2.6K 5 11 10:50 docker-compose.yml drwxr-xr-x 5 rootsik1221 staff 160B 5 11 10:50 elasticsearch drwxr-xr-x 9 rootsik1221 staff 288B 5 11 10:50 extensions drwxr-xr-x 5 rootsik1221 staff 160B 5 11 10:50 kibana drwxr-xr-x 6 rootsik1221 staff 192B 5 11 10:50 logstash drwxr-xr-x 8 rootsik1221 staff 256B 5 11 10:50 setup
Bash
복사
해당 브랜치를 받았고 docker-compose 빌드를 수행해주어야 합니다.

docker-compose up & build

$ docker-compose up --build
Bash
복사

2.2 Issues

version conflict

만약 버전 정보를 잘못입력하여 설치하였을 경우, container, image, volume을 모두 삭제한 후 다시 docker-compose up —build를 수행해주어야 합니다.

2.3 build & up complete

빌드 및 구동 성공을 확인하기 위해서 localhost:9200, localhost:5601 으로 들어갑니다.

elasticsearch 확인

계정정보는 elastic / changeme (혹은 .env에서 설정한 비밀번호)를 입력합니다.
// http://localhost:9200 { "name" : "b5c991100f83", "cluster_name" : "docker-cluster", "cluster_uuid" : "g-BJtcmZRo6pXEERzgBYPg", "version" : { "number" : "7.12.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7", "build_date" : "2021-04-20T20:56:39.040728659Z", "build_snapshot" : false, "lucene_version" : "8.8.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
JSON
복사

kibana 확인

계정정보는 elastic / changeme (혹은 .env에서 설정한 비밀번호)를 입력합니다.

3 Kibana settings

3.1 APM

로컬에서 kibana 세팅을 위해 APM 탭으로 들어갑니다. 아래의 Setup instructions 버튼을 누르게 되면 가이드 페이지로 이동하게 됩니다.

Download and unpack APM Server

APM 서버를 다운로드 받아 실행해주어야 합니다. 해당 세팅의 경우 macOS에 맞춰 세팅을 해줘야 하기 때문에 탭을 잘 확인하고 다운로드 받아주시기 바랍니다.
curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.12.1-darwin-x86_64.tar.gz tar xzvf apm-server-7.12.1-darwin-x86_64.tar.gz cd apm-server-7.12.1-darwin-x86_64/
Bash
복사

Edit the configuration

apm-server.yml 파일에서 다음과 같은 세팅을 변경해줍니다. 여기서 hosts는 default로 localhost:9200으로 돼 있으며, username과 password가 주석처리 돼 있습니다. 해당 주석을 제거하고, elasticsearch 접근 계정정보를 입력해줍니다.
output.elasticsearch: hosts: ["<es_url>"] username: <username> password: <password>
Bash
복사
example

Start APM Server

위와 같이 설정이 완료됐다면 apm-server를 실행해줍니다.
./apm-server -e
Bash
복사
만약 apm server가 제대로 구동되지 않았다면 다음과 같은 상태로 표시됩니다.
만약 apm server가 제대로 구동돼 있다면 다음과 같은 상태로 표시됩니다.

3.2 Django

APM Server까지 잘 세팅됐다면, 로그를 전달해주는 소스가 필요합니다. 이를 APM에서는 Agent라고 부르며 더 자세히는 Django에 설치된 elastic-apm 라이브러리를 agent라고 합니다. Django에서 데이터를 준다고 가정했을 때 다음과 같은 세팅이 필요합니다.

Install the APM agent

django에서는 elastic-apm을 설치해주어야 합니다. 버전에 따라 다를 수 있습니다.
$ pip install elastic-apm
Bash
복사

Configure the agent

아래와 같이 INSTALLED_APPS, ELASTIC_APM, MIDDLEWARE를 설정해주어야 합니다.
# Add the agent to the installed apps INSTALLED_APPS = ( 'elasticapm.contrib.django', # ... ) ELASTIC_APM = { # Set the required service name. Allowed characters: # a-z, A-Z, 0-9, -, _, and space # APM에서 보이도록 하는 이름입니다. 'SERVICE_NAME': 'fep-local', # Use if APM Server requires a secret token # Local에서 SECRET TOKEN 사용 설정을 해주지 않았다면 불필요합니다. 'SECRET_TOKEN': '', # Set the custom APM Server URL (default: http://localhost:8200) # 로컬에서 모든 서비스를 구동할 경우에는 localhost:8200을 입력해줍니다. 이외에는 IP를 입력해주도록 합니다. 'SERVER_URL': '', # Set the service environment # 로컬 내에서는 불필요합니다. 'ENVIRONMENT': 'production', } # To send performance metrics, add our tracing middleware: MIDDLEWARE = ( 'elasticapm.contrib.django.middleware.TracingMiddleware', #... )
Python
복사

Agent status

만약 데이터를 제대로 넘겨주지 않는 상태일 경우 다음과 같은 상태로 보입니다.
다만, 로컬에서는 해당 상태가 잘 반영되지 않을 수 있기 때문에 Django를 실행하여 API 구동을 해본 다음 APM Services로 들어가 직접 확인해보는 것이 좋습니다.
여기서 fep-local이라고 되어 있는 서비스 이름이 보일 것입니다. 해당 서비스 이름은 ELASTIC_APM 내의 SERVICE_NAME입니다.

3.3 Complete