-
elasticsearch cluster and filebeat with kibanaTech/DS 2018. 3. 16. 17:38반응형
파일 분석을 위해 엘라스틱 과 filebeat , kibana 를 사용하도록 한다.
spring boot 어플리케이션에서 발생하는 로그를 filebeat 로그 수집기를 통해 엘라스틱 으로 쌓은 후 kibana 를 통한 대시보드로 모니터링 하도록 한다.
최종적인 결과는 아래 그림과 같다.
# 파일 분석 시스템의 구성 설명
3 대의 물리적 머신에 엘라스틱서치를 클러스터링 하도록 한다.standby / active 로 구성 하기 위해 3대의 노드들 모두 master 설정을 하였다.master 노드들 도한 데이터를 저장 하도록 한다.아래 설치 정보들은 모든 노드들에 공통으로 적용 한다.elasticsearch 의 jvm.option 설정은 하지 않았음. 시스템 퍼포먼스는 테스트 진행후 해도 되기때문에 나중에 하도록 한다.elasticsearch,kibana,logstash 등 기타 정보들에 대한 인증 설정을 위해 x-pack 을 적용한다.x-pack 은 모든 노드들의 elasticsearch,kibana,logstash 등 모든 제품들에 개별적으로 설치 해주어야 한다.(추후 기본으로 설치 된다고도 함)x-pack 적용시 이점은 클러스터링 상태 모니터링 및 각종 관리들을 kibana 웹기반으로 편리하게 관리 가능하다는것, 그리고 이외 +++x-pack 은 라이센스가 있어야 사용가능함.x-pack 최초 설치시 한달 무료 적용 된다.x-pack basic license 는 무료이며, 1년단위로 라이센스를 적용해주어야 한다.신청하면 이메일로 다운로드 링크를 받게 되며, 라이센스 적용은 공식 홈페이지에 자세히 나와있으므로 큰 무리 없이 적용 할 수있다.현재 테스트하려는 시스템에서는 인증은 필요 없기때문에 설치 및 적용은 하지 않도록 한다.
# 참고 및 시스템 정보
- 참고http://kimjmin.net/2018/01/2018-01-setting-es-cluster-1/- OSCentOS 7- es versionelasticsearch 6.x
# 각 엘라스틱 서버이름을 변경하기 위해 시스템의 hostname 을 변경하도록 한다. (서버 1,2,3 모두 동일)
hostnamectl set-hostname es-data-1hostnamectl set-hostname es-data-2hostnamectl set-hostname es-data-3>>>>> orvi /etc/sysconfig/networkHOSTNAME=es-master
# hostname 변경 적용을 위해 시스템을 재시작 하도록 한다.
reboot
# jdk 1.8 설치 (엘라스틱서치는 자바기반이므로 jdk 를 설치 해야함.)
yum install -y java-1.8.0-openjdk-devel.x86_64
# 엘라스틱 설치 (rpm 패키지로 설치하기 위해 아래 repo 생성 및 설치 - 서버 1,2,3 모두 동일)
vi /etc/yum.repos.d/elasticsearch.repo[elasticsearch-6.x]name=Elasticsearch repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-mdyum -y install elasticsearch# 엘라스틱 서치 설정 (서버 1,2,3 모두 동일 )
# 클러스터링 이름 설정cluster.name: es-cluster# 해당 노드가 마스터가 되도록설정node.master: true# 해당 노드에 데이터를 저장하도록 설정 (만약 마스터 역할만 할경우 false 로 설정)node.data: true# 해당 노드의 이름 (위에서 설정한 이름으로 할것이므로 시스템의 hostname 으로 설정)node.name: ${HOSTNAME}# 해당 노드에 접근하도록 하기 위한 설정 (ip or _local_, _global_ etc...)network.host: _site_# 클러스터링 되어있는 노드들간의 유니캐스팅 하기 위해 각 노드들의 ip:port 설정 (내부아이피)discovery.zen.ping.unicast.hosts: ["10.10.10.1:9300","110.10.10.2:9300","10.10.10.3:9300"]*** jvm.options 를 비롯한 시스템 퍼포먼스를 위한 설정을 해야하지만 기본으로도 현재 시스템에서는 문제가 없으므로 패스 하도록 한다.
#엘라스틱 서치 구동 및 재시작시 자동 시작되도록 등록
systemctl enable elasticsearch
systemctl start elasticsearch
# 엘라스틱 서치 클러스터 상태 확인
http://10.10.10.1:9200/_cat/health?v&prettyhttp://10.10.10.2:9200/_cat/health?v&prettyhttp://10.10.10.3:9200/_cat/health?v&prettyepoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1521187495 04:04:55 es-cluster green 3 3 85 42 0 0 0 0 - 100.0%
# 엘라스틱 서치 클러스터 노드 확인
http://10.10.10.1:9200/_cat/nodes?v&prettyhttp://10.10.10.2:9200/_cat/nodes?v&prettyhttp://10.10.10.3:9200/_cat/nodes?v&prettyip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 10.10.10.1 23 25 43 0.01 0.03 0.05 mdi * es-data-1 10.10.10.2 44 43 42 0.00 0.01 0.05 mdi - es-data-2 10.10.10.3 30 89 0 0.01 0.03 0.05 mdi - es-data-3
참고로 shards ,replica 설정은 index 설정시 해주면 된다.
#kibana 설치를 위해 repo 설정 후 설치하도록 한다.
#서버 1,2,3 모두 동일하게 설치해준다. (fail over 를 위해 )
vi /etc/yum.repos.d/kibana.repo[kibana-6.x]name=Kibana repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md#kibana 설치 및 시작 , 부팅시 자동 시작되도록 등록
yum -y install kibana
systemctl enable kibana
systemctl start kibana
# kibana 구성 설정 (서버 1,2,3 모두 동일)
vi /etc/kibana/kibana.yml# 외부접근 포트 설정server.port: 5601server.host: "10.10.10.1" #서버 아이피# elasticsearch 접근 url 지정elasticsearch.url: "http://10.10.10.1:9200"kibana 재시작# logstash 설치 (여기서 logstash 사용은 하지 않는다 , 하지만 설치 방법을 기록하기위해 작성함)
vi /etc/yum.repos.d/logstash.repo[logstash-6.x]name=Elastic repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md</pre>yum -y install logstash#부팅시 자동 시작하도록 logstash 등록systemctl enable logstash#logstash 시작systemctl start logstash<pre>logstash 는 무겁기 때문에 앞으로 파일 로그 혹은 특정 시스템으로부터 로그를 받을경우 beat 를 사용하도록 한다.beat를 각 시스템들에 agent 형식으로 설치 후 logstash 로 데이터를 전송하도록 설정한다.beat는 가볍고 단독으로 설치 후 logstash 와 연동 할수있다.#kibana 샘플 데이터 테스트 (공식 가이드 데이터를 기준으로 테스트함)
참고:6.x 설치하였기때문에 6.0 튜토리얼 참고 하였으며, 5.x 버전은 한글번역이 되어있어서 참고함.https://www.elastic.co/guide/en/kibana/6.0/tutorial-load-dataset.htmlhttps://www.elastic.co/guide/kr/kibana/current/tutorial-visualizing.html6.x 버전의 샘플 데이터를 가이드 대로 따라 함#filebeat 설치
vi /etc/yum.repos.d/filebeat.repo[filebeat-6.x]name=Elastic repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-mdyum -y install filebeat#filebeat 설정
vi /etc/filebeat/filebeat.ymlfilebeat.prospectors:#log파일 경로 설정은 패턴 설정으로도 가능함.#공식 가이드에 잘 나와있으므로 경로 설정은 공식 가이드를 참고하도록 한다.- type: logenabled: truepaths:- "log file path"##### elasticsearch ##########output.elasticsearch:# Array of hosts to connect to.hosts: ["10.10.10.1:9200","10.10.10.2:9200","10.10.10.3:9200"]setup.kibana:host: "10.10.10.1:port"host: "10.10.10.2:port"host: "10.10.10.3:port"#spring boot 프로젝트 생성
- maven project
- pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example.elk</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><-- DateUtils 사용을 위해 추가함 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>1초에 한번씩 로그를 쌓도록 한다.
#logback 설정
<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="30 seconds"><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>./log/demo.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>labatory.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-4relative --- [ %thread{10} ] %logger{35} - %msg%n</pattern></encoder></appender><logger name="org.springframework" level="info"/><logger name="org.hibernate" level="debug"/><root level="debug"><appender-ref ref="FILE"/> <!-- File로 로그를 남기고자 할 때 사용 --></root></configuration>#로그 발생하도록 코드 추가.
@SpringBootApplication@EnableSchedulingpublic class DemoApplication {private static final Logger log = LoggerFactory.getLogger(DemoApplication.class);public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Scheduled(fixedRate = 1000)public void demo(){System.out.println("XXX");log.info("demo",DateUtils.addHours(new Date(),1).toString());}}서비스를 실행 시키면 1초에 한번씩 로그를 쌓게 된다.
또한 filebeat 가 해당 파일을 읽어서 output 으로 elasticsearch 로 로그를 전송 하게 된다.
kibana 에서 indexpattern 추가 및 discover 에서 해당 index pattern 기반으로 로그들을 볼수 있게 된다.
filebeat 를 통해 elasticsearch 에 로그를 쌓게 되면 기본적으로 filebeat-버전명-날짜 패턴으로 생성 된다. (이부분도 설정 가능할까?)
엘라스틱에 생성된 index 들을 보기 위해서는 아래와같이 요청하면 볼수있게 된다.
http://10.10.10.1:9200/_cat/indices?v&prettyhttp://10.10.10.2:9200/_cat/indices?v&prettyhttp://10.10.10.3:9200/_cat/indices?v&pretty여기까지 간단하게 엘라스틱 서치 클러스터링 및 파일 수집기인 filebeat 를 통해 로그를 수집한 후 kibana 로 모니터링 하기 이다.
반응형'Tech > DS' 카테고리의 다른 글
01. 텐서플로우 와 간단한 신경망 구현 실습 (0) 2020.06.05 계층형 테이블 구조 및 쿼리 (1) 2018.01.09 mac cassandra 설치 및 시작 (0) 2017.10.12 자동 증가 컬럼생성 방법 (0) 2017.08.14 데이터베이스 인덱싱 생성 방법 (0) 2017.08.02