server [ 192.168.179.100 ] - 프로메테우스 서버
01-node [ 192.168.179.101 ] - 노트 익스포터
02-node [ 192.168.179.102 ] - 노트 익스포터
1. 네트워크 설정
- 각 컴퓨터 네트워크 설정
- 각 컴퓨터 호스트 이름 설정
- hosts 파일 설정
192.168.179.100 server
192.168.179.101 01-node
192.168.179.102 02-node
서버측 설정
방화벽끄기
레포지터리 설정 추가
프로메테우스 설치
설정파일 수정
프로메테우스 서버 시작
서버접속하여 확인
노드쪽 설정
방화벽끄기
노드익스포트 설정 추가
노드익스포트 설치
설정파일 수정
노드익스포트 서버 시작
server
01-node
02-node
1. 네트워크 설정
1) 각 컴퓨터 네트워크 설정
2) 각 컴퓨터 호스트 이름 설정
vi /etc/hostname
각각의 이름
3) hosts 파일 설정
vi /etc/hosts
[server의 IP] server
[01-node의 IP] 01-node
[02-node의 IP] 02-node []는 쓰는거 아님, 바꾸라는 뜻
4) 테스트
ping server 또는 ping 02-node 이런식으로 이름으로 통신 가능한지 확인
2. 프로메테우스 설정
1) 서버 설정
https://www.server-world.info/en/note?os=CentOS_Stream_8&p=prometheus&f=1
레포지터리 추가
cat > /etc/yum.repos.d/prometheus.repo <<'EOF'
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
EOF
설치
dnf -y install prometheus2
설정 파일 수정
vi /etc/prometheus/prometheus.yml 마지막에 다음 내용 추가
- job_name: node
static_configs:
- targets: ['01-node:9100', '02-node:9100']
서버 시작
systemctl restart prometheus
확인
웹브라우저에서 server의 IP:9090 포트로 접속
2) 노드 설정
레포지터리 추가
cat > /etc/yum.repos.d/prometheus.repo <<'EOF'
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
EOF
설치
dnf -y install node_exporter
실행
systemctl restart node_exporter
설정파일에서 잡을 기준으로 서버를 구분한다. 테스트서버, 리얼타임서버등등...
yml << 들여쓰기 필수 !!!!
프로메테우스: 메트릭을 수집하는 역활 모니터링기능도 있지만 약하다
그래서 그라파나를 추가한다.
3. 그라파나 설정
1) 서버 설정
설치
dnf -y install grafana
설정 파일 수정
vi /etc/grafana/grafana.ini
# 35번 라인
http_addr = 0.0.0.0
실행
systemctl restart grafana-server
확인
웹브라우저에서 server의 IP:3000 포트로 접속
ID : admin PW : admin 로그인 후 패스워드 설정
2) 프로메테우스와 연동(서버 설정)
참고 : https://www.server-world.info/en/note?os=CentOS_Stream_8&p=prometheus&f=5
[7]번까지 실행
하면 메트릭을 수집한 정보를 모니터링해주는 프로그램인 그라파나에 연결하여 그라파나가 모니터링 할수 있게된다.
https://grafana.com/grafana/dashboards/15780-opstree-node-exporter-a/
예제를 보면서 자체 대쉬보드를 만들어본다
각 노드별
CPU사용량
메모리 사용량
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 4,
"links": [],
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.15",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "sum by (mode)(irate(node_cpu_seconds_total{mode=\"system\",instance=\"01-node:9100\"}[5m])) * 100",
"instant": false,
"interval": "",
"legendFormat": "node1",
"refId": "A"
},
{
"exemplar": true,
"expr": "sum by (mode)(irate(node_cpu_seconds_total{mode=\"system\",instance=\"02-node:9100\"}[5m])) * 100",
"hide": false,
"interval": "",
"legendFormat": "node2",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 9
},
"hiddenSeries": false,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.15",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": false,
"expr": "node_memory_MemTotal_bytes{instance=\"01-node:9100\"} - node_memory_MemFree_bytes{instance=\"01-node:9100\"}",
"hide": false,
"interval": "",
"legendFormat": "node1",
"refId": "A"
},
{
"exemplar": true,
"expr": "node_memory_MemTotal_bytes{instance=\"02-node:9100\"} - node_memory_MemFree_bytes{instance=\"02-node:9100\"}",
"hide": false,
"interval": "",
"legendFormat": "node2",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Memory Uesd",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"refresh": "5s",
"schemaVersion": 27,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "New dashboard Copy",
"uid": "UJvM_Y44z",
"version": 3
}
알람설정
vi /etc/prometheus/alert_rules.yml
groups:
- name: Instances
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
summary: 'Instance {{ $labels.instance }} down'
프로메테우스에 alertmanager 추가
vi /etc/prometheus/prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets: 여기 밑에 다음 내용 추가(들여쓰기 주의)
- 'localhost:9093'
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
- "alert_rules.yml"
서버 재시작
systemctl restart prometheus alertmanager
확인
웹 브라우저에서 서버IP:9090 포트로 접속 Alerts 확인
node 컴퓨터에서 systemctl stop node_exporter
잘안되면 지메일쓸때
구글 2차비밀번호 가서 앱 비밀번호를 생성하여 메일용 비밀번호를 생성하자
그리고 설정을 아래와 바꾼다
gmail 쓸 떄
vi /etc/prometheus/alertmanager.yml
global:
resolve_timeout: 1m
route:
receiver: 'gmail-notifications'
receivers:
- name: 'gmail-notifications'
email_configs:
- to: [받는 사람 메일 주소]
from: [본인 gmail 주소]
smarthost: smtp.gmail.com:587
auth_username: [본인 gmail 주소]
auth_identity: [본인 gmail 주소]
auth_password: [발급받은 앱 비밀번호]
send_resolved: true
그리고 테스트한다.
잘들어온다.
다시서버를 올려도 올라왔다고 메일이 온다
참고자료