[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
필터 : 추출할 필드의 시퀀스와 필드 사이의 구분 문자 지정- 이벤트 데이터 전체에 반영된 공통 구조를 그대로 이용하여 원하는 부분을 잘라내는 기능을 한다.
mapping
message
: 이벤트 데이터를 세미콜론 구분자로 형식을 설정하고 나눈 데이터의 이름을 지정한다.
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/