클라우드 엔지니어/클라우드 캠프과정

On-premise 실습 ( prometheus , grafana , alertmanager)

해아's 2022. 10. 5. 17:30

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/

 

Opstree/Node Exporter

Edit Delete Confirm Cancel

grafana.com

 

예제를 보면서 자체 대쉬보드를 만들어본다

 

각 노드별

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

 

그리고 테스트한다.

잘들어온다.

 

다시서버를 올려도 올라왔다고 메일이 온다

 

 

참고자료

더보기

 

728x90
반응형