[Elastic Stack] Elastic Stack 구축

# Elastic Stack 구축

(로그 통합 시스템)

1. 대상 시스템

시스템 종류

2. 진행 단계

2-1. Phase 1 (로그 수집)

#수집 대상
#추가사항

2-2. Phase 2 (호스트 로그 및 메트릭 수집)(중단)

3. 아키텍처

4. 구축

4-1. Node 생성(OpenStack)

4-2. Elasticsearch

4-2-1. 설치

  1. Repo 설정

    [elasticsearch-6.x]
    name=Elasticsearch repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  2. Elasticsearch 설치

    sudo yum install elasticsearch -y
    
  3. SysV init 과 systemd 중 어떤 서비스를 사용하는지 확인

    ps -p 1
    
  4. systemd

    sudo /bin/systemctl daemon-reload
    sudo /bin/systemctl enable elasticsearch.service
    
  5. 호스트네임 변경

    hostnamectl set-hostname [호스트네임]
    

4-2-2. 경로

4-2-3. 기본 설정

  1. 클러스터명 및 노드명 변경

    cluster.name: [클러스터 이름]
    
    node.name: ${HOSTNAME}
    

4-2-4. 세부 설정

  1. Java Heap 메모리 설정

    sudo vim /etc/elasticsearch/jvm.options
    
    -Xms8g
    -Xmx8g
    

    (Java Heap 외에 시스템 메모리의 절반은 루씬 파일 캐시용)

  2. 네트워크 설정

    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    network.host: [ IP | _local_ | _site_ | _global_ ]
    
  3. Bootstrap Check 설정(오류 많이 발생)

    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    bootstrap.memory_lock: true
    

    elasticsearch 재시작 후, 실행에 실패하면 시스템 로그를 확인하여 추가 설정 진행

    sudo vim /etc/security/limits.conf
    
    elasticsearch soft memlock unlimited
    elasticsearch hard memlock unlimited
    
  4. Unicast 설정 (데이터노드 - 마스터노드 간의 연결 설정)

    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    discovery.zen.ping.unicast.hosts: [마스터 노드 IP]
    
  5. 노드 역할 설정

    1. 마스터 노드 설정
    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    node.master: true
    node.data: false
    
    1. 데이터 노드 설정
    sudo vim /etc/elasticsearch/elasticsearch.yml
    
    node.master: false
    node.data: true
    

4-3. Kibana

4-3-1. 설치

  1. Repo 설정

    [kibana-6.x]
    name=Kibana repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  2. Kibana 설치

    sudo yum install kibana -y
    
  3. SysV init 과 systemd 중 어떤 서비스를 사용하는지 확인

    ps -p 1
    
  4. systemd

    sudo /bin/systemctl daemon-reload
    sudo /bin/systemctl enable kibana.service
    

4-3-2. 경로

4-3-3. 기본 설정

  1. Elasticsearch URL

    sudo vim /etc/kibana/kibana.yml
    
    elasticsearch.url: "http://MaterNodeIP:9200"
    
  2. 외부 접근 주소

    server.host: "IP"
    

4-4. Logstash

4-4-1. 설치

  1. Repo 설정

    [logstash-6.x]
    name=Elastic repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  2. Kibana 설치

    sudo yum install logstash -y
    
  3. SysV init 과 systemd 중 어떤 서비스를 사용하는지 확인

    ps -p 1
    
  4. systemd

    sudo /bin/systemctl daemon-reload
    sudo /bin/systemctl enable logstash.service
    

4-4-2. 경로

4-4-3. 기본 설정

  1. 모니터링 설정

    sudo vim /etc/logstash/logstash.yml
    
    xpack.monitoring.elasticsearch.url: ["http://MaterNodeIP:9200"]
    
  2. 관리 기능

    추가 라이센스 필요

  3. 파이프 라인 설정

    sudo vim /etc/logstash/pipeline.yml
    
    - pipeline.id: [파이프라인 이름]
      path.config: "/etc/logstash/conf.d/[Config파일]"
    
  4. Config 설정

    input{ 
        syslog{
            port => 5514 // 514포트는 root 권한만 사용가능, root 권한이 없으므로 포트 변경
            type => "syslog" // 다른 input과 구분하기 위해 type 지정
        }
    }
       
    filter{
    	// 수집한 메트릭 및 로그 태깅 및 정제
       	
    	grok{
            match=> {}
    	}
    	mutate{
            // 태그 및 필드 추가, 제거
            gsub =>[
                "필드", "기존값", "수정할값" // 해당 필드의 값을 지정한 값으로 변경
            ]
    	}
        translate{
        	// 대상 필드의 값을 새로 생성한 목적 필드에 새로운 값으로 저장(이름 변경) 
            field => "대상 필드"
            destination => "목적 필드"
            dictionary => [
                "대상 필드 값", "목적 필드 값",
                "10.1.1.1", "cisco-n9k"
            ]
        }
    }
    output{
        // ouput 지정
        elasticsearch{
            // elasticsearch
            hosts => ["호스트 IP"]
            index => "name-syslog-%{+YYYY.MM.dd}"
        }
        file{
            path => ["파일을 생성할 경로"]
            codec => line { format => "메시지 및 로그 포맷 설정"}
        }
    }
    

4-4-4. 로그 포맷 수정

  1. Netapp syslog

    %{SYSLOGTIMESTAMP:syslog_timestamp} \[%{DATA:cluster}_%{DATA:node}:%{DATA:EMS_Indentifier}:%{LOGLEVEL:log-level}]:%{GREEDYDATA:syslog_message}
    
  2. Cisco syslog

    %{INT:sequence}>\:%{SPACE}%{YEAR}%{SPACE}%{MONTH}%{SPACE}%{MONTHDAY}%{SPACE}%{TIME}%{SPACE}%{WORD:tz}\:%{SPACE}%{NOTSPACE:facility}\-%{NOTSPACE:loglevel}\-%{NOTSPACE:facility_mnemonic}%{SPACE}%{GREEDYDATA:msg}
    

4-4-5. 포트포워딩 설정

iptables -t nat -A PREROUTING -p UDP -m udp --dport 514 -j REDIRECT --to-ports 5514

4-5. Syslog 설정

4-5-1. Netapp - 7 mode

ONTAP에서 설정

4-5-2. Netapp - C mode

  1. 시스로그 서버 목적지 설정

    event notification destination create -name [dest-name] -syslog [syslogserver-IP]
    
  2. 시스로그 포워딩 설정

    event notification create -filter-name [filter-name] -destination [dest-name]
    

4-5-3. Cisco - N@K

logging server [syslogserver-IP] [log-level] user-vrf [vrf-name]