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 요소
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 |