본문 바로가기
Data/ELK

[2021.04.14] 인턴 +44 Linux(Ubuntu18.04) - ELK 설치(MySQL 연동 포함) & Virtual Machine (Azure)

by injekim97 2021. 4. 14.
반응형

[2021.04.14] 인턴 +44  Linux(Ubuntu18.04) - ELK 설치(MySQL 연동 포함) & Virtual Machine (Azure)

 

 

 

 

portal.azure.com/

 

Microsoft Azure

 

portal.azure.com

-> Azure에서 제공해주는 가상 머신을 만들어, ELK(elasticsearch, logstash, kibana)를 설치해보자.

 

* Azure 사이트는 머신러닝(Machine Learning) , ELK , jupyter notebook 다양한 기능을 제공해주는 사이트
-> 즉, 머신러닝 과 인공지능을 하기 위해 만들어진 사이트라고 생각하자

 

* 돈을 내야 사용할 수 있다. (나는 회사에서 제공해주는 계정을 사용할 것이다.)

 

* 4월9일~4월14일 오후 4시 30분 (5일간)

-> Azure에서 제공해주는 가상머신을 통해 elasticsearch, kibana접속을 완벽하게 해냈다.

-> 수많은 구글링을 하였지만, 자료가 없어서 5일이라는 시간이 걸리게 되었다.

 

* 4월14일~4월16일 오전 10시 30분 (2일간)

-> logstash 와 mysql 연동 완료

-> kibana에서, index pattens 도 파일 뜸.

 

* Window에서 ELK를 설치하고, Linux에서도 ELK를 설치했을 때 느낀 점

-> 우선 윈도우는 호환이 잘돼서, 에러가 발생하지 않는다. (물론 정보가 없어서 elk 설치하는데 2~3일이 걸렸다)

-> Linux(Ubuntu)는 윈도우에 비해 에러가 너무너무 많이 발생하였다.

결론, 같은 프로그램인데 윈도우에 설치하는 것보다 리눅스에 설치하는 게 진짜 너무 어렵다(호환성)

 

+@ AWS와 Azure 가상 머신을 둘 다 사용해보면서 느낀 점

-> AWS는 처음 사용해도 가상 머신을 만드는데 별 어려움이 없었다.(1시간)

-> Azure에서는 사용법도 없고 영어여서, 가상머신 만드는데 엄청 헤맸다.(3시간 이상)

speed : Azure >>>>>> AWS (wget으로 가져올 때, 속도가 Azure가 넘사벽으로 빨랐다.)

 

 

 

우선, Azure에서 제공해주는 가상머신 만들기

-> 우선, search 창에서, virtual machine을 검색 후 , 클릭

 

 

-> Add를 눌러서 Virtual Machine 클릭

 

 

-> create new 버튼을 눌러, resoruce group(리소스 그룹)을 만들어 준다. 

* 리소스 그룹을 밖에서 만들 수 있지만, 미리 만들지 말고 가상 머신에서 Create new 버튼을 눌러 만들어주자.(미리 만들어서 사용해보니, 에러 발생하였음)

* image는 가상 머신 종류를 선택하는 것인데, Ubuntu server 20보단 18.04를 사용하자.(apt-get설치 시 에러 발생 안 함)

 

 

 

-> Size는, 넉넉하게 메모리(RAM) 16GB로 세팅

-> SSH Public Key로 해서,. pem 파일명으로 ubuntu에서 접속할 수 있게 함

* SSH (22)로 해둘 것

 

 

-> 기본으로 Setting 되어있음.

-> 건드리지 말고 Next 클릭

 

-> 기본으로 Setting 되어있음.

-> 건드리지말고 Next 클릭

 

 

-> 기본으로 Setting 되어있음.

-> 건드리지말고 Next 클릭

 

 

-> 기본으로 Setting 되어있음.

-> 건드리지말고 Next 클릭

 

 

-> 기본으로 Setting 되어있음.

-> 건드리지말고 Next 클릭

 

 

-> Create 버튼 클릭 시, Azure에서 제공해주는 가상 머신이 만들어짐.

 

 

 

-> Download private key and create resource 버튼을 누름

-> 누르면 파일명. pem으로 파일이 받아지는데, 이것은 linux에 접속하기 위한 것이니 꼭 필요함

*. pem 파일 유출 및 공유는 절대 하지 말 것 

 

 

-> 기다리면 Go to resource라는 버튼이 생김. 클릭

 

 

-> ELK에서 사용할 Port 번호를 열어 주는 작업임

-> Add inbound port rule 버튼 클릭(이것으로 Port 번호를 추가(열어주는 작업))

 

 

-> 이렇게 5601,9200,80,443 port 번호도 추가로 열어줌

* SSH 22번은 기본으로 열려 있음.

 

 

-> 다 열어준 모습이다. 이제 접속하도록 해보자.

 

 

----------------------------------------------------------------------------------------------------------------------------------

Git Bash(깃 배쉬)로 Azure에서 만든 가상 머신 접속하기.

 

 

-> 우선, Connect를 클릭하여, SSH를 누른다

-> 그런 후에, ssh -i <private key path> azureuser@20.41.96.155를 통해 접속하면 된다.

 

알기 쉽게 밑에 사진을 첨부하였다.(보고 이해하자, 보고도 모르면 당신은 바보) 

 

-> 가상 머신을 만들면서 설치가 된. pem 파일 경로에 오른쪽 마우스를 눌러, Git Bash here 클릭

*. pem 파일 경로는 영어 폴더 안에 넣어주는 게 좋다 (한글 일시, 에러 발생할 확률이 있음. 그냥 영어 폴더에 넣자)

 

 

 

-> 이것이 바로, ubuntu에서 접속하는 방법이다.

-> ssh -i injekim97_key.pem azureuser@20.41.96.155

 

 

--------------------------------------------------------------------------------------------------------------------

Virtual Machine(Azure) Ubuntu에서 Elasticsearch(ELK) 설치하기 

 

* Azure에서 제공해주는 Virtual Machine (또는 VMware Workstation 15 Player (FREE 버전))

* 나의 가상 머신 환경 Ubuntu 18.04.1 (64 Bit)

 

설치해야 할 파일들

1. java 설치(제일 먼저 설치해줘야 함, 나머진 상관 X)

2. Elasticsearch-6.4.2.deb

2-1.Kibana-6.4.2-amd64.deb

2-2.Logstash-6.4.2.deb

2-3.Filebeat-6.4.2-amd64.deb

 

-------------------------------------------------------------------------------------------------------

ubuntu 명령어

 

* Ubuntu에서 비밀번호 설정 없이 바로 root로 들어가기 

-> sudo su

 

* Ubuntu 에서 비밀번호 설정하기.

-> sudo passwd (비번 root로 해놓음)

 

* root 권한으로 들어가기

-> su

 

---------------------------------------------------------------------------------------------------------------------------

 

Virtual Machine(Azure) Ubuntu에서 Elasticsearch(ELK) 설치를 해보자. 

* 그대로 복붙 해서 Ubuntu에서 붙여 넣기 하면 됨

 

1. JAVA 설치하기

sudo add-apt-repository ppa:webupd8team/java

* Enter 입력

 

 

 

sudo apt-get update

 

 

sudo apt-get install openjdk-8-jdk

 

 

* 자바가 제대로 설치되었는지 확인하려면 java -version or javac -version 명령어 입력

 

 

2. ELK 설치전에 각 홈페이지 들어가서 최신 버전 확인 후, 설치 하기

 

elasticsearch 설치

-> https://www.elastic.co/kr/downloads/elasticsearch

 

Download Elasticsearch Free | Get Started Now | Elastic

Download Elasticsearch or the complete Elastic Stack (formerly ELK stack) for free and start searching and analyzing in minutes with Elastic.

www.elastic.co

 

Kibana를 설치한다.

-> www.elastic.co/kr/downloads/kibana  

 

Download Kibana Free | Get Started Now | Elastic

Download Kibana or the complete Elastic Stack (formerly ELK stack) for free and start visualizing, analyzing, and exploring your data with Elastic in minutes.

www.elastic.co

 

Logstash  설치

-> www.elastic.co/kr/downloads/logstash  

 

Download Logstash Free | Get Started Now | Elastic

Download Logstash or the complete Elastic Stack (formerly ELK stack) for free and start collecting, searching, and analyzing your data with Elastic in minutes.

www.elastic.co

 

 

filebeat 설치

-> www.elastic.co/kr/downloads/beats/filebeat

 

1. Elastic, Logstash , Kibana 링크를 타고 들어감

2. DEB 파일에 마우스 커서를 가져다 놓으면,  deb 파일 링크가 7시 방향에 뜸 -> 링크 복사 후

3. 가상 머신에서, wget 명령어를 이용해, 설치

 

 

* 21.04.09 날짜 기준(복붙 해서 가상 머신에서 enter)

wget artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0-amd64.deb
wget artifacts.elastic.co/downloads/kibana/kibana-7.12.0-amd64.deb
wget artifacts.elastic.co/downloads/logstash/logstash-7.12.0-amd64.deb
wget artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.0-amd64.deb

 

 

 

-> ls 명령어를 통해 제대로 설치가 된 것을 알 수 있다.

-> 이제, dpkg 명령어를 통해 deb 파일을 풀어, 설치 하자

 

 

3. ELK 및 파일 비트 설치(deb 파일은 dpkg -i 명령어를 통해 설치함) 

 

 

sudo dpkg -i elasticsearch-7.12.0-amd64.deb
sudo dpkg -i logstash-7.12.0-amd64.deb
sudo dpkg -i kibana-7.12.0-amd64.deb
sudo dpkg -i filebeat-7.12.0-amd64.deb

 

 

 

--------------------------------------------------------------------------------------------------------

linux(Ubunut 18.04)에서 ELK를 설치하면서 다양한 에러 해결방법

 

해결법(solution)

java.lang.IllegalStateException: Unable to access 'path.data' (/var/lib/elasticsearch)

-> mkdir 명령어를 사용하여, /var/lib/elasticsearch 만듦 (기존에 만들어진 게 있으면 접근권한을 부여 chown -R 사용)

 

* 해결방법

{"error":{"root_cause":[{"type":"master_not_discovered_exception", "reason":null}], "type":"master_not_discovered_exception", "reason":null}, "status":503}

-> elasticsearch.yml 에서 discovery.type : single-node를 추가

 

-----------------------------------------------------------------------------------------------------------------------------------

이제, /etc에서, elasticsearch.yml , kibana.yml를 설정하자.

 

1. /etc/elasticsearch/Elasticsearch.yml 수정

 

-> 이럴 경우, sudo su (즉, root) 권한으로 접속하지 말고,

 

*  sudo chown -R 사용자명:사용자명 접근권한을 줄 경로 적어줌 

즉, sudo chown -R azureuser:azureuser /etc/elasticsearch  (sudo 필수로 적어줌, 그래야 적용됨)

-> 해당 경로에 (상위 폴더 = 안에 있는 모든 폴더)에 일반 사용자도 rwx 권한을 부여함.(읽기, 수정, 삭제)

 

이제, /etc/elasticsearch/Elasticsearch.yml 수정 하자. (아래 사진처럼 해줌)

-> sudo vi elasticsearch.yml

 

<. yml 수정해줘야 함 > 

* network.host : 0.0.0.0으로 수정 (모든 localhost에서 접근 가능하도록)

* http.port : 9200 # elasticsearch port 번호는 9200

* discovery.type : single-node 

-> 이거 무조건 넣어줘야 함. 안 그러면 kibana 실행 시 

{"error":{"root_cause":[{"type":"master_not_discovered_exception", "reason":null}], "type":"master_not_discovered_exception", "reason":null}, "status":503}

 위의 에러 발생하게 됨. (매우 중요. 이거 때문에 시간 5일 버림)

 

 

+ 나머지 부분은 건드리지 않아도 됨.

실행방법은 /usr/share/elasticsearch/bin 경로로 들어가서,./elasticsearch로 실행함

 

---------------------------------------------------------------------------------------------------------------------------------

elasticsearch.yml 파일을 수정해줬으니, elasticsearch를 실행해보자.

 

실행 방법 

-> /usr/share/elasticsearch/bin 폴더로 이동

-> 이동후에 root 권한이 아닌./elasticsearch로 실행.

 

-> Permission denied (권한이 없다) -> 없으면 sudo chown -R azureuser:azureuser /etc/default/elasticsearch(그대로 해당 경로에 권한을 부여해줌)

 

-> 자, 위의 권한을 준 후에, 다시 실행해보니,

-> /var/log/elasticsearch에도 접근할 수 없다고 한다. 위에 명령어를 사용해서 접근(권한 부여)할 수 있도록 하자.

 

-> 자, 위의 권한을 준 후에, 다시 실행해보니,

-> path.data가 없다고 한다. 해당 경로(/var/lib/elasticsearch)로 들어가서 확인해보자

 

-> 보니까, 위의 오류가 권한이 없어서 에러가 발생한 것 같다. 

-> 마찬가지로, 권한을 준후에, 다시./elasticsearch를 실행해보자.

* sudo chown -R azureuser:azureuser /var/lib/elasticsearch

 

 

-> 권한을 줘서, pwd(상대 경로 = 현재 위치)를 출력, 

-> 위의 사진에선 못 들어갔지만, 권한을 줘서 들어가지게 되었다. 

-> 자, 이제 다시 /usr/share/elasticsearch/bin 폴더로 가서./elasticsearch를 실행해보자

 

 

-> 정상적으로 작동된 것을 확인할 수 있다.

-> Git bash를 하나 켜서, 해당 웹 사이트 port(9200) 들어가서 확인 or curl -XGET "localhost:9200"으로 찍어보자

 

-> curl -XGET "localhost:9200"으로 출력한 모습

-> 정상적으로 elasticsearch가 돌아가는 것을 확인할 수 있다.

 

-> http://20.41.96.155:9200/

-> 마찬가지로, elasticsearch가 돌아가는 것을 확인할 수 있다. 

 

 

------------------------------------------------------------------------------------------------------------------

이제, kibana.yml를 setting 해보자.

 

2. /etc/kibana/kibana.yml 수정

-> 이럴 경우, sudo su (즉, root) 권한으로 접속 X

 

*  sudo chown -R 사용자명:사용자명 접근권한을 줄 경로

즉, sudo chown -R azureuser:azureuser /etc/kibana(sudo 필수로 적어줌, 그래야 적용됨)

 

 

kibana.yml 수정

-> sudo vi kibana.yml

+@ 나머지는 수정 안 해줘도 된다.

 

 

 

 

kibana 실행방법

-> /usr/share/kibana/bin 경로로 들어가기

-> 그런 후에,./kibana로 실행함

 

 

-> 위에서 설정한 kibana.yml를 복사한 후

-> 해당 밑줄 친 path에, sudo vi kibana.yml를 통해 만들어 줘야 한다.

 

-> ls(상세보기)를 했지만, 안에 config 명으로 디렉터리가 없다.

-> 만들어주려고 했지만 접근 권한 X

->  sudo chown -R azureuser:azureuser /usr/share/kibana 명령어를 통해 접근권한을 줘서 config 디렉터리 만들자

 

 

-> config 디렉토리 안에 sudo vi kibana.yml을 통해, 파일을 만들어 줬다.

-> cat 파일명 (명령어를 통해 제대로 저장된 것을 확인할 수 있다.)

 

 

 

자, 이제 /usr/share/kibana/bin 경로로 이동 후./kibana를 실행해보자.

-> 해당 분홍색 글씨와, 밑줄 친 것으로 나오면 kibana가 정상적으로 작동되는 것이다.

-> 로컬 주소로 이동하여, kibana가 잘 접속되는지 확인해보자.

 

 

-> 정상적으로 작동되는 것을 확인할 수 있다.(kibana port number : 5601)

* http://20.41.96.155:5601/app/home#/tutorial_directory

 

-----------------------------------------------------------------------------------------------------------------------------------

3. logstash 경로 지정 

 

injekim97.tistory.com/184

 

[2021.04.15] 인턴 +45 가상머신(Ubuntu_Azure)에서 MySQL 설치

[2021.04.15] 인턴 +45  가상머신(Ubuntu_Azure)에서 MySQL 설치하기 나의 실습환경은 Azure에서 제공해주는 가상머신(Ubuntu)를 만든 상태이다. dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/ MySQL :: A..

injekim97.tistory.com

-> 우선 경로지정에 앞서, linux(Ubunut)에 MySQL을 설치해야 한다.(나중에 쓰일 수도 있기 때문)

-> 위의 링크 주소로 들어가서 하나하나 따라 하면 됨

 

 

 

 

자, logstash를 실행하기 앞서, jdbc_driver를 설치해야 한다.

 

dev.mysql.com/downloads/connector/j/-

 

MySQL :: Download Connector/J

MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0.

dev.mysql.com

-> 해당 링크로 들어가면 jdbc_driver를 다운로드할 수 있다.(각 OS에 맞게)

 

 

 

해당 명령어를 리눅스(Ubuntu)에 복붙 하면 MySQL - Connector - Java 8.0.23 

wget dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java_8.0.23-1ubuntu18.04_all.deb

 

 

 

sudo dpkg -i mysql-connector-java_8.0.23-1ubuntu18.04_all.deb

-> deb 파일을 풀기 위해선, sudo dpkg -i 파일명. deb로 풀면 된다.

 

 

이제 설치한 jdbc 파일의 path(경로)를 설정해주자.

-> 보면 jdbc(mysql-connector-J)의 경로는 usr/share/java/mysql-connector-java-8.0.23.jar

(해당 경로로 test.conf 파일 경로를 수정하자)

 

 

 

test.conf 파일을 만들어보자.

-> MySQL 연동된 test.conf 파일이다

-> 밑줄 친 test_schema는 (Database 이름명)

* jdbc_driver_library -> Ubuntu에서 Connector-J 가 깔린 경로로 지정해주면 된다.

 

input {
    jdbc {
        clean_run => true
        jdbc_driver_library => "/usr/share/java/mysql-connector-java-8.0.23.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://localhost:3306/test_schema"
        jdbc_user => "root" # mysql ID
        jdbc_password => "1234" # mysql PASSWORD
        schedule => "* * * * *"
        statement => "select jobid, jobname, executiontime, jobstatus from logstash WHERE jobid > :sql_last_value"      # tracking_column에서 지정한 column 즉, jobid에 sql_last_value로 비교해야 함
        use_column_value => true
        tracking_column => "jobid"
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "logstash_mysql"    # kibana에서 저장되는 인덱스 명
    }

    stdout {
        codec => rubydebug   # 코드로 출력해서 보여줌(과정들)
    }
}

 

 

 

 

logstash 실행 명령어

->./logstash -f test.conf --path.settings /etc/logstash/

 

->./logstash -f test.conf (윈도 방식처럼 실행 시 에러 발생)

WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults

-> 무조건, --path settings /etc/logstash를 붙여줘야 함. (윈도우랑 linux랑 logstash 실행방법이 다름)

 

 

 

 

-> 하지만 실행해보니, 에러 log를 보면, /var/log/logstash/logstash-plain.log 접근권한 X

-> sudo chown -R azureuser:azureuser /var/log/logstash로 접근권한 부여하고 다시 logstash를 실행해보자.

 

 

 

-> /logstash -f test.conf --path.settings=/etc/logstash

* 밑줄 친 것을 보면, usr/share/java 에서, 읽을 권한이 없다는 내용이다. 

그래서 , sudo chown -R azureuser:azureuser /usr/share/java로 권한을 부여 

 

 

 

그런 후에, 다시 재실행.

->./logstash -f test.conf --path.settings=/etc/logstash

 

 

 

 

-> 작성할 수 없는 권한이 없으니 chown -R로 권한을 준 후에, 다시 실행해보자.

 

 

-> sudo chown -R azureuser:azureuser /var/lib/logstash

 

 

 

<성공 화면>

-> 마침내, 성공함

-> 이제 kibana에 들어가 index pattens를 만들 수 있나 보자.

 

 

-> 해당 Create index pattern이 뜨는 거 보니까, 제대로 리눅스에서 MySQL -> kibana 연동이 성공적으로 잘 됐다.

 

 

-> 아래 나온 이름을 똑같이 쳐준 후, step 2에선 @timestamp로 select 후에,  Create index pattern 클릭

 

-> 성공적으로 되었다.

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------

ELK 실행방법(Liunx(Ubuntu)) ★★ 3개 전부다 실행해줘야 함.(MySQL 이용 시, MySQL 도 실행)

* elasticsearch

/usr/share/elasticsearch/bin 폴더 이동 후./elasticsearch

 

* kibana

/usr/share/kibana/bin 경로로 이동 후,./kibana

 

* logstash

/usr/share/logstash/bin 경로로 이동 후, 

->./logstash -f test.conf --path.settings /etc/logstash/ 명령어로 실행

 

-------------------------------------------------------------------------------------------------------------------------

 

 

 

 

이제 해야 할 일들

1. datalake에서 아파치 로그 올리는 법

2. azure data lake 
-> 찾아서 logstash 경로 지정

3. azure for jupyter
월마트 csv -> Datalink올린 후, 미정이가 올린 거 jupyter notebook(azure)으로 해보기
+@ 칼럼 추가해서, ip 넣어주기(아파치 로그 ip주소) 

반응형

댓글