원래 윈도우 데스크탑의 virtual machine에 올려놨던 eve-ng와 ubuntu vm을 이용해 ELK 네트워크 모니터링 시스템을 구축하고 가상 네트워크 장비와 연동하려고 했으나.. 윈도우 PC의 eve-ng가 먹통이 돼버려서..ㅎㅎ 그냥 맥북으로 해보려고 한다!
그냥 리눅스 환경에서 바로 ELK를 구축할 수 있지만, 굳~이 Docker를, 그것도 docker run을 이용해 elk를 바로 실행하는 것이 아닌 우분투 컨테이너에 elk를 설치해서 실행하는 이중 헛짓거리(?)를 하는 이유는 그냥 이것저것 해보고싶어서 ㅎㅅㅎ..
요즘 Docker에 대해 관심이 생겨서 명령어에 익숙해질 겸, 예전에 썼던 우분투 환경에서의 ELK 설치 글도 마무리해야하기 때문에 겸사겸사 여러 오픈소스를 활용해보려고 한다. 문제는 eve-ng를 연동할 수 있느냐인데.. 일단 그건 나중에 생각해보자 ㅎ
그럼 Docker로 우분투 컨테이너를 실행하고, Elasticsearch를 설치하고 실행해보자!
(우분투 초기 설정은 지난 게시물에서 확인할 수 있다.)
2024.08.29 - [Opensource] - ELK 네트워크 모니터링 시스템 구축 - (1) Ubuntu 초기 설정
1. Ubuntu 22.04 컨테이너 생성
터미널에 아래의 명령어로 우분투 컨테이너를 실행한다. --name은 컨테이너 이름을 설정하는 옵션으로 'my-ubuntu'가 컨테이너 이름이 된다.
docker run -it --name my-ubuntu ubuntu:22.04
2. Elasticsearch 설치를 위한 필수 패키지 업데이트
컨테이너 내부에서 패키지를 최신 상태로 업데이트하고, 필요한 추가 패키지를 설치해준다.
우분투 컨테이너를 받으면 정말 아무것도 없는 상태이기 때문에 필요에 따라 vim, net-tools 등등 필요한 것들을 다 받아준다.
apt-get update && apt-get install -y wget gnupg && apt-get update && apt-get install -y sudo
그럼 아래 이미지처럼 컨테이너 내부에 설치가 완료된 것을 확인할 수 있다.
3. Elasticsearch 설치
이제 본격적으로 Elasticsearch를 우분투에 설치해보자. 먼저 GPG 키를 등록해주고, Elasticsearch 저장소를 추가해준다.
# GPG 키 추가
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# 저장소 추가
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-8.x.list
이제 진짜진짜 Elasticsearch를 아래의 명령어로 설치한다! (그전에 패키지 업데이트는 한번 더 해주자)
apt-get update && apt-get install -y elasticsearch
그럼 대충 아래와 같은 화면이 뜨면서 설치가 완료될 것이다.
4. Elasticsearch 실행
여기까진 큰 문제가 없을 것이다..(아마도..?!) 이제 실행을 해야하는데 나는 실행 중 에러가 떠버렸다..!
'/usr/share/elasticsearch/bin/elasticsearch -d' 명령어로 백그라운드로 실행하니 아래와 같은 에러가 떠버렸다 ㅠ_ㅠ
Sep 10, 2024 12:46:27 PM sun.util.locale.provider.LocaleProviderAdapter <clinit> WARNING: COMPAT locale provider will be removed in a future release [2024-09-10T12:46:27,438][INFO ][o.e.n.NativeAccess ] [16bcd38e8921] Using native vector library; to disable start with -Dorg.elasticsearch.nativeaccess.enableVectorLibrary=false [2024-09-10T12:46:27,478][INFO ][o.e.n.NativeAccess ] [16bcd38e8921] Using [jdk] native provider and native methods for [Linux] [2024-09-10T12:46:27,478][ERROR][o.e.b.Elasticsearch ] [16bcd38e8921] fatal exception while booting Elasticsearchjava.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.server@8.15.1/org.elasticsearch.bootstrap.Elasticsearch.initializeNatives(Elasticsearch.java:289) at org.elasticsearch.server@8.15.1/org.elasticsearch.bootstrap.Elasticsearch.initPhase2(Elasticsearch.java:170) at org.elasticsearch.server@8.15.1/org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:75) See logs for more details. ERROR: Elasticsearch did not exit normally - check the logs at /var/log/elasticsearch/elasticsearch.log ERROR: Elasticsearch died while starting up, with exit code 1 |
can not run elasticsearch as root라고 되어있는데, 루트 권한으로 실행할 수 없는건가..? 하여 새로 계정을 생성해주었다.
adduser '계정명' 명령어를 통해 원하는 계정명과 패스워드로 계정을 하나 생성하면 된다.
usermod -aG sudo <계정명> 으로 새로운 계정에 sudo 권한을 주고, Elasticsearch 관련 디렉토리에 대해 추가한 계정에 권한을 부여한 뒤, 해당 계정으로 전환하고 다시 실행해보았다.
# 생성한 계정에 대해 디렉토리 접근 권한 부여
chmod 644 /etc/default/elasticsearch
chown 계정명:계정명 /etc/default/elasticsearch
# 생성한 계정으로 전환
su - 계정명
다시 elasticsearch를 실행해보면 아래처럼 뜨면서 실행 된다.
Docker 컨테이너는 systemd와 같은 init 시스템이 포함되지 않아, systemctl 같은 Systemd 명령어가 작동하지 않는다.
그래서 ps -ef | grep elastic 을 입력하면 아래와 같이 elasticsearch 프로세스가 실행 중인 것을 확인할 수 있을 것이다.
curl을 통해 ES 서버로부터 응답을 확인하려고 했더니.. curl: (52) Empty reply from server 라고 뜨면서 또 뭐가 안된다 ㅎ..
제발 한번에 되주면 안되겠니....? 에러 로그를 보니까 Elasticsearch가 HTTPS로 통신하도록 되어있는데, 클라이언트(이 경우 curl 명령어)가 HTTP를 통해 연결을 시도했기 때문에 연결이 차단된 것이다. 이제 elasticsearch.yml을 건드릴 때가 된 것 같다..ㅎㅅㅎ
sudo vi /etc/elasticsearch/elasticsearch.yml
// xpack.security 관련 요소는 모두 false로 해주고, http.port: 9200은 활성화 시켜준다.
---------------BEGIN SECURITY AUTO CONFIGURATION---------------
(생략)
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false
----------------Network----------------
http.port: 9200
yml 파일을 수정했으면 wq로 저장하고 나와서 다시 실행해준다.. 그리고 curl로 http로 요청하면 아래처럼 뜬다!
xpack.security false 설정해줘도 계속 ssl 관련 에러떠서 보니까 바보같이 계속 https로 요청하고있었음..ㅎ
아무튼 docker 우분투 컨테이너에서 Elasticsearch 설치하고 실행해보기 끝~!
'Opensource' 카테고리의 다른 글
[Docker-02] 도커 이미지와 컨테이너 (2) | 2024.09.08 |
---|---|
[Docker-01] Docker 설치 및 실행 (3) | 2024.09.05 |
ELK 네트워크 모니터링 시스템 구축 - (1) Ubuntu 초기 설정 (0) | 2024.08.29 |