openstack

openstack- ELK 로그수집 및 관리

sysman 2021. 2. 20. 03:37
hostname role
controller log server/client(logstash,kibana, elasticsearch,nginx,filebeat)
compute client(filebeat)
network client(filebeat)

ELK 로그 추가는 #ls /var/log/ 에서 찾아서 넣음

 

ELK stack : elasticsearch, logstash, kibana 프로그램을 의미함

로그를 GUI로 시각화하여 관리자가 쉽고 편리하게 로그에 대해 관리할 수 있는 오픈소스

 

ELK stack 요소

참고 : https://m.blog.naver.com/PostView.nhn?blogId=sory1008&logNo=220756173973&proxyReferer=https:%2F%2Fwww.google.co.kr%2F

Filebeat 클라이언트

- 클라이언트 시스템에 설치 되 그 어플리케이션 서버 및 오픈스택 서비스의 로그를 서버 시스템에 설치된 logstash로 보내기 위해 사용 되는 로그 전송 에이전트 프로그램

- logstash Forwarder 라고 부르기도 함

- filebeat는 logstash와 통신위해 lumberjack 네트워크 프로토콜 사용

 

Logstash

- 클라이언트의 플러그인이 보내온 모든 종류의 로그를 수집해 그것을 가공한 후 elasticsearch를 비롯한 여러 외부 프로그램에 전달하는 역할

- filebeat와 같ㅇ느 데이터 소스로부터 데이터를 받아 입력(input),필터(filter),출력(output)의 과정을 거쳐 elasticsearch에게 최종 전달하는 프로그램

Elasticsearch

- 모든로그를 저장해 로그에 대해 실시간 인덱싱 및 검색 그리고 분석을 하기 위한 클러스터링 솔루션을 제공하는 프로그램

- ELK Stack의 핵심 

 

Kibana

- Elasticsearch를 위해로그를 분석 및 검색하고 시각화하기 위해 사용되는 웹 인터페이스

- Nginx 웹 서버를 통해 프록시돼 사용

- 대시보드 기능 제공

 

 

설치 순서 

1. Elasticsearch

2. kibana

3.Nginx

4.Logstash

5.Filebeat

 

############# controller에서 설정 ########################

[root@controller ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

 

[root@controller ~]# vi /etc/profile

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

[root@controller ~]# export PATH
[root@controller ~]# java -version
openjdk version "1.8.0_282"

 

[root@controller ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

[root@controller ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.rpm

 

[root@controller ~]# rpm -ivh elasticsearch-5.6.3.rpm

[root@controller ~]# rpm -qa | grep elasticsearch

 

[root@controller ~]# vi /etc/elasticsearch/elasticsearch.yml

cluster.name: elasticsearch

node.name: controller

path.logs: /var/log/elasticsearch

network.host: 192.168.100.110

http.port: 9200  //입력시 숫자 앞에 빈공간 있어야함 아니면 에러남

 

[root@controller ~]# systemctl daemon-reload

[root@controller ~]# systemctl enable elasticsearch

[root@controller ~]# systemctl start elasticsearch
[root@controller ~]# systemctl status elasticsearch

 

elasticsearch 사용포트는 9200

[root@controller ~]# lsof -i tcp:9200

서비스 정상 테스트 확인

[root@controller ~]# curl -X GET http://192.168.100.110:9200

 

[root@controller ~]# ls /var/log/elasticsearch/

elasticsearch_deprecation.log  elasticsearch_index_indexing_slowlog.log  elasticsearch_index_search_slowlog.log  elasticsearch.log

[root@controller ~]# ls /var/lib/elasticsearch/

nodes

 

 

#### controller에서 키바나 설치 ##########

[root@controller ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.3-x86_64.rpm

[root@controller ~]# rpm -ivh kibana-5.6.3-x86_64.rpm

 

 

[root@controller ~]# vi /etc/kibana/kibana.yml

server.port: 5601

server.host: "192.168.100.110"

server.name: "controller"

elasticsearch.url: "http://192.168.100.110:9200"

 

 

[root@controller ~]# systemctl enable kibana

[root@controller ~]# systemctl start kibana
[root@controller ~]# systemctl status kibana

[root@controller ~]# lsof -i tcp:5601

 

 

#### controller에서 nginx 설치 ##########

리버스 프록시로 사용 됨

nginx 리버스 프록시 : 웹클라이언트로 붙터 오는 http요청을 받아 백엔드에 위치한 kibana서버에게 그요청을 전달하고 다시 kibana서버로부터 그 응답을 받아서 웹 클라이언트에게 전달하는 기능

[root@controller ~]# yum install nginx

[root@controller ~]# rpm -qa | grep nginx

 

같은 80포트 사용으로 나중에 꼬일수도 있어 미리 내려놓음

[root@controller ~]# systemctl stop httpd

 

nginx를 81포트로 사용( apach httpd에서 80을 사용하고 있으므로)

[root@controller ~]# vi /etc/nginx/nginx.conf

server {

        listen       81 default_server;

#        listen       [::]:80 default_server;

        server_name  controller.park.com;

        root         /usr/share/nginx/html;

# nginx로 들어오는 클라이언트의 요청을 kibana로 전달

        proxy_redirect off;

        proxy_set_header x-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $http_host;

 

        # Load configuration files for the default server block.

        include /etc/nginx/default.d/*.conf;

 

        location / {

                proxy_pass http://192.168.100.110:5601;

        }

 

[root@controller ~]# systemctl enable nginx

[root@controller ~]# systemctl start nginx

[root@controller ~]# lsof -i tcp:81

[root@controller ~]# systemctl status nginx

 

[root@controller ~]# systemctl start httpd
[root@controller ~]# systemctl status httpd

 

[root@controller ~]# ls /var/log/nginx/

access.log  error.log

 

#### controller에서 logstash 설치 ##########

 

[root@controller ~]# vi /etc/yum.repos.d/logstash.repo

 

[root@controller ~]# yum install logstash -y

 

[root@controller ~]# rpm -qa | grep logstash

logstash-5.6.16-1.noarch

 

//logstash는 입출력 관련 설정 파일을 생성

//파일비트 정의하고 logstash tkdydgkf vhxm wlwjd

//ssh전송할 경우 인증서 와 키 생성이 필요

 

[root@controller ~]# vi /etc/logstash/conf.d/filebeat-input.conf

input {

 beats {

   port => 5443

   #ssl => true

   #ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"

   #ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"

  }

}

//syslog필터링 파일 생성

[root@controller ~]# vi /etc/logstash/conf.d/syslog-filter.conf

filter {
 if [type] == "syslog" {
   grok {
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp}
       %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}
       (?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
     add_field => [ "received_at", "%{@timestamp}" ]
     add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

//logstash가 filebeat를 통해 입력받은 데이터를 elasticsearch로 보내기 위한 정보 입력

[root@controller ~]# vi /etc/logstash/conf.d/output-elasticsearch.conf

output {

  elasticsearch { hosts => ["192.168.100.110:9200"]

    hosts => "192.168.100.110:9200"

    manage_template => false

    index => "%{[@metadata][beat]}-%{+YYY.MM.dd}"

    document_type => "%{[@metadata][type]}"

  }

}

 

[root@controller ~]# systemctl enable logstash

[root@controller ~]# systemctl start logstash
[root@controller ~]# systemctl status logstash

[root@controller ~]# lsof -i tcp:5443

 

[root@controller ~]# ls -l /var/log/logstash/

total 4

-rw-r--r--. 1 logstash logstash 1484 Feb 20 01:47 logstash-plain.log

 

#### controller/compute/network 전부 filebeat 설치 ##########

 

[root@compute ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

[root@compute ~]# vi /etc/yum.repos.d/elastic.repo

[elastic-5.x]

name=Elastic repository for 5.x packages

baseurl=https://artifacts.elastic.co/packages/5.x/yum

gpgcheck=1

gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch

enabled=1

autorefresh=1

type=rpm-md

 

[root@compute ~]# yum install filebeat

[root@compute ~]# rpm -qa | grep filebeat
filebeat-5.6.16-1.x86_64

 

[root@compute ~]# vi /etc/filebeat/filebeat.yml

 

#이건 /var/log/에서 필요한 항목들 확인 후 아래처럼 경로지정해줌  

#filebeat로 설정파일을 열어서 logstash로 전송할 로그파일을 정의

paths:
    - /var/log/nova/*.log
    - /var/log/neutron/*.log

#-------------------------- Elasticsearch output ------------------------------

#filebeat가 로그 파일을 보낼 프로그램으로서 logstash를 사용하므로 여기선 주석(#) 처리함
#output.elasticsearch:   //주석처리
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]  //주석처리

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------

#filebeat가 로그 파일을 보낼 목적지 프로그램으로서 logstash를 정의하는데 호스트ip 주소와 포트번호, 한번에 최대로 보낼 수 있는 이벤트의 개수(bulk_max_size)그리고 사용할 템플릿 정보를 입력

output.logstash:

  # The Logstash hosts

  hosts: ["192.168.100.110:5443"]

  bulk_max_size: 2048

  template.name: "filebeat"

  template.path: "filebeat.template.json"

  template.overwrite: false

 

 

[root@compute ~]# systemctl enable filebeat

[root@compute ~]# systemctl start filebeat

 

[root@compute ~]# systemctl start filebeat

 

//netstat를 통해 logstash의 포트를 확인해보면 filebeat서비스가 컨트롤러의 logstash 서비스에 연결된것을 알수 있음

[root@compute ~]# netstat -natlp | grep filebeat

 

[root@compute ~]# ls -l /var/log/filebeat/

 

 

 

 

 

 

 

 

 

 

 

 

'openstack' 카테고리의 다른 글

openstack - loadbalancer  (0) 2021.10.22
openstack - nagios 모니터링 툴 서비스  (0) 2021.02.19
openstack - heat 설치 및 사용  (0) 2021.02.18
openstack - swift 사용  (0) 2021.02.18
openstack - ceph 스토리지 설정  (0) 2021.02.17