mingming

Kibana 설치 및 기본설정 및 ElasticSearch 연동 본문

ELK

Kibana 설치 및 기본설정 및 ElasticSearch 연동

mingming_96 2023. 12. 5. 22:53

Kibana 

Elasticsearch와 함께 사용되며, 대용량 데이터를 검색, 분석 및 시각화할 수 있는 오픈 소스 툴입니다.

  1. 시각화 및 대시보드: Kibana는 다양한 시각화 도구를 제공하여 데이터를 그래픽적으로 표현하고, 이를 기반으로 대시보드를 만들 수 있습니다. 막대 그래프, 라인 차트, 파이 차트, 지도 등 다양한 시각화 유형을 지원합니다.
  2. 데이터 탐색과 검색: Elasticsearch로 색인된 데이터를 탐색하고, 사용자가 원하는 대로 데이터를 검색할 수 있습니다. 강력한 쿼리 및 필터링 기능을 활용하여 데이터를 검색하고 분석할 수 있습니다.
  3. 인터랙티브한 대시보드: 사용자는 시각화 객체를 클릭하거나 선택하여 다른 시각화에 영향을 주는 등, 대화형 대시보드를 생성할 수 있습니다.

Kibana는 Elasticsearch와 함께 사용되어 Elasticsearch로 수집된 데이터를 시각적으로 탐색하고 분석하는 강력한 도구입니다. 주로 데이터 시각화, 대시보드 생성, 검색 기능 등을 활용하여 다양한 유형의 데이터를 분석하고 시각화하는 데 사용됩니다.

 

Kibana 설치

0. 설치환경

VM : VirtualBox 7.0

OS : ubuntu 20.04 

ram : 4GB 

elasticsearch: 7.0

logstash: 7.0

 

앞서 설치한 elastic search와 logstash의 버전이 7.0 버전이기 때문에 키바나 역시 같은 버전으로 설치하도록 하겠습니다.

위의 링크에서 os에 맞는 설치 가이드를 따라하시면 됩니다. 제 경우 우분투 환경이기 때문에 deb package 설치 가이드를 보고 설치했습니다.

 

1. public singing key 다운로드

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

 

2. 패키지 저장소 추가

echo "deb https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

 

3. install 

sudo apt-get install -y kibana

 

4. kibana 실행

sudo systemctl enable --now kibana

 

Kibana 설정 파일 

/etc/kibana

  • kibana.yml 
    • Kibana의 주요 설정 파일입니다. 서버의 구성을 지정하는데 사용됩니다. 
    • HTTP 포트 , ElasticSearch 연결, 클러스터 설정, SSL 설정등에 관한 내용을 담고 있습니다.
  • node.options
    • Kibana node를 실행할는 데 사용되는 Node.js의 설정 옵션을 지정하는 파일입니다.
  • kibana.keystore
    • Kibana에서 사용하는 저장소 파일입니다. 주로 보안관련 정보가 저장되어 있습니다.

Kibana 접속

kibana를 설치하면 외부에서 접속 가능하도록 설정파일을 세팅해야 합니다. server.host 부분을 다음과 같이 수정 후 kibana를 재시작 합니다. 

vi /etc/kibana/kibana.yml

# Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: 0.0.0.0

 

IP의 5601 포트로 접속할 수 있습니다.

 

index pattern 생성

현재 Elaistc Search에 두개의 index가 위치하고 있습니다. 

 

logstash-* 인덱스 패턴을 생성해 logstash 로부터 들어온 로그정보를 확인할 수 있습니다. 

 

 

Discover 탭으로 이동해 쌓인 로그들을 확인할 수 있습니다.

 

KQL ( Kibana Query Language )를 이용해 원하는 결과 값을 추출할 수  있습니다. 

Kibana Query Language (KQL)은 Kibana에서 데이터를 검색하고 필터링하는 데 사용되는 질의 언어입니다. Elasticsearch에 쿼리를 보내고 결과를 시각화하기 위해 Kibana에서 사용됩니다.

 

Error

ElasticSearch Failed

키바나를 설치 했을 때 elasticsearch 데몬이 failed 상태로 정상작동하지 않는 상황이 발생했습니다. 

● elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor prese>
     Active: failed (Result: signal) since Tue 2023-12-05 21:16:20 KST; 21ms ago
       Docs: http://www.elastic.co
    Process: 14241 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}>
   Main PID: 14241 (code=killed, signal=KILL)

 

리소스 부족으로 인해 데몬이 정상작동하지 못했습니다. 메모리 용량을 4기가로 확장 후 재시작하니 정상작동 했습니다.

 

 

ElasticSearch version 

처음 kibana를 7.17 버전으로 설치했을 때 발생했던 에러입니다. elasticsearch와 버전이 맞지않아 연결할 수 없다는 에러입니다. Kibana를 7.0 버전으로 재설치 했습니다.

  43   │ {"type":"log","@timestamp":"2023-12-05T21:49:04+09:00","tags":["error","elast
       │ icsearch-service"],"pid":676,"message":"Unable to retrieve version informatio
       │ n from Elasticsearch nodes. connect ECONNREFUSED 127.0.0.1:9200"}

 

 

logstash 설정 오류

logstash를 통해 elasticsearch로 로그를 보내기 위해 output 설정을 수정했습니다. 처음 localhost 부분을 ""로 감싸주지 않아 다음과 같은 에러가 발생했습니다.

[2023-12-05T13:31:32,682][ERROR][logstash.agent] Failed to execute action 
{:action=>LogStash::PipelineAction::Create/pipeline_id:main, :exception=>
"LogStash::ConfigurationError", :message=>"Expected one of #, {, ,, ] at line 12, column 24 
(byte 195) after output {\n  elasticsearch {\n    hosts => [localhost", :backtrace=>
["/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:41:in `compile_imperative'", 
"/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:49:in `compile_graph'", 
"/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:11:in `block in compile_sources'", 
"org/jruby/RubyArray.java:2577:in `map'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:10:in `compile_sources'", 
"org/logstash/execution/AbstractPipelineExt.java:151:in `initialize'", "org/logstash/execution/JavaBasePipelineExt.java:47:in `initialize'",
"/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:23:in `initialize'",
"/usr/share/logstash/logstash-core/lib/logstash/pipeline_action/create.rb:36:in `execute'",
"/usr/share/logstash/logstash-core/lib/logstash/agent.rb:325:in `block in converge_state'"]}

 

아래와 같이 수정후 정상동작함을 확인했습니다.

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

 

 

ELK 구축해본 후기...!

Kibana까지 마저 설치를 완료하며 ELK 스택을 구축했습니다. 생각보다 구축은 어렵지 않게 했던 것 같습니다.

물론 각각의 설정파일과 다양한 플러그인을 다루는 방법은 아직 잘 모르지만 기본적인 흐름에 대해 파악할 수 있는 실습이었습니다. 현재 가장 의문인 부분은 ELK 를 이용해 어떤 유의미한 결과값을 도출해낼 수 있을지에 대한 것 입니다. 조금 더 깊이있게 공부하다보면 이러한 의문도 자연스럽게 해소되지 않을까 합니다. 가상머신에 직접 설치를 완료했으니 다음엔 쿠버네티스상에 파드로 배포해보려고 합니다. ELK를 처음 접하고자 하시는 분들에게 도움이 되었으면 좋겠습니다.