닫기

PROFESSIONAL AI DEVELOPER CHAGAUN

고객지원

RPA.AI 뉴스

HOME 고객지원 RPA.AI 뉴스
Ubuntu 18.04 에 ELK 7.15.2 설치 히스토리
2022.03.18

[Ubuntu 18.04 에 ELK 7.15.2 설치 히스토리]

reference site : https://websiteforstudents.com/how-to-install-elk-stack-on-ubuntu/


1. 준비사항

-. Ubuntu 18.04가 설치되어 있는 우분투 서버를 준비합니다.

-. openjdk-11

-. elasticsearch-7-15-2, logstash-7-15-2, kibana-7-15-2


1. 먼저 java 설치 여부를 확인하여 openjdk-11 버전으로 Upgrade해 놓습니다

$ java -version

openjdk version "1.8.0_302"

OpenJDK Runtime Environment (build 1.8.0_302-b08)

OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

=>

-. # sudo apt install openjdk-11-jre-headless

-. /etc/profile 파일끝에 다음을 추가

export ES_JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

export PATH=$ES_JAVA_HOME/bin:$PATH


2. elasticsearch-7-15-2, logstash-7-15-2, kibana-7-15-2을 직접 다운로드하여 설치를 합니다.

먼저 아래의 사이트로 이동하여 설치파일을 내려받아 우분투 서버에 가져다 놓습니다.


참고로 DEB X86_64 버전을 다운로드 받으면 됩니다.


https://www.elastic.co/kr/downloads/past-releases/elasticsearch-7-15-2

https://www.elastic.co/kr/downloads/past-releases/logstash-7-15-2

https://www.elastic.co/kr/downloads/past-releases/kibana-7-15-2

$ sudo dpkg -i elasticsearch-7-15-2.deb

$ sudo dpkg -i logstash-7-15-2.deb

$ sudo dpkg -i kibana-7-15-2.deb


[Elasticsearch 설치]

0. 위에서 처럼 직접 다운로드 받아 설치를 한 경우 3번으로 바로 이동하고 

GPG repository key를 만들어 온라인으로 설치하고자 하는 경우 아래처럼 진행합니다.

1. GPG repository key를 이용한 설치

-. Elasticsearch설치를 위한 GPG repository key 생성합니다

# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -


-. elastic-7.x.list라고 하는 repository file을 생성합니다.

# echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list


2. elasticsearch를 설치합니다.

# sudo apt update

# sudo apt install elasticsearch


3. 처음 Elasticsearch가 설치된 경로를 보면 다읍과 같습니다.

home dir: /usr/share/elasticsearch

config dir : /etc/elasticsearch

data dir : /var/lib/elasticsearch

log dir : /var/log/elasticsearch


elkuser라는 하나의 ubuntu user를 통해 통합 관리를 하기 위해서는 다음과 같은 몇가지 조치가 필요합니다. 



4.elasticsearch와 관련된 폴더들의 오너쉽을 일반유저 계정(elkuser:elkuser)으로 바꾸어 줍니다.

sudo chown -R elkuser:elkuser /usr/share/elasticsearch

sudo chown -R elkuser:elkuser /var/log/elasticsearch

sudo chown -R elkuser:elkuser /var/lib/elasticsearch

sudo chown -R elkuser:elkuser /etc/elasticsearch

sudo chown -R elkuser:elkuser /etc/default/elasticsearch


5. Service 파일을 열어 config와 logs 폴더를 변경해 줍니다.

-. sudo vi /usr/lib/systemd/system/elasticsearch.service 

:

Environment=ES_PATH_CONF=/home/elkuser/elastic/elasticsearch/config

User=elkuser

Group=elkuser

:


6. sudo vi /etc/default/elasticsearch

:

ES_JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

ES_PATH_CONF=/home/elkuser/elastic/elasticsearch/config


7. elkuser라는 홈 폴더에elasticseatch 폴더 환경을 만든다.

$ mkdir /home/elkuser/elastic/elasticsearch/config

$ mkdir /home/elkuser/elastic/elasticsearch/logs


-. /etc/elasticsearch config 파일들을 /home/elkuser/elastic/elasticsearch/config 폴더에 복사한다

$ cp -r /etc/elasticsearch/* /home/elkuser/elastic/elasticsearch/config/


8. elasticsearch 기본 환경을 구성한다

vi /home/elkuser/elastic/elasticsearch/config/elasticsearch.yml

:

path.data: /var/lib/elasticsearch

path.logs: /home/elkuser/elastic/elasticsearch/logs


cluster.name: toktok_elasticsearch

node.name: es-node-1


bootstrap.memory_lock: true


network.host: 0.0.0.0

discovery.seed_hosts: ["127.0.0.1", "[::1]"]


http.port: 9200

transport.port: 9300 

cluster.initial_master_nodes: ["es-node-1"]


xpack.security.enabled: true


9. TLS 암호화 및 https 통신을 활성화 합니다.

-. elasticsearch-certutil 통해 인증기관 파일(elastic-stack-ca.p12)을 생성(비밀번호 생략)

/usr/share/elasticsearch$ ./bin/elasticsearch-certutil ca

=> elastic-stack-ca.p12 이 생성됨


-. elasticsearch-certutil 통해  인증서 파일(elastic-certificates.p12)을 생성(비밀번호 생략)

/usr/share/elasticsearch$ ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

=> elastic-certificates.p12 이 생성됨


-. 생성된 2개의 인증 파일을 /config/certs 에 가져다 놓는다 

$ mkdir /home/elkuser/elastic/elasticsearch/config/certs

mv *.p12 /home/elkuser/elastic/elasticsearch/config/certs


-. elasticsearch-certgen 을 통해 1개의 zip파일(certificate-bundle.zip)을 만든 후 config/certs 에 가져다 놓은 다음 압축을 풀어 놓는다 

/usr/share/elasticsearch$ ./bin/elasticsearch-certgen

# instance:kibana, ip:127.0.0.1,100.0.1.21, dns:localhost 입력

$ mv certificate-bundle.p12 /home/elkuser/elastic/elasticsearch/config/certs/

$ cd /home/elkuser/elastic/elasticsearch/config/certs

$ unzip certificate-bundle.zip


9. elasticsearch.yml에 보안 환경을 추가한다

vi /home/elkuser/elastic/elasticsearch/config/elasticsearch.yml

:

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: certificate 

xpack.security.transport.ssl.keystore.path: /home/elkuser/elastic/elasticsearch/config/certs/elastic-certificates.p12 

xpack.security.transport.ssl.truststore.path: /home/elkuser/elastic/elasticsearch/config/certs/elastic-certificates.p12 


xpack.security.http.ssl.enabled: true

xpack.security.http.ssl.key: /home/elkuser/elastic/elasticsearch/config/certs/kibana/kibana.key

xpack.security.http.ssl.certificate: /home/elkuser/elastic/elasticsearch/config/certs/kibana/kibana.crt

xpack.security.http.ssl.certificate_authorities: ["/home/elkuser/elastic/elasticsearch/config/certs/ca/ca.crt"]

:


10. Elasticsearch 에서 디폴트로 만들어 놓은 계정들의 비번을 변경해 놓는다

./bin/elasticsearch-setup-passwords interactive


Enter password for [elastic]: 

Reenter password for [elastic]: 

Enter password for [apm_system]: 

Reenter password for [apm_system]: 

Enter password for [kibana_system]: 

Reenter password for [kibana_system]: 

Enter password for [logstash_system]: 

Reenter password for [logstash_system]: 

Enter password for [beats_system]: 

Reenter password for [beats_system]: 

Enter password for [remote_monitoring_user]: 

Reenter password for [remote_monitoring_user]: 


9. 추가 옵션 : elasticseaarch.yml에 bootstrap.memory_lock: true 옵션을 주었는데도 memory lock 제한을 unlimit로 주어야 한다

-. sudo vi /etc/security/limits.conf

:

user    soft    memlock     unlimited

user    hard    memlock     unlimited


-. sudo vi /etc/systemd/system/elasticsearch.service.d/override.conf

[Service]

LimitMEMLOCK=infinity


-. 서비스 파일을 변경한 경우 아래의 명령어를 실행해 놓아야 한다

# sudo systemctl daemon-reload


10. 다음 명령어로 서비스를 활성화 한 후 서비스를 실행한다

sudo systemctl enable elasticsearch

sudo systemctl restart elasticsearch


11. 설치된 버전을 확인합니다.

# curl -X GET "127.0.0.1:9200?pretty"

# curl --user elastic -X GET "127.0.0.1:9200?pretty"

# curl -u elastic --cacert /home/elkuser/elastic/elasticsearch/config/certs/ca/ca.crt https://localhost:9200/?pretty

{

    "name" : "itt-krc-was-dat-vm01",

    "cluster_name" : "elasticsearch",

    "cluster_uuid" : "Cyuy4hWYRW-WA5q8WkquRQ",

    "version" : {

      "number" : "7.16.3",

      "build_flavor" : "default",

      "build_type" : "deb",

      "build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022",

      "build_date" : "2022-01-06T23:43:02.825887787Z",

      "build_snapshot" : false,

      "lucene_version" : "8.10.1",

      "minimum_wire_compatibility_version" : "6.8.0",

      "minimum_index_compatibility_version" : "6.0.0-beta1"

    },

    "tagline" : "You Know, for Search"

}

12. 플러그인 설치

# ./bin/elasticsearch-plugin install analysis-nori



[Kibana 설치]

0. 위에서 처럼 직접 다운로드 받아 설치를 한 경우 2번으로 바로 이동하고

온라인으로 설치하고자 하는 경우 아래처럼 진행합니다.


1. kibana를 설치합니다.

# sudo apt install kibana


2. 처음 kibana 설치된 경로를 보면 다읍과 같습니다.

home dir: /usr/share/kibana

config dir : /etc/kibana


elkuser라는 하나의 ubuntu user를 통해 통합 관리를 하기 위해서는 다음과 같은 몇가지 조치가 필요합니다. 


3.kibana와 관련된 폴더들의 오너쉽을 일반유저 계정(elkuser:elkuser)으로 바꾸어 줍니다.

sudo chown -R elkuser:elkuser /usr/share/kibana

sudo chown -R elkuser:elkuser /var/log/kibana

sudo chown -R elkuser:elkuser /var/lib/kibana

sudo chown -R elkuser:elkuser /etc/kibana

sudo chown -R elkuser:elkuser /etc/default/kibana

sudo chown -R elkuser:elkuser /run/kibana


4. Service 파일을 열어 config와 logs 폴더를 변경해 줍니다.

-. sudo vi /etc/systemd/system/kibana.service 

:

User=elkuser

Group=elkuser


Environment=KBN_PATH_CONF=/home/elkuser/elastic/kibana/config


ExecStart=/usr/share/kibana/bin/kibana --logging.dest="/home/elkuser/elastic/kibana/logs/kibana.log" --pid.file="/run/kibana/kibana.pid"


5. sudo vi /etc/default/kibana

user="elkuser"

group="elkuser"

chroot="/"

chdir="/"

nice=""


KBN_PATH_CONF="/home/elkuser/elastic/kibana/config"


6. elkuser라는 홈 폴더에 kibana 폴더 환경을 만든다.

$ mkdir /home/elkuser/elastic/kibana/config

$ mkdir /home/elkuser/elastic/kibana/logs


-. /etc/kibana config 파일들을 /home/elkuser/elastic/kibana/config 폴더에 복사한다

(.kibana.keystore.initial_md5sum 내용에서 경로를 확인하여 수정해 놓는다)

$ cp -r /etc/kibana/* /home/elkuser/elastic/kibana/config/


7. kibana 환경을 설정한다.

-. vi /home/elkuser/elastic/kibana/config/kibana.yml

:

server.port: 5601

server.host: "0.0.0.0"   # 모든 클라이언트로부터 접속 가능

# server.host: "127.0.0.1"   # 모든 클라이언트로부터 접속 가능


# https: 로 설정해 놓는다

elasticsearch.hosts: ["https://100.0.1.21:9200"]

elasticsearch.username: "elastic"

elasticsearch.password: "xxxxxxxx"


# SSL 인증 파일 설정을 해 놓는다

server.ssl.enabled: true

server.ssl.key: /home/elkuser/elastic/elasticsearch/config/certs/kibana/kibana.key

server.ssl.certificate: /home/elkuser/elastic/elasticsearch/config/certs/kibana/kibana.crt

elasticsearch.ssl.key: /home/elkuser/elastic/elasticsearch/config/certs/kibana/kibana.key

elasticsearch.ssl.certificate: /home/elkuser/elastic/elasticsearch/config/certs/kibana/kibana.crt

elasticsearch.ssl.certificateAuthorities: ["/home/elkuser/elastic/elasticsearch/config/certs/ca/ca.crt"]


xpack.security.authc.providers:

  basic.basic1:

    order: 0

    icon: "https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/android.svg"

    hint: "Typically for administrators"



8. 주의사항

kibana를 리스타트 하기 위해서는 /etc/default/kibana에 있는 KBN_PATH_CONF을 실시간 반영해 주어야 한다

 

# export KBN_PATH_CONF="/home/elkuser/elastic/kibana/config"

# echo $KBN_PATH_CONF


9. 다음 명령어로 서비스를 활성화 한 후 서비스를 실행한다

sudo systemctl enable kibana

sudo systemctl start kibana



[Logstash 설치]

0. 위에서 처럼 직접 다운로드 받아 설치를 한 경우 2번으로 바로 이동하고

온라인으로 설치하고자 하는 경우 아래처럼 진행합니다.

1. kibana를 설치합니다.

$ sudo apt install logstash


4. 처음 Logstash 설치된 경로를 보면 다읍과 같습니다.

home dir: /usr/share/logstash

config dir : /etc/logstash

data dir : /var/lib/logstash

log dir : /var/log/logstash


elkuser라는 하나의 ubuntu user를 통해 통합 관리를 하기 위해서는 다음과 같은 몇가지 조치가 필요합니다. 


5.logstash 관련된 폴더들의 오너쉽을 일반유저 계정으로 바꾸어 준다

sudo chown -R elkuser:elkuser /usr/share/logstash

sudo chown -R elkuser:elkuser /var/log/logstash

sudo chown -R elkuser:elkuser /var/lib/logstash

sudo chown -R elkuser:elkuser /etc/logstash

sudo chown -R elkuser:elkuser /etc/default/logstash


6. Service 파일을 열어 config와 logs 폴더를 변경

-. sudo vi /etc/systemd/system/logstash.service 

:

User=elkuser

Group=elkuser


ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/home/elkuser/elastic/logstash/config"


-. sudo vi /etc/default/logstash

:

LS_HOME="/usr/share/logstash"

LS_SETTINGS_DIR="/home/elkuser/elastic/logstash/config"

LS_USER="elkuser"

LS_GROUP="elkuser"

LS_GC_LOG_FILE="/home/elkuser/elastic/logstash/logs/gc.log"

:

7. elkuser라는 유저 계정에 logstash 폴더 환경을 만든다.

$ mkdir /home/elkuser/elastic/logstash/config

$ mkdir /home/elkuser/elastic/logstash/logs


-. /etc/logstash config 파일들을 /home/elkuser/elastic/logstash/config 폴더에 복사한다

sudo cp -r /etc/logstash/* /home/elkuser/elastic/logstash/config/


8. logstash 환경을 설정한다.

-. vi /home/elkuser/elastic/logstash/config/logstash.yml

:

path.data: /var/lib/logstash


path.logs: /home/elkuser/elastic/logstash/logs


xpack.monitoring.enabled: false


config.reload.automatic: true #변경된 config 파일을 자동으로 설정 감지

config.reload.interval: 3s # 3초 마다 체크


xpack.monitoring.elasticsearch.hosts: ["https://100.0.1.21:9200"]

xpack.monitoring.elasticsearch.username: "elastic"

xpack.monitoring.elasticsearch.password: "121212"



9. 다음 명령어로 서비스를 활성화 한 후 서비스를 실행한다

sudo systemctl enable logstash

sudo systemctl start logstash


[히스토리]

21-11-18 : 

logstash에 대한 서비스 실행이 안되어(단위실행은 됨) 시스템 리부팅을 했으나 자동으로

ELK 서비스가 안올라왔다

sudo systemctl restart elasticsearch 하니까 올라왔다(다시한번 더 해볼 필요)

sudo systemctl restart kibana 해도 안올라왔다 /home/elkuser/elastic/kibana/logs의 로그를 보니까 /run/kibana에 권한이 없어서 스타트가 안된다고 나왔다

sudo chown -R elkuser:tocat /run/kibana를 한 후

sudo systemctl restart kibana하니까 잘 올라왔다


이상입니다.

전체목록