[ELK + Prometheus & Grafana] 로그 & 메트릭 모니터링 환경 구축 - 2. 서비스 노드 구성 및 완료 (Ubuntu 20.04)

서비스 노드(Service) 구성

서비스 노드의 구성은 아래와 같은 순서로 구성된다.

 

  1. Nginx 설치
  2. Node Exporter 설치
  3. Filebeat 설치 - 기본 설치만 진행

서비스 노드 환경

  • OS: ubuntu-20.04.6-desktop-amd64.iso
  • CPU: 2
  • Memory: 4GB
  • Storage: 20GB
  • root & user1 사용자 사용
  • IP Address: 192.168.1.101
  • SM: 255.255.255.0

Nginx 설치

기본 패키지 관리자를 통해서 설치를 진행했다.

sudo apt-get -y install nginx

Nginx 실행 상태

Node Exporter 설치

Node Exporter의 구성은 MGMT 노드를 구성 시 수행했던 방식을 사용했다.

wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvfz node_exporter-*

sudo mkdir -p /usr/share/node_exporter/bin
sudo useradd -r -s /bin/false prometheus
sudo chown prometheus:prometheus /usr/share/node_exporter/bin/
sudo mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/share/node_exporter/bin/
sudo chown prometheus:prometheus /usr/share/node_exporter/bin/node_exporter

sudo tee /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/share/node_exporter/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=default.target
EOF

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
rm -rf node_exporter-*

Node Exporter의 경우 개별 메트릭을 제공하는 별도의 엔드포인트를 제공하고, Prometheus 자체에서 해당 엔드포인트에 접속하여 메트릭을 가져오기 때문에 별도의 구성이 필요없다. 


Filebeat 설치

Filebeat만 설치하고 MGMT Node에 존재하는 Elasticsearch와 Kibana로 데이터를 전달하도록 구성하였다.

sudo curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.11-amd64.deb
sudo dpkg -i filebeat-7.17.11-amd64.deb
output.elasticsearch:
  hosts: ["192.168.1.200:9200"]
  username: "elastic"
  password: "test123"
setup.kibana:
  host: "192.168.1.200:3000"

위의 이 부분을 /etc/filebeat/filebeat.yml 구성 파일에 적용시켜준다.

이를 통해서 192.168.1.101에 위치한 Service 노드의 Filebeat에서 192.168.1.200 호스트(MGMT Node)에서 서비스 중인 Kibana와 ElasticSearch에게 수집한 로그를 전달하는 것을 구성했다.


Filebeat 모듈 구성

이제 나머지 환경은 모두 구성이 완료되었고, Service Node의 Nginx에서 발생하는 로그와 MGMT의 MySQL에서 발생하는 로그를 수집하기 위한 Filebeat들의 구성을 수행해주면 된다.

 

우선 Service Node에서 Filebeat의 Nginx 모듈을 통해 Nginx의 access.log, error.log를 수집하기 위한 설정을 진행한 후 MGMT에서 MySQL의 error.log를 수집하기 위한 설정을 진행한다.

Nginx Module 설정

sudo filebeat modules enable nginx # nginx 모듈 활성화

/etc/filebeat/modules.d/nginx.yml # Service Node

MySQL Module 설정

sudo filebeat modules enable mysql

MySQL 모듈에서 error.log와 mysql-slow.log를 수집하기 위한 설정

이제 두 구성 완료 이후 filebeat setup 명령어를 통해 변경된 사항을 Elasticsearch와 Kibana에게 적용시켜야한다.


로그 & 메트릭 모니터링 구동

Node Exporter는 구동되어 있다면 지속적으로 시스템 메트릭을 수집하고 있을 것이고, Filebeat만 별도로 구동시켜준다면 정상적으로 로그 수집 및 모니터링 환경이 동작할 것이다.

[Log Monitoring] Kibana Dashboard

filebeat 명령어를 통해서 MGMT Node와 Service Node에서 Filebeat를 동작시킨다. 

DashBoard - [Filebeat Nginx] Overview ECS

기본 제공되는 Filebeat Nginx Dashboard를 통해서 위와 같은 로그 시각화가 가능하다.

DashBoard - [Filebeat MySQL] Overview ECS

마찬가지로 MySQL에 대한 대시보드를 확인해본다면, 정상적으로 시각화가 가능함을 알 수 있다.

[Metric Monitoring] Grafana Dashboard

사실 유의미한 CPU 사용량이라고 보기에는 어렵고, 연습삼아 이것저것 만져보면서 시도해본 결과이다.

CPU Idle 비율에 대한 대시보드 수정한 것. - 이게 더 의미에 맞지 않을까?


결론 

최초에 고안했던 로그 모니터링 환경과 메트릭 모니터링 환경 구축을 완료하였다.

처음 고안했던 구조!

다음에 시도해볼 내용은 Kibana와 Grafana가 제공하는 API를 사용할 수 있는 권한을 얻어 이를 통해 임의의 웹 문서 페이지를 만들어서 Kibana와 Grafana의 대시보드를 한눈에 볼 수 있도록 해보는 것이다.

728x90
반응형