top bar

글 목록

레이블이 elk인 게시물을 표시합니다. 모든 게시물 표시
레이블이 elk인 게시물을 표시합니다. 모든 게시물 표시

2017년 7월 28일 금요일

[Elasticsearch] 'Docker Compose' 로 ELK 스택 구성


 이번엔 Docker를 이용해 ELK 스택을 구성해 보겠다. Docker는 LXC 기술중 하나로서, 이식성이 뛰어난 격리된 프로세스 컨테이너를 통해 어플리케이션을 구동하는 방식이다. Docker 관련 문서들은 차고 넘치니, 따로 정리하지는 않겠다.

Docker Compose는 이러한 Docker 컨테이너 여러개를 조합(Compose)하여 설정 할 수 있게 해주고, 따라서 다수의 컨테이너 설정을 하나의 파일에서 가능하게 해 준다. 또한 설정된 컨테이너를 한번에, 또는 각각 하나씩 구동 할 수도 있다.

하지만 단 하나의 컨테이너를 구동할때도 Docker Compose가 유용하다.
가령, 아래의 tomcat 컨테이너를 띄우는 Docker 명령이 있다고 하자.

$ docker run -it --rm -p 8888:8080 tomcat:8.0

 위의 설정과 동일한 컨테이너를 Docker Compose로는 아래와 같이 설정하여 구동할 수 있다.

version: '2'
services:
  tomcat:
    image: tomcat:8.0
    ports:
      - 8888:8080

뭔가 텍스트가 더 많이 들어 간 것 같지만 기분 탓일 거다. 일단 깔끔하게 YAML 형식을 지원하는 Docker Compose 설정이 보기가(가독성이) 더 좋아 보인다. 위의 기본 docker 명령 예제에서 입력한 옵션은 많지 않지만, 훨씬 더 복잡한 옵션을 입력하고 컨테이너를 구동한다고 했을때 옵션을 입력하기도, 확인하기도 어려울 것이다. 따라서, 복잡한 하나 또는 여러개의 컨테이너 설정, 그리고 그 컨테이너들간의 관계를 설정 해야할 때는 당연히 뒤도 안보고 Docker Compose를 사용해야 한다.



docker-compose.yml 작성



ELK를 위한 docker-compose.yml 파일의 기본 골격은 아래와 같다.

version: '2'
services:
 elasticsearch:
  .
  .
  .

 logstash:
  .
  .
  .

 kibana:
  .
  .
  .

하나씩 살펴보자.

1) Elasticsearch
elasticsearch:
  image: docker.elastic.co/elasticsearch/elasticsearch:5.4.0
  container_name: elasticsearch
  volumes:
   - ./elasticsearch/config/elasticsearch.yml:/usr/share
/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/data:/usr/share/elasticsearch/data
  environment:
   ES_JAVA_OPTS: "-Xmx2048m -Xms2048m"
  ports:
   - 9200:9200
   - 9300:9300

'volumes' 설정을 통해서 외부의 파일시스템과 컨테이너 내부의 파일시스템을 마운트한다. [외부디렉토리]: [내부디렉토리] 와 같은 형식으로 마운트할 수 있는데, 위에서 보는것과 같이 파일 자체(elasticsearch.yml)도 마운트 가능하다.

'environment'로 elasticsearch 인스턴스의 JVM 옵션을 줄 수 있다. 'ports' 또한 컨테이너 외/내부의 포트를 설정하여 해당 포트를 통한 통신을 가능하게 해 준다. 별거 없다. ㅇㅇ

2) Logstash
 logstash:
  image: docker.elastic.co/logstash/logstash:5.4.0
  container_name: logstash
  command: logstash -f /usr/share/logstash/pipeline/logstash.conf
  volumes:
   - ./logstash/config/:/usr/share/logstash/config/
   - ./logstash/pipeline/:/usr/share/logstash/pipeline/
  environment:
   LS_JAVA_OPTS: "-Xmx2048m -Xms2048m"
  ports:
   - 10080:10080
  depends_on:
   - elasticsearch

elasticsearch 설정과 흡사하다. 단, 'command' 설정으로 컨테이너를 구동할때 'logstash -f ... ' 명령어로 logstash 를 실행하도록 한다. 물론 '-f' 옵션 다음의 오는 경로는 컨테이너 내부 파일 경로이다.

'depends_on' 은 'elasticsearch' 컨테이너가 시작한 후에 logstash 컨테이너를 구동하도록 하는 설정이다.

3) Kibana
 kibana:
  image: docker.elastic.co/kibana/kibana:5.4.0
  container_name: kibana
  volumes:
   - ./kibana/config/:/usr/share/kibana/config
  ports:
   - 5601:5601
  depends_on:
   - logstash

설명할 건 다 했으니 생략.



docker-compose 구동



'docker-compose.yml' 파일이 위치하고 있는 디렉토리에서,
아래와 같은 명령을 통해 구동 한다.

$ docker-compose up -d

로그를 보고 싶다면 아래 명령어를 사용한다.

$ docker-compose logs -f --tail="100" [service_name]

설정파일의 전체 내용은 아래에 있다.

https://gist.github.com/JuPyoHong/17362d9e0b64256b627dc063b00cc357


2017년 7월 11일 화요일

[Elasticsearch] Elastic 라이센스 등록

 엘라스틱 진영의 생태계는 시간이 지날 수록 고도화 되는 것 같다. 그에따라 다양한 도구들과 기능들이 제공되고 있는데, 아쉽게도(?) 대부분이 유료 라이센스를 필요로 하는 기능들이다. 하지만 기본적인 ELK Stack을 구축한다고 했을 때, 무료 라이센스인 'BASIC' 버전 만으로도 충분히 쓸만한 시스템을 구축 할 수 있다.

아래 웹 페이지로 접근하여, 라이센스별 기능 제공 여부를 확인 할 수 있다.














위 처럼 'BASIC' 버전의 'Free License' 를 선택하면 라이센스 등록 페이지로 이동하고, 이름과 이메일, 국가 등의 간단한 정보만 입력하면 '라이센스 json 파일'을 입력한 이메일로 받을 수 있다.

License Update 방법



간단하다. 라이센스 파일은 위에서 말한 것 처럼 'json' 파일로 다운로드가 되는데, 이 파일을 xpack의 rest api 로 밀어 넣어 주면 된다.

$ curl -XPUT -u elastic:changeme 
'http://10.213.128.227:9200/_xpack/license?pretty&acknowledge=true' 
-H "Content-Type: application/json" -d @[license file name].json

여기서 주의할 점은, elasticsearch 클러스터 서버에 'X-Pack' 플러그인이 설치 되어 있어야 한다는 것이다. 만약 설치가 안되어 있다면, '/_xpack' 으로 시작하는 api 자체를 사용할 수 없다.


License 확인



아래의 rest api로 등록된 라이센스 정보를 알 수 있다

$ curl http://10.213.128.190:9200/_license

결과는 아래와 같다.

{
  "license": {
    "status": "active",
    "uid": "blahblah",
    "type": "basic",
    "issue_date": "2017-06-08T00:00:00.000Z",
    "issue_date_in_millis": 1496880000000,
    "expiry_date": "2018-06-08T23:59:59.999Z",
    "expiry_date_in_millis": 1528502399999,
    "max_nodes": 100,
    "issued_to": "Hong Ju Pyo (Coupang)",
    "issuer": "Web Form",
    "start_date_in_millis": 1496880000000
  }
}

basic 라이센스의 유효기간은 '1년'이며, 1년이 지났다면 역시 무상으로 라이센스를 갱신할 수 있다. 즉, 평생 무료라는 얘기..