본문 바로가기

Monitoring

ELK 구축하고 Filebeat로 로그 수집하여 확인해보기

시스템 로그는 중요하다.

서비스가 성장함에 따라 보안요건도 까다로워진다.

그 보안요건 중 하나가 사용자 로그인에 대한 추적 및 증적을 남기는 것이다.

이를 달성하기 위해 ELK와 Filebeat로 각 서버의 syslog를 수집하고 시각화 해보자.


인스턴스 사양

  • M6g.large
  • Arm 기반 AWS Graviton2 프로세서
  • vCPU 2
  • Mem 8GiB

ELK 설치

##라이센스 받아오기
wget -qO - <https://artifacts.elastic.co/GPG-KEY-elasticsearch> | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] <https://artifacts.elastic.co/packages/8.x/apt> stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt-get update && sudo apt-get install elasticsearch kibana

##재시작시 자동으로 실행됨
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service kibana.service

실행

sudo /bin/systemctl start elasticsearch.service
sudo /bin/systemctl start kibana.service

실행확인

curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic <https://localhost:9200>
curl localhost:5601

접속을 위해 호스트 설정

vi /etc/kibana/kibana.yml
##serverhost:"localhost" => "0.0.0.0"

ELK 접속

  • {VM IP}:5601 로 접속
  • 토큰입력
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token --scope kibana
##결과값 붙여넣기
/usr/share/kibana/bin/kibana-verification-code
##결과 코드 확인하기

  • super-user: elastic 으로 로그인할 것.

수집할 서버에 filebeat라는 로그 수집기를 설치하여 elasticsearch로 syslog를 쏴줄 것이다.

filebeat 설치

curl -L -O <https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.1-amd64.deb>
sudo dpkg -i filebeat-8.6.1-amd64.deb

filebeat.yml 설정

많은 설정이 있지만, 호스트만 바꾼다.

이때 특정 elasticsearch 버전 이후로는 https 프로토콜 사용이 강제된다.

따라서 filebeat에서 elasticsearch로 데이터를 보내는데에 ssl을 사용해준다.

##/etc/filebeat/filebeat.yml
setup.kibana:
	host: "<http://{VM의 IP}:5601>"
output.elasticsearch:
  hosts: ["<https://{VM의 IP}:9200>"]
  protocol: "https"
  username: "elastic"
  password: "${ES_PWD}"
  ssl:
    enabled: true
    ca_trusted_fingerprint: "${FP}"

filebeat keystore 설치

민감한 정보에 대한 처리를 해준다.

sudo filebeat keystore create
echo {ES비밀번호} | sudo filebeat keystore add ES_PWD --stdin --force
echo {opensearch의 fingerprint} | sudo filebeat keystore add FP --stdin --force
##openssl x509 -fingerprint -sha256 -in /usr/share/elasticsearch/certs/http_ca.crt 명령어 값이 fingerprint이다.
##이때 :과 공백은 디코딩이 안된다. 다 붙여서 써야만 된다!!

filebeat 실행

filebeat setup -e
sudo /bin/systemctl enable filebeat
sudo /bin/systemctl start filebeat

 

이 후, Kibana에 접속해서 Discover > filebeat-* 를 확인해보면 수집된 syslog가 확인된다!

로그 수집이 필요한 모든 서버에 filebeat를 적용하기 위해서는 ansible이라는 도구를 사용하면 된다.

 

그건 다음에 정리한다.