✔️ 이 글에서 진행할 것들
1. Redis 설치
2. Node Exporter 설치
3. Redis Exporter 설치
4. Prometheus 설치
5. Prometheus에 Exporter 연결
6. Grafana 설치
7. Grafana에 Prometheus 연결
8. Grafana에 대시보드 생성
9. Alertmanager 설치 및 Dooray! 인커밍 훅 알림 설정
monitored 인스턴스에 node exporter와 설치한 redis 버전별로 redis exporter를 설치합니다.
monitoring 인스턴스에 prometheus를 설치하고 exporter들을 연결합니다.
monitoring 인스턴스에 grafana를 설치하고 prometheus를 연결해주면, 최종적으로 exporter에서 수집되는 메트릭을 시각화해서 grafana로 확인할 수 있습니다.
이 과정을 아래에서 하나씩 진행해보겠습니다 :)
설치 환경
- NHN Cloud
- CentOS 7.9
- Redis 6.2.9, 7.0.11
- Node Exporter 1.5.0
- Redis Exporter
- Prometheus 2.44.0
- Grafana Enterprise 9.5.2
- Alertmanager 0.25.0
구성도
- Redis Server에 Node Exporter와 설치한 Redis 버전 별로 Redis Exporter를 설치합니다.
- Monitoring Server에 Prometheus를 설치하고, Exporter들을 연결합니다.
- Monitoring Server에 Grafana를 설치하고, Prometheus를 연결합니다.
- 최종적으로 Exporter에서 수집되는 메트릭을 시각화해서 Grafana로 확인할 수 있습니다.
Node Exporter
NIX 커널에 의해 도출된 하드웨어 및 OS 메트릭스 라고 하는데.. 쉽게 설명하자면 스파이와 같다고 볼 수 있습니다.
Node Exporter는 우리가 모니터링 하려는 서버에 설치되어 해당 서버의 메트릭들을 수집합니다.
✅ 공식 문서
https://prometheus.io/docs/guides/node-exporter/
✅ 공식 Github
https://github.com/prometheus/node_exporter
✅ 공식 Download
https://prometheus.io/download/#node_exporter
Redis를 설치한 인스턴스의 메트릭을 수집할 것이므로 Redis 설치한 인스턴스(monitored)에 Node Exporter를 설치합니다.
1. 설치 및 실행
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz
mv node_exporter-1.5.0.linux-amd64.tar.gz node_exporter
cd node_exporter
nohup ./node_exporter > node_exporter.log 2>&1 &
2. 확인
Node Exporter에 의해 수집된 메트릭들을 볼 수 있습니다.
curl http://localhost:9100/metrics | grep "node_"
3. 보안그룹 9100번 열어주기
4. 접속
Node Exporter에 의해 수집된 메트릭들을 웹에서 볼 수 있습니다.
http://[IP]:9100/metrics
Redis Exporter
✅ 공식 Github
https://github.com/oliver006/redis_exporter
Redis를 설치한 인스턴스에 Redis Exporter를 설치합니다.
이는 Redis의 메트릭을 수집하기 위함입니다.
1. Go 설치
redis exporter 설치시 Go 빌드 과정이 있기 때문에 Go를 설치해줍니다.
wget https://go.dev/dl/go1.20.4.linux-amd64.tar.gz
sudo tar xfz go1.20.4.linux-amd64.tar.gz -C /usr/local
sudo vi /etc/profile
###golang
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
go version
# go version go1.20.4 linux/amd64
2. 보안그룹 9120, 9121 열어주기
3. 설치 및 실행
git clone https://github.com/oliver006/redis_exporter.git
cd redis_exporter
go build .
# redis가 띄워져있어야 함
nohup ./redis_exporter -redis.addr=redis://localhost:6379 -web.listen-address=:9121 &
nohup ./redis_exporter -redis.addr=redis://localhost:6378 -web.listen-address=:9120 &
Prometheus
위에서 Node Exporter가 스파이였다면 Prometheus는 국정원과 같습니다.
Node Exporter 등이 서버의 정보(메트릭)를 모아주었다면 Prometheus는 주기적으로 pull 요청을 해 메트릭을 수집합니다.
✅ 공식 문서
https://prometheus.io/docs/prometheus/latest/installation/
Redis를 설치한 인스턴스 말고 다른 인스턴스(monitoring)에 Prometheus를 설치합니다.
1. 설치 및 실행
wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz
tar xvzf prometheus-2.44.0.linux-amd64.tar.gz
mv prometheus-2.44.0.linux-amd64 prometheus
cd prometheus
nohup ./prometheus > prometheus.log /dev/null 2>&1 &
2. 보안그룹 9090번 열어주기
3. 확인
- 프로세스 확인
ps -ef | grep prometheus
- Listen 포트 확인
netstat -lntup | grep prometheus
4. 접속
아래 주소에 접속하면 프로메테우스가 잘 뜨는 것을 확인할 수 있습니다.
http://[IP]:9090/
Prometheus에 Node Exporter, Redis Exporter 연결
프로메테우스에 Exporter들을 연결해주겠습니다.
1. prometheus.yml을 열고 targets에 Node Exporter, Redis Exporter 주소를 입력합니다.
vi prometheus.yml
job_name과 targets를 추가해줍니다.
redis를 2가지 버전으로 설치했기 때문에 각각 기입해줍니다.
2. Prometheus 모니터링 페이지에서 연결 확인
- prometheus 인스턴스에서 node_exporter, redis_exporter 인스턴스에 접근할 수 있게 보안그룹 허용해주어야 함
3. Prometheus 모니터링 페이지에서 node_exporter 연결 확인
- prometheus 인스턴스에서 node_exporter 인스턴스에 접근할 수 있게 보안그룹 허용해주어야 함
- [IP]:9090/graph 접속
- go_memstats_gc_sys_bytes 입력 후 Execute 버튼 클릭
- Graph 탭 선택
- 수집되는 데이터 확인
- raw 데이터 확인이 필요한 경우 (http://[IP]:9100/metrics) 접속
Grafana
Grafana는 모은 정보를 바탕으로 시각화하는 도구입니다.
✅ 공식 문서
https://grafana.com/grafana/download/9.5.2
1. 설치 및 실행
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.5.2.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-9.5.2.linux-amd64.tar.gz
cd grafana-9.5.2/bin
nohup ./grafana-server > grafana.log 2>&1 &
2. 보안그룹 3000번 열어주기
3. 접속
http://[IP]:3000/
4. ID: admin / PW: admin 으로 로그인
5. 접속
Grafana에 Prometheus 연결
Prometheus에 수집되어 있는 메트릭을 Grafana에서 확인하기 위해 Grafana에 Prometheus 정보를 입력해 연결해줍니다.
1. Administration > Data sources > + Add new data source 클릭
2. Prometheus 선택
3. URL에 IP:9090를 입력하고, 하단에 Save & Test 클릭
Grafana에 대시보드 연결하기
현재 연결한 Prometheus에는 총 3개의 exporter가 등록되어 있습니다.
Node Exporter는 node exporter 대시보드 템플릿에 연결,
Redis Exporter는 redis exporter 대시보드 템플릿에 연결해보겠습니다.
추가로 Redis 자체는 Redis Plugin을 설치해서 연결해볼 것입니다.
1) 대시보드 템플릿 다운로드
먼저 잘 만들어진 대시보드 템플릿을 다운로드 받습니다.
Node Exporter 대시보드 템플릿입니다. 들어가서 Download JSON으로 파일을 다운받습니다.
2) Grafana에 import
- http://[IP]:3000/dashboard/import
해당 페이지에서 다운로드 받은 node exporter와 redis exporter용 대시보드 JSON 파일을 업로드하고 하단의 Load 버튼을 누릅니다.
3) 파일별로 Prometheus에 exporter 연결
4) Redis 플러그인 설치
5) Redis 연결
6.2.9와 7.0.11을 각각 연결해줍니다.
이 때 Redis의 외부 통신이 허용되어 있어야 합니다. (redis.conf : bind, protected-mode 속성)
6) 결과
- Data sources 연결 목록
- Dashboards 연결 목록
- Node Exporter 대시보드
- Redis Exporter 대시보드
- Redis 대시보드
Dooray! 인커밍 훅 알림 설정
✅ 공식 Github
https://github.com/prometheus/alertmanager
1. Alertmanager 설치
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
tar xvzf alertmanager-0.25.0.linux-amd64.tar.gz
mv alertmanager-0.25.0.linux-amd64.tar.gz alertmanager
cd alertmanager/
nohup ./alertmanager > alertmanager.log 2>&1 &
2. Prometheus Alert rules 설정
- Node Exporter Rules 생성
- Redis Exporter Rules 생성
- prometheus.yml에 등록
- Grafana에 연동 확인
3. Dooray! web hook 연동
alertmanager.yml에 채팅방 웹 훅을 추가합니다.
4. 결과
- alertmanager
- Dooray! 메시지 알림
- 문제 발생
- Alertmanager에서 기존에는 메시지 커스터마이징이 가능했지만 현재는 커스텀을 할 경우, 에러가 발생합니다.
- 시도해본 방법
- Alertmanager에서 발생하는 알림을 Grafana로 받기
- Grafana에 alert rules를 바로 등록해서 알림 받기
참고 사이트
- https://velog.io/@dev_leewoooo/Redis의-metrics를-모니터링해보자
- https://nauco.tistory.com/45
- https://velog.io/@sojukang/세상에서-제일-쉬운-Prometheus-Grafana-모니터링-설정
- https://mycup.tistory.com/320
- https://sangchul.kr/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-centos7%EC%97%90-gogolang-%EC%84%A4%EC%B9%98
- https://sh-safer.tistory.com/204
- https://pinggoopark.tistory.com/795