[Elasticsearch] Elasticsearch Engineer Training -2
- 본 포스트는 상명대학교 
Elasticsearch 엔지니어 트레이닝과정을 이수하고 작성한 글입니다. - 개인이 간단하게 실습을 위해 작성한 포스트이며 
Enterprise 급 운용을 위한 글이 아님을 밝힙니다. 
복습
- Elasticsearch는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진으로 분산형 및 개방형을 특징으로 한다.
 - Elasticsearch는 
Apache Lucnene을 기반으로 구축 되었으며 2010년에 현 Elastic으로 출시되었다. 
Elasticsearch의 사용
- 애플리케이션 검색
 - 웹사이트 검색
 - 엔터프라이즈 검색
 - 로깅과 로그 분석
 - 인프라 메트릭과 컨테이너 모니터링
 - 애플리케이션 성능 모니터링
 - 위치 기반 정보 데이터 분석 및 시각화
 - 보안 분석
 - 비즈니스 분석
 
Elasticsearch의 동작
- 로그, 시스템 메트릭, 웹 애플리케이션 등의 소스로부터 원시 데이터가 Elasticsearch로 들어간다.
- 이러한 데이터 수집은 원시 데이터가 Elasticsearch에서 indexing되기 전에 구문 분석, 정규화, 강화 되는 프로세스이다.
 - indexing 후 데이터에 대해 사용자는 복잡한 쿼리를 실행하고 집계를 사용하여 복잡한 요약을 검색할 수 있다.
 - Kibana에서 데이터를 강력하게 시각화하고 대시보드 공유, 
Elastic Stack을 관리할 수 있다. 
 Kibana는 elasticsearch의클라이언트 역할을 한다.
Kibana의 사용
- Kibana는 Elasticsearch를 위한 시각화 및 관리 도구
 - 실시간 히스토그램, 선 그래프, 파이 차트, 지도 등을 제공
 - 사용자가 자신의 데이터를 기반으로 사용자 정의한 동적 인포그래픽을 만들 수 있다. (
Canvas) - 위치 기반 정보 데이터 시각화 (
Elastic Maps) 
Elasticsearch의 index 개념
- Elasticsearch index는 
서로 관련된 문서들의 모음이다. - JSON 문서로 데이터를 저장
 - 각 문서는 일련의 키와 그에 해당하는 값을 서로 연결
 - Elasticsearch가 문서 저장, 역 인덱스를 구축하여 거의 실시간으로 문서를 검색할 수 있게 한다.
 
Day02_ Logstash, Beats 실습
환경 세팅
elasticsearch.yml 편집
network.host : [
_site_,_local_] 로 수정vim 에디터로 아래 파일을 열어 가장 아랫줄에 두 line 핸들링 (root 권한 필요)
1
2
3
4sudo vi /etc/sysctl.conf
vm.max_map_count=262164
vm.swappiness=11
2
3
4sudo vi /etc/security/limits.conf
[user_id] soft memlock unlimited
[user_id] hardmemlock unlimited콘솔 상에 명령어 실행
1
sudo shutdown -r now
터미널 전부 종료
elasticsearch 및 Kibana 재 실행
- 가공데이터가 저장된 웹서버 접속해놓기 (Ted님 개인 웹서버)
 
elasticsearch에 암호가 걸려있을 때 IP, ID, Password를 통해 접속하는 명령
1
curl -XGET http://외부IP:포트번호 -u elastic:비밀번호
Logstash 설치
1  | curl -L -O https://artifacts.elastic.co/dow  | 
Beats 소개
Elastic에서 제공하는 Beat 솔루션들
- FileBeat
 - PacketBeat
 - WinlogBeat
 - MetricBeat
 - HeartBeat
 - AuditBeat
 - FunctionBeat
 - JournalBeat
 
FileBeat 설치
1  | curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.11.1-linux-x86_64.tar.gz  | 
Logstash, FileBeat 압축해제
1  | tar -xzvf logstash-7.11.1-linux-x86_64.tar.gz  | 
다운로드 받았던 설치파일 관리
1  | mv *.gz ./stack  | 
디렉토리 이름 변경
1  | mv logstash-7.11.1/ ls-711  | 
Logstash의 특징
logstash는 3가지 섹터로 이루어지는데, 이것을 통틀어
Pipeline이라고 한다.입력 및 출력은 별도의 필터를 사용하지 않고도 파이프라인에 들어가거나 나올 때 데이터를 인코딩하거나 디코딩 할 수 있는
코덱을 지원한다.Input 섹션에서 데이터를 받아들인다.
- 데이터를 받아들여 이벤트를 생성
 - stdin : 표준 입력
 - file(DB, csv)
 - beats : beats에서 보낸 이벤트 처리
 - etc
 
Filter 섹션에서 데이터 연산
입력 섹션에서 들어온 이벤트를 수정
EOF가 될 때까지 데이터를 읽음
중간에 프로세스가 종료될 수 있기 때문에 offset으로 읽었던 지점 저장
읽어들이는 event들은 각각 6개의 파티션으로 구분됨
- 각 파티션은 commma seperated되어 구분됨
 - JSON 파일 형태로 객체화하여 elasticsearch로 던져준다.
- JSON 파일도 용도에 따라 자료구조가 다르다 (검색 용도, 분석 용도)
 
 
필터 플러그인
mutate: 이벤트 필드에 대한 일반적인 변화 수행
Output 섹션으로 출력
- 정제된 이벤트 데이터가 들어가는 섹션
 - 출력 타겟은 multi로 들어갈 수 있음
 - 이벤트 데이터들을 표준 출력(stdout)과 elasticsearch 등으로 보내기가 가능
 
- 사용자 IP의 송신, 수신 데이터를 받아들일 수 있는 모듈 파일
 
Logstash 파이프라인으로 이벤트를 받아 ES에 출력
표준 입력으로 데이터 받기 실습
Logstash 폴더 안에 사용자 정의 파이프라인 configuration을 담기위해 만들고 싶은 디렉토리를 만든다.
1
mkdir 디렉토리 명
사용자 정의 파이프라인 configuration 파일을 만들어 vim 에디터로 아래 코드 작성을 한다.
1
vi 파일명.conf

아직 Filter 섹션은 정의하지 않은 상태
- 필터 섹션은 선택 사항이다.
 
input, output 방식 설정 후 host의 elasticsearch로 데이터 전송하고자 함
- 입력은 콘솔에 입력하는 표준입력 방식을 사용
 
다 작성했다면 logstash 폴더로 이동
파이프라인 동작
1
./bin/logstash -f ./디렉토리명/파일명.conf
1
>>> 콘솔에 직접 메시지 입력
1
2
3
4
5
6{
"message" => "입력한 내용",
"host" => "Host 이름",
"@timestamp" => 2021-02-23T02:52:04.037Z,
"@version" => "1"
}
결과
- 위와 같은 형태 (JSON) 형태로 입력한 메시지가 conf파일의 output(
hosts,user,password)정보를 가진 elasticsearch에 전송된 것을 볼 수 있었던 실습이었음. 
File 형태로 이벤트 데이터 파이프라이닝 실습
- Ted님의 웹서버에서 blogs.csv 파일을 vm에 다운로드 받았다.
 
- cat으로 csv 파일을 까본 결과…
 - 어마어마한 문서 양으로 도중에 멈췄다.
 - 그런데 중간에 세미콜론으로 의미가 구분되어 있는 것이 보인다.
 

아까 만든 디렉토리에 또다른 conf 파일을 생성하여 이번엔 새로운 파이프라인을 구축한다.
1
vi 파일명.conf
코드 작성
- 오타가 나지 않도록 주의하자
 

코드 분석
input 섹션
file: file로 받겠다는 의미. csv 파일path: 파일을 읽어올 경로start_position: Logstash를 시작 할 때 file의 어디서부터 읽을 것인지 결정하는 설정.- start_positon 값이 
beginning인 경우 재 시작하더라도 파일의 처음부터 읽겠다고 명시 
- start_positon 값이 
 since_db_path- logstash에서 최초 실행 이후 재실행 시, 마지막으로 읽은 파일위치를 
since_db에 저장된offset부터 읽기 시작한다. - 따라서 
since_db_path는 파일을 마지막으로 읽은 위치를 가져오기 위한 경로를 설정하는 것인데, 위 start_position의 값을 beginning으로 해놓았기 때문에 의미가 없다고 봐야한다. (읽을 때마다 처음부터 다시 읽기 때문에) - 그래서 값인 
/dev/null은 경로 없음이나 다름없다고 생각해도 된다.- 테스트 환경인 경우 since_db 경로 때문에 테스트가 번거롭다고 한다.
 
 
- logstash에서 최초 실행 이후 재실행 시, 마지막으로 읽은 파일위치를 
 
filter 섹션
dissect필터 : 추출할 필드의 시퀀스와 필드 사이의 구분 문자 지정- 이벤트 데이터 전체에 반영된 공통 구조를 그대로 이용하여 원하는 부분을 잘라내는 기능을 한다.
 mappingmessage: 이벤트 데이터를 세미콜론 구분자로 형식을 설정하고 나눈 데이터의 이름을 지정한다.
date필터 : 날짜를 구문 분석 후 해당 날짜 또는 타임 스탬프를 이벤트의 logstash 타임 스탬프로 사용하는데 사용이벤트 데이터의 날짜는 elasticsearch가 이해하도록 변환하는 작업을 거쳐야 한다. 그렇지 않으면 String Type으로 인식하여 날짜 관련 visulization을 진행하지 못할 수 있다.
match: value type은 array.- dissect 필터에서 가공된 date field를 다음과 같은 format으로 변환
 
target: match에 지정된 형식으로 target된 필드에 타임 스탬프 저장remove_field: date 필터 기능이 수행되면 이벤트 데이터에서 해당 필드를 제거
mutate필터 : 이벤트 데이터에서 필드의 이름에 대한 연산 수행 (수정, 삭제)remove_field: mutate 필터링이 성공했을 때 해당 필드를 제거
필터링 되기 전 필드들은 지워지지 않고 미러링되어 디스크에 쌓이게 된다.
- 사용하고자 하는 필드가 없다면 꼭 remove_field로 바뀌기 전 필드들을 삭제하라
 
output 섹션
stdout: 표준출력, 콘솔에 출력 시 json 형태로 출력한다.elasticsearch: 사용자의 elasticsearch에 이벤트 데이터 출력index: elasticsearch에 전송되어 쿼리될 인덱스 이름 지정- host, user, password : elasticsearch의 주소와 암호
 
파이프라인 실행
1
./bin/logstash -f ./디렉토리명/파일명.conf
전송 결과 확인
elasticsearch client로 접속
Menu -> Management - Dev Tools
1
GET blogs/_search
해당 메소드로 쿼리하여 json 포맷 결과 확인
Elasticsearch REST Query
위 blogs.csv 파이프라이닝 실습과 이어짐
Console에 아래 명령 입력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15GET _cat/indices?v&s=index:desc //인덱스 정보 출력
//method [index_name]/_QUERY 형태
GET [index_name]/_count
//좀 더 정확한 검색
GET [index_name]/_search
{
"query": { //항상 query 속성이 먼저 오게 됨.
"match": {
"seo_title": "logstash"
}
}
}
인덱스 이름이 blog인 데이터 중에서
seo_title에logstash가 있거나released라는 단어가 있는 데이터를 찾는 쿼리 (기본적으로 OR Condition)

- hits를 봤을 때 총 113건의 데이터가 나온 것을 볼 수 있다.
 
1  | GET blogs/_search  | 
- seo_title 필드에 elsasticsearch와 released 단어가 모두 있으며, size가 100인 title을 조회하라
 
Filebeat 실습
- filebeat의 module 폴더를 확인하면, 여러 product들의 log format을 볼 수 있다.
- 아직 잘 모르겠지만 프로덕트마다 로그 포맷이 달라 엄청난 기능이라고 하셨다.
 
 - 간단하게 Filebeat에 enable만 하면 사용할 수 있게 되어 있음.
 
1. 샘플 데이터 다운로드 및 환경 설정
따로 설정한
filebeat.yml파일,로그 데이터 압축 파일을 Ted님의 웹서버에서 받아 로컬 환경에 맞게 세팅홈디렉토리에 sample-data 폴더 생성
- 다운받은 로그 샘플 데이터 압축 해제
 

- …server1, server2, server3 폴더들
 - 많은 양의 로그 파일들을 볼 수 있다
 

filebeat.inputs의paths: 로그 샘플 데이터가 있는 디렉토리 경로 설정output.elasticsearch: 로그를 뿌려줄 elasticsearch 호스트와 암호 설정- 여기서 index 형태도 설정할 수 있다.

 
- 여기서 index 형태도 설정할 수 있다.
 
2. Filebeat Test Command
filebeat configuration 구성에 이상이 없는지 테스트
1  | ./filebeat test config  | 

현재 설정을 사용하여 filebeat가 출력에 연결할 수 있는지 테스트
1  | ./filebeat test output  | 

3. 업로드
1  | ./filebeat -e  | 
4. Cilent에서 로그 집계 확인
Menu -> Management - Dev Tools
Console 명령 입력
1
GET logs_server*/_count

총 1752476건의 로그 집계 확인
[Elasticsearch] Elasticsearch Engineer Training -2
https://msj0319.github.io/2021/02/23/Elasticsearch-Elasticsearch-Engineer-Training-2/
![[Kotlin] 2장. 변수와 자료형, 연산자](/images/Kotlin.png)
![[안드로이드] 기본 위젯들](/images/android.png)
![[Elasticsearch] Elasticsearch Engineer Training -4](/images/elastic.jpeg)