Information Security Study
240725 인그레스 엔진엑스 설정하기, 프로메테우스와 그라파나로 모니터링하기, 그라파나로 메일 알림 보내기 본문
240725 인그레스 엔진엑스 설정하기, 프로메테우스와 그라파나로 모니터링하기, 그라파나로 메일 알림 보내기
gayeon_ 2024. 7. 25. 17:20인그레스 엔진엑스 설정하기
현재 vpc에 두 가용영역 a, b가 있는데
각 가용영역에 엔진엑스가 있다.
원래는 로드밸런서로 두 엔진엑스를 부하분산하려고 했지만
엔진엑스를 하나 더 생성해서 인그레스 엔진엑스 형태로 부하분산 할 것이다.
전에 만들어둔 nginx 이미지로 nginx 인스턴스를 생성한다.
nhn은 a 또는 b 가용영역만 선택할 수 있어서 우선 a에 뒀다.
접속을 위해 플로팅 ip를 사용하고
보안그룹도 nginx에 맞게 22번과 80번만 열어두었다.
nginx 이미지를 썼기 때문에 파워셸에 접속하면 바로 버전 정보를 확인할 수 있다.
이제 이 인그레스 엔진엑스가 두 가용영역에 있는 엔진엑스들을 부하분산하도록 설정파일을 수정해야 한다.
원래 엔진엑스에는
server app의ip:포트번호 weight=100 max_fails=3 fail_timeout=3s;
위와 같이 입력했었지만
지금은 엔진엑스를 연결해야 하니까
server 엔진엑스의플로팅ip weight=100 max_fails=3 fail_timeout=3s;
와 같이 입력하면 된다.
가용영역 a의 엔진엑스, b의 엔진엑스 총 두개의 서버를 입력하면 된다.
엔진엑스를 재시작한뒤 인그레스 엔진엑스의 플로팅 아이피로 접속하면
화면을 잘 띄워주고 있다.
각 가용영역의 엔진엑스를 연결한 것인지 알기 위해
로그를 확인하면
app과 연결된 엔진엑스들의 아이피를 볼 수 있었다.
프로메테우스와 그라파나로 모니터링하기
<2차 프로젝트에서 적용할 내용>
그라파나는 새 퍼블릭 인스턴스에 설치 (가용영역별로 하나)
프로메테우스는 앱별로 설치
Prometheus
- 클라우드 및 온프레미스 환경에서 대규모 분산 시스템의 상태 및 성능을 모니터링하기 위한 오픈소스 시스템이다.
- Prometheus는 다양한 데이터 모델을 사용하여 지표 데이터를 수집하고 저장하며 강력한 쿼리 언어를 사용하여 저장된 데이터를 분석하고 대시보드를 생성할 수 있다.
Prometheus의 장점
1) 아키텍처가 유연하고 확장 가능하다.
2) 강력한 쿼리 언어를 사용한다.
3) 다양한 모니터링 시나리오에 적합하다.
4) 오픈소스 소프트웨어로 제공된다.
5) 다양한 플러그인과 통합을 지원한다.
6) 높은 신뢰성을 보장한다.
push/pull 방식의 차이
모니터링 시스템에서 데이터를 수집할 때 push 또는 pull 방식을 사용할 수 있다.
1) pull 방식
- 프로메테우스 등 대부분의 모니터링 시스템에서 사용하는 방법이다.
- 수집 대상 시스템에서 메트릭 데이터를 추출한다.
- 프로메테우스 서버가 주기적으로 해당 시스템에 메트릭을 요청한다. (프로메테우스 서버가 메트릭을 가져온다.)
- 수집 대상 시스템에서 수집되는 메트릭 데이터의 시기를 정확히 알 수 있다.
- 메트릭 수집에 실패한 경우 이유를 파악할 수 있다.
2) push 방식
- 수집 대상 시스템에서 메트릭 데이터를 추출한 후 pushgateway와 같은 중간 서버에 전송한다.
- 수집 대상 시스템에서 프로메테우스 서버로 직접 메트릭 데이터를 전송할 수 있어 부하를 줄일 수 있다.
- pushgateway를 사용하면 일시적인 메트릭 데이터 손실을 방지할 수 있다.
우분투에 프로메테우스 설치하기
프로메테우스 공식 홈페이지 설치 가이드를 따라 진행했다.
# 패키지 업데이트
$ sudo apt update
# Prometheus 시스템 그룹 생성
$ sudo groupadd --system prometheus
# Prometheus 사용자를 추가하고 생성된 그룹을 할당
$ sudo useradd -s /sbin/nologin --system -g prometheus prometheus
# 디렉토리 생성
$ sudo mkdir /etc/prometheus
# Prometheus 다운로드
wget https://github.com/prometheus/prometheus/releases/download/v2.43.0/prometheus-2.43.0.linux-amd64.tar.gz
# 압축 파일 풀기
tar xvf prometheus*.tar.gz
# 압축 푼 디렉토리로 이동
cd prometheus*/
# 바이너리 파일을 로컬 폴더로 이동하여 디렉토리 변경
sudo mv prometheus promtool /usr/local/bin/
# 프로메테우스 버전 확인
prometheus --version
# 프로메테우스 구성 파일 로컬로 이동
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
# 콘솔과 콘솔 라이브러리를 /etc/prometheus로 이동
sudo mv consoles/ console_libraries/ /etc/prometheus/
# 홈 디렉토리로 이동
cd $HOME
위 절차를 따른 뒤
설치되었다면 버전을 확인할 수 있다.
sudo nano /etc/prometheus/prometheus.yml
프로메테우스 구성 파일은 위와 같은 경로에 위치해있다.
sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
[Install]
WantedBy=multi-user.target
위 내용으로 프로메테우스 시스템 서비스를 만든다.
sudo chown -R prometheus:prometheus /var/lib/prometheus/
그리고 프로메테우스 서비스가 구동될 때 디렉토리에 있는 파일을 읽어오기 위해 디렉터리의 소유권을 프로메테우스 사용자 및 그룹으로 변경해야 한다.
방화벽도 열어주고 프로메테우스를 활성화해준다.
상태를 확인했을 때 active면 구동중인 것이다.
물론 프로메테우스가 구동되려면 보안 규칙에서 9090 포트를 추가해야 한다.
그라파나 설치하기
그라파나
- 데이터 소스에서 수집한 정보를 시각적으로 표시하는 대시보드, 시각화 도구이다.
- 프로메테우스, MySQL, InfluxDB 등과 같은 데이터베이스와 함께 사용할 수 있다.
- 대시보드로 감시, 분석, 디버깅 작업을 유용하게 수행할 수 있다.
우분투에 그라파나 설치하기
# Grafana 패키지 저장소 추가
$ sudo apt-get install -y apt-transport-https gnupg2 curl
$ curl https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
# 패키지 업데이트
sudo apt-get update
# Grafana 설치
sudo apt-get install -y grafana
# Grafana 시작
$ sudo systemctl start grafana-server
# 상태 확인
$ sudo systemctl status grafana-server
active로 뜨면 정상적으로 구동되고 있는 것이다.
Prometheus와 Grafana 연동하기
Prometheus Grafana Stack
- 프로메테우스와 그라파나로 구성되는 모니터링 및 경고 시스템이다.
그라파나 접속을 위한 인스턴스를 생성한다.
브라우저에 접속해야 하기 때문에 플로팅 ip를 부여한다.
이때 그라파나 전용으로 보안 규칙도 추가한다. (3000, 22)
그라파나 플로팅ip:3000으로 접속할 수 있다.
그리고 홈 > connections > data sources
로 들어간다.
프로메테우스를 선택한다.
그리고 프로메테우스가 설치된 인스턴스에 접속해서 설정 파일을 수정한다.
static_configs에 프로메테우스가 설치된 인스턴스의 ip:9090을 입력한다.
저장한 뒤 프로메테우스를 재시작한다.
다시 그라파나로 돌아와서 프로메테우스가 설치된 인스턴스 url을 입력한다.
http://ip:포트번호/
그리고 아래에 save & test로 데이터 소스가 정상적으로 동작하는지 확인할 수 있다.
이제 대시보드를 구성해볼 것이다.
add visualization을 누른다.
먼저 데이터소스를 아까 생성한 프로메테우스로 선택하고
메트릭, 라벨 필터를 설정한다. (메트릭은 prometheus_http_requests_total을 선택했다.)
그리고나서 run queries를 누른 뒤에
우상단에 apply를 누르면
http requests total에 대해 모니터링하는 패널이 생성된다.
프로메테우스의 설정 파일에서
global 속성의 scrape_intervl을 15s로 설정하면 프로메테우스가 해당 targets에 대해 15초마다 메트릭을 수집하게 된다.
우상단에 refresh 버튼으로도 그래프가 변경되는 모습을 확인할 수 있다.
Grafana 제공 대시보드 만들기
Grafana dashboards | Grafana Labs
Grafana dashboards | Grafana Labs
No results found. Please clear one or more filters.
grafana.com
위 링크에서 그라파나가 제공하는 대시보드를 확인할 수 있다.
해당 대시보드를 골라서
ID를 카피한다.
다시 대시보드창으로 돌아와서 new -> import 를 누른다.
아까 복사했던 대시보드 ID를 입력한 뒤 load 하고
프로메테우스를 선택해 연동한 뒤 import를 누르면
간단하게 대시보드가 생성된다.
그라파나로 메일 알림 보내기
그라파나로 자원의 일정 사용량을 초과하면 메일을 보낼 수 있도록 실습해봤다.
이 기능은 alert rules에서 설정할 수 있다.
alert rules는 언제 알람을 발생시킬지 contact point는 무슨 수단으로 알람을 전달할지 설정한다.
힙 시스템 사용량에 따라 알림이 울리게 해볼것이다.
inspect > Query 로 들어가서 쿼리문을 복사한다.
복사한 쿼리문을 넣어주고 run queries로 정상 동작하는지 테스트한다.
expressions에는
위에 있는 쿼리문으로 얻은 결과값이 특정 범위나 설정값보다 위거나 아래인 경우 알람이 울리게 설정한다.
그리고 alert 상황이 유지되어야 실제 알람이 발송될지 pending으로 설정할 수 있다.
여기는 알람이 갈 수단을 설정할 수 있는데
view or create contact points를 눌러서 새로 만들었다.
메일을 적은 뒤 테스트를 누르면 실패가 뜬다.
메일을 보내려면 구글에서 보안 설정을 해줘야 한다.
구글 보안 > 2단계 인증
완료 후 앱 비밀번호를 생성하면 된다.
앱 비밀번호는 잘 저장해둬야 한다.
#################################### SMTP / Emailing ##########################
[smtp]
enabled = true
host = smtp.gmail.com:587
user = 메일 계정
# If the password contains # or ; you have to wrap it with triple quotes. Ex "">
password = 비밀번호
;cert_file =
;key_file =
skip_verify = true
from_address = 메일 계정
from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS
# Enable trace propagation in e-mail headers, using the 'traceparent', 'tracest>
;enable_tracing = false
이제 이메일을 발송할 수 있도록 smtp 설정을 수정한다.
$ sudo systemctl stop grafana-server
$ sudo systemctl start grafana-server
저장 후 갱신, 반영을 위해 중지 및 시작 명령을 내린다.
보낼 내용을 직접 작성할 수도 있다.
전송에 성공했다.
'네트워크 캠퍼스 > NHN클라우드-Jenkins' 카테고리의 다른 글
240723 젠킨스 파이프라인에서 .sh 실행하기, 크론탭으로 로깅 스크립트 실행하기, 로그로테이트 구현하기 (1) | 2024.07.23 |
---|---|
로그로테이트하기 (0) | 2024.07.23 |
크론탭으로 로깅 스크립트 실행하기 (0) | 2024.07.23 |
젠킨스 파이프라인에서 .sh 실행하기 (0) | 2024.07.23 |
240711 ~ 12 파이프라인으로 배포 고도화하기, 스크립트로 CI/CD 실습하기(롤백 트러블슈팅) (0) | 2024.07.12 |