Docker-compose로 Elastic Stack 구축

Elastic Stack



이번은 Beats 로 다양한 로그를 수집. elasticsearch 에 저장. kibana 로 시각화하는 환경까지를 docker-compose 로 구축합니다.

docker-compose로 구축하는 동기 부여로는
  • docker를 사용하여 쉽게 배포
  • docker-compose 그러면 빌드 설정을 파일로 저장할 수 있습니다

  • 또한 docker를 사용하지 않고 구축한다면 Elastic Stack은 Elastic Stack 제품 페이지에서 다운로드하여 사용할 수 있습니다.

    이 기사에서는 절차만 설명합니다. 설정 파일의 내용은 문서를 읽고 이해하십시오.

    또, 이 기사로 기록하고 있는 설정은 어디까지나, 시험용입니다. 프로덕션 운용 시에는 다양한 관점에서 튜닝할 필요가 있습니다.

    구축 환경



    구축에 사용한 환경은 다음과 같습니다.
  • CentOS Linux release 7.4
  • Docker version 18.03.1-ce, build 9ee9f40
  • docker-compose version 1.22.0, build f46880fe

  • 구성도



    잡화이지만, 구축하는 Elastic Stack의 구성도입니다. 각 서버에 MetricBeat를 설치하고 10.0.0.1 서버에 로그를 집계합니다. kibana 를 통해 대시보드를 탐색합니다.



    Elastic Stack 구축 절차



    docker 및 docker-compose 설치


  • dockerdocker-compose 설치 (설치 방법 생략)

  • elasticsearch와 kibana를 docker 구축


  • 다음과 같이 docker-compose.yml 를 준비
  • 주) docker 볼륨을 사용하여 데이터를 유지합니다.

  • 위의 docker-compose.yml가있는 디렉토리에서 docker-compose up -d를 실행

  • docker-compose.yml
    version: '2'
    volumes:
      elastic:
        driver: 'local' 
    
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
        expose:
          - 9200
        ports:
          - "9200:9200"
          - "9300:9300"
        tty: true
        environment:
          discovery.type: single-node
        volumes:
          - elastic:/usr/share/elasticsearch/data
    
      kibana:
        image: docker.elastic.co/kibana/kibana:7.1.1
        ports:
          - "5601:5601"
        depends_on:
          - elasticsearch
        environment:
          ELASTICSEARCH_URL: http://elasticsearch:9200
    

    Metricbeat을 docker로 구축


  • Metricbeat 컨테이너를 docker pull docker.elastic.co/beats/metricbeat:7.0.1 에서 가져오기
  • Metricbeat 컨테이너를 사용하여 kibana와 elasticsearch를 설정합니다 (kibana에 대시 보드를 작성하는 등)
  • docker run \
    docker.elastic.co/beats/metricbeat:7.1.1 \
    setup -E setup.kibana.host=10.0.0.1:5601\
    -E output.elasticsearch.hosts=["10.0.0.1:9200"]
    
  • Metricbeat 설정 Running Metricbeat on Docker
  • 일단 움직이고 싶을 때는 curl -L -O https://raw.githubusercontent.com/elastic/beats/7.0/deploy/docker/metricbeat.docker.yml에서 설정 파일을 얻는다.
  • Metricbeat 컨테이너를 움직이기 위해 다음과 같은 docker-compose.yml

  • docker-compose.yml
    version: '3'
    services:
        metricbeat:
            image: docker.elastic.co/beats/metricbeat:7.1.1
            user: root
            volumes:
                - /proc:/hostfs/proc:ro
                - /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
                - /:/hostfs:ro
                - /var/run/docker.sock:/var/run/docker.sock
                - ./metricbeat.docker.yml:/usr/share/metricbeat/metricbeat.yml:ro
            environment:
                - ELASTICSEARCH_HOST=10.0.0.1:9200
                - KIBANA_HOST=10.0.0.1:5601
            network_mode: "host"
            command: -system.hostfs=/hostfs
    
  • metricbeat.docker.yml 의 소유자를 root 로 만든다
  • chown root:root metricbeat.docker.ymlMetricbeat 에서 컨테이너 시작

    metricbeat.docker.yml의 설정 예



    아래의 metricbeat.docker.yml은 시스템과 docker-compose up -d 컨테이너 정보를 수집하는 설정입니다.
  • 시스템 모듈
  • 도커 모듈

  • metricbeat.docker.yml
    metricbeat.config:
      modules:
        path: ${path.config}/modules.d/*.yml
        # Reload module configs as they change:
        reload.enabled: true
    
    metricbeat.autodiscover:
      providers:
        - type: docker
          hints.enabled: true
    
    metricbeat.modules:
    - module: docker
      metricsets:
        - "container"
        - "cpu"
        - "diskio"
        - "healthcheck"
        - "info"
        #- "image"
        - "memory"
        - "network"
      hosts: ["unix:///var/run/docker.sock"]
      period: 10s
      enabled: true
    
    - module: system
      metricsets:
        - cpu             # CPU usage
        - load            # CPU load averages
        - memory          # Memory usage
        - network         # Network IO
        - process         # Per process metrics
        - process_summary # Process summary
        - uptime          # System Uptime
        - socket_summary  # Socket summary
        - core           # Per CPU core usage
        - diskio         # Disk IO
        - filesystem     # File system usage for each mountpoint
        - fsstat         # File system summary metrics
        - raid           # Raid
        - socket         # Sockets and connection info (linux only)
      enabled: true
      period: 10s
      processes: ['.*']
    
      # Configure the metric types that are included by these metricsets.
      process.include_top_n:
        by_cpu: 5      # include top 5 processes by CPU
        by_memory: 5   # include top 5 processes by memory: 
      cpu.metrics:  ["percentages"]  # The other available options are normalized_percentages and ticks.
      core.metrics: ["percentages"]  # The other available option is ticks.
    
    processors:
      - add_cloud_metadata: ~
    
    output.elasticsearch:
      hosts: '10.0.0.1:9200'
    
    

    참고


  • Running Metricbeat on Docker

  • 대시보드 확인


  • 왼쪽 배너에서 대시보드를 선택합니다.
  • docker 그리고 metricbeat.docker.ymlの設定例[Metricbeat System] Overview ECS 의 대시보드를 볼 수 있습니다.



  • 이렇게 쉽게 수집하고 대시보드도 볼 수 있습니다.
    추가 정보를 수집하고 싶은 항목이 있으면 elasticsearch는 문서도 충실하기 때문에 다음을 참고하십시오.
  • Elastic Stack and Product Documentation
  • 좋은 웹페이지 즐겨찾기