[2021.04.14] 인턴 +44 Linux(Ubuntu18.04) - ELK 설치(MySQL 연동 포함) & Virtual Machine (Azure)
-> 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
Kibana를 설치한다.
-> www.elastic.co/kr/downloads/kibana
Logstash 설치
-> www.elastic.co/kr/downloads/logstash
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 경로 지정
-> 우선 경로지정에 앞서, linux(Ubunut)에 MySQL을 설치해야 한다.(나중에 쓰일 수도 있기 때문)
-> 위의 링크 주소로 들어가서 하나하나 따라 하면 됨
자, logstash를 실행하기 앞서, jdbc_driver를 설치해야 한다.
dev.mysql.com/downloads/connector/j/-
-> 해당 링크로 들어가면 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주소)
'Data > ELK' 카테고리의 다른 글
[2021.05.04] 인턴 +64 Elasticsearch Query DSL 개념 및 사용법 (0) | 2021.05.04 |
---|---|
[2021.04.16] 인턴 +46 Linux(Ubuntu18.04) - Apache log analysis (geoip 사용) (0) | 2021.04.16 |
[2021.04.06] 인턴 +36 Azure에서 ELK 사용하기(가상머신X) (0) | 2021.04.06 |
[2021.04.02] 인턴 +32 Apache log Analysis log file(3GB) - geoip 사용 O (0) | 2021.04.02 |
[2021.04.01] 인턴 +31 log Analysis 2 (로그 분석 2) (0) | 2021.04.01 |
댓글