티스토리 뷰

# ELK Stack 사용하여 네트워크 인프라를 모니터링 해보자
Elasticsearch : 데이터 처리/검색엔진(Search Engine)
Logstash : 실시간 데이터 파이프라인(Data pipeline)를 통하여 다양한 소스와 포캣을 가진 데이터를 수집하고 ETL을 수행한 이후 데이터 처리 엔진으로 보냄
 Data pipelines = input(데이터 수집) + filter(parsed) + Output(타입별로 검색엔진에게 전달)
Kibana : 데이터 시각화
수집 정보 : Syslog(네트워크 장비 로그), Netflow(네트워크 플로우 정보)
 
 
1. 구성도
GNS3 VM 이외에 별도로 ELK가 동작하는 1개의 별도 VM을 구성함, ELK는 container 기반으로 동작함

 
 
2. Cisco IOSv 설정
Cisco IOSv 버전 :15.6(2) , syslog 및 netflow(v9) 설정
en
conf t
 int g0/0
  ip add 192.168.254.80 255.255.255.0
  no shut
 int g0/1
  ip add 192.168.100.1 255.255.255.0
  no shut
 ip route 0.0.0.0 0.0.0.0 192.168.254.254
 
logging trap debugging
logging source-interface GigabitEthernet0/0
logging host 192.168.254.81
 
ip flow-export destination 192.168.254.81 5003
ip flow-export version 9
interface G0/0
 ip flow ingress
 ip flow egress
 
 
3. 별도 VM Docker, Docker-compose 설치
설치 환경 : CentOS 7.x 에 설치하였음, ELK Container 설치가될 VM은 최소 4GB 램 필요
Docker-compose : 멀티-컨테이너 도커 어플리케이션을 정리하고 실행, YAML 설정파일
 
Docker 설치)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
systemctl start docker
systemctl enable docker
docker version
 
Docker-compose 설치)
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
 
 
4. ELK Stack 실행
mkdir -p ~/elklab/config-dir ~/elklab/data
cd ~/elklab
 
more docker-compose.yml
elasticsearch ,logstash , kibana 를 구동 및 서비스 포트 지정과 볼륨 지정 및 연결(llink) 설정

version: '2'
services:
    elasticsearch:
        image: elasticsearch
        ports:
            - "9200:9200"
            - "9300:9300"
        volumes:
            - ./data:/usr/share/elasticsearch/data
    mylogstash:
        image: logstash
        volumes:
            - ./config-dir:/mylogstash/config-dir:rw
            - ./data:/mylogstash/data:rw
        ports:
            - "5002:5002/tcp"
            - "5003:5003/udp"
            - "514:514/udp"
            - "8080:8080/tcp"
        tty: true
        command: ["bash"]
        links:
            - elasticsearch
    kibana:
        image: kibana
        ports:
            - "5601:5601"
        links:
            - elasticsearch

 
ELK Stack 실행
docker-compose up -d
 
Container 실행 확인
docker-compose ps

 
 
5. Logstash 설정
logstash 컨테이너 접속
docker exec -ti elklab_mylogstash_1 bash
 
logstash 플러그인 설치 (syslog, netflow, Stdout, Dissect 포함)
logstash-plugin update
 
logstash config 파일 생성 (input - filter - output)
input : syslog(udp 514)와 netflow(udp 5003)으로 수집을 정의
filter : 필요한 데이블 구조로 변경
output : 로그 전송 과정을 디버깅

cat << "EOF" >> /mylogstash/config-dir/cisco1.conf
input {
 udp {
   port => 514
   type => "syslog"
 }
 udp {
   port => 5003
   codec => "netflow"
   type => "netflow"
 }
}
 
filter {
  dissect {
    mapping => { "message" => "<%{local_seq_num}>%{src_seq_num}: *%{ts} %{+ts} %{+ts}:%{+ts}:%{+ts}.%{+ts}: %%{facility}-%{severity}-%{mnemonic}: %{description}"} } date { match => ["ts", "MMM dd HH:mm:ss.SSS" ] remove_field => [ "ts" ]
  }
}
 
output {
 stdout {
   codec => rubydebug
 }
}
EOF

 
logstash 설정파일을 적용하여 실행
logstash -f mylogstash/config-dir/cisco.conf -r
 
syslog 확인 : 아래 처럼 syslog 정보가 지정된 필터를 통하여 출력을 확인

 
netflow 확인 : 아래 처럼 flow 정보 출력을 확인

 
 
6. Kibana 확인
logstash 에서 output elasticsearch (tcp 9200) 으로 전달 설정

cat << "EOF" >> /mylogstash/config-dir/cisco.conf
input {
 udp {
   port => 514
   type => "syslog"
 }
 udp {
   port => 5003
   codec => "netflow"
   type => "netflow"
 }
}
 
filter {
  dissect {
    mapping => { "message" => "<%{local_seq_num}>%{src_seq_num}: *%{ts} %{+ts} %{+ts}:%{+ts}:%{+ts}.%{+ts}: %%{facility}-%{severity}-%{mnemonic}: %{description}"} } date { match => ["ts", "MMM dd HH:mm:ss.SSS" ] remove_field => [ "ts" ]
  }
}
 
output {
 if [type] == "syslog" {
   elasticsearch {
     hosts => ["192.168.254.81:9200"]
     index => "ciscologger-%{+YYYY.MM.dd}"
   }
 }
 if [type] == "netflow" {
   elasticsearch {
     hosts => ["192.168.254.81:9200"]
     index => "cisconetflow-%{+YYYY.MM.dd}"
   }
 }
}
EOF

logstash -f mylogstash/config-dir/cisco.conf -r
 
Kibana 접속  http://IP:5601

 
Index pattern 지정 : 각각 'ciscologger-*" 'cisconetflow-*'
 
Discover 확인 : syslog, netflow

 

 
그외 나머지 Visualize 활용을 하시면 됩니다
 
 
# 참고링크
ELK 관련 정리 한글 블로그  http://blog.naver.com/olpaemi


댓글
댓글쓰기 폼
공지사항
Total
382,666
Today
24
Yesterday
123
링크
«   2018/12   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함