연구실 프로젝트를 수행하며 Openstack상에서 metric을 수집하여 이용할지 말지 고민하고 있던 찰나에,
일단 간략하게라도 사용해보기로 결정해서 ELK Stack을 써보았다.
# openjdk 8버전 설치하기
sudo apt-get install openjdk-8-jdk -y
# java 환경설정
vi /etc/profile 후
아래 내용 추가
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export Class_PATH=$JAVA_HOME/lib:$CLASS_PATH
# GPG 추가 후 업데이트
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
apt update
# elasticsearch 설치
sudo apt install elasticsearch
# elasticsearch 실행
sudo systemctl start elasticsearch
**정상 설치 화면**
# logstash 설치
sudo apt install logstash
# logstash 실행
sudo systemctl start logstash
데이터 입력받는 것을 간단하게 각 VM의 정보를 받는 API를 통해 넘겨주었다.
# 데이터 입력받는 것 설정
input {
exec {
command => "curl -H 'X-Auth-Token:
gAAAAABkJZImkBifYxra-hxIrT36vHqEObDMkRarCNn2Csl9SEWnqkc4JHakOB4i_IOvecBUK8cf855yfg6dZMY3H1hjCbMk6q-I-J1ejuznpH_fsnRxGK0aIrvvjhfZgganvXHh3tpSAwbaZOwLFvOy8-CyeOFXw8O54l1SDLUcczVfx2yIKUM'
-X GET 'http://localhost/compute/v2.1/servers/89b2d322-f519-4a43-9d48-040bfb194c11'"
interval => 2
type => "test1"
}
exec {
command => "curl -H 'X-Auth-Token:
gAAAAABkJZImkBifYxra-hxIrT36vHqEObDMkRarCNn2Csl9SEWnqkc4JHakOB4i_IOvecBUK8cf855yfg6dZMY3H1hjCbMk6q-I-J1ejuznpH_fsnRxGK0aIrvvjhfZgganvXHh3tpSAwbaZOwLFvOy8-CyeOFXw8O54l1SDLUcczVfx2yIKUM'
-X GET 'http://localhost/compute/v2.1/servers/2111f258-6428-4b6c-8680-4df287c0b617'"
interval => 2
type => "test2"
}
exec {
command => "curl -H 'X-Auth-Token:
gAAAAABkJZImkBifYxra-hxIrT36vHqEObDMkRarCNn2Csl9SEWnqkc4JHakOB4i_IOvecBUK8cf855yfg6dZMY3H1hjCbMk6q-I-J1ejuznpH_fsnRxGK0aIrvvjhfZgganvXHh3tpSAwbaZOwLFvOy8-CyeOFXw8O54l1SDLUcczVfx2yIKUM'
-X GET 'http://localhost/compute/v2.1/servers/45304fe8-ecf4-4b74-8270-fd976349fdfa'"
interval => 2
type => "t1"
}
}
# 데이터 처리
filter {
if [type] == "test1" {
json {
source => "message"
}
}
else if [type] == "test2" {
json {
source => "message"
}
}
else if [type] == "t1" {
json {
source => "messgae"
}
}
}
# 데이터 ElasticSearch에 전송
output {
elasticsearch {
hosts => ["localhost:9200"]
codec => "json_lines"
}
}
# logstash 재시작
sudo systemctl restart logstash
# logstash 로그 확인
tail -f /var/log/logstash/logstash-plain.log
별다른 문제 없이 정상적으로 동작함을 확인하였다.
test1 인스턴스 정보 요구 쿼리
curl -X GET 'http://localhost:9200/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"filter": [
{ "term": { "type": "test1" } },
{
"range": {
"@timestamp": {
"gte": "now-1h",
"lte": "now"
}
}
}
]
}
},
"sort": [
{ "@timestamp": "desc" }
],
"size": 1
}'
**쿼리 결과**
여기서 status의 value만 추출하여 출력을 보고 싶어 쿼리를 조정하는 시도를 몇 번 도전을 했지만, 실패...
제대로 한 것 같은데..
# kibana 설치하기
sudo apt install kibana
# kibana 설정파일 수정하기
sudo vi /etc/kibana/kibana.yml
# 아래 주석 제거 및 수정
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
# kibana 실행
sudo systemctl start kibana
input (test1, test2, t1)에 대한 데이터에서 status==ACTIVE 관련 시각화 화면