2 minute read

프로메테우스를 이용한 모니터링

프로메테우스

가상머신 설정

3개의 가상머신을 생성한다.

  • server : 192.168.197.100
  • 01-node : 192.168.197.10
  • 02-node : 192.168.197.20

호스트 설정

  • server
    vi /etc/hostname
    
    server
    
  • node(01-node, 02-node)
    vi /etc/hostname
    
    01-node # 02-node는 02-node로 입력
    

    호스트끼리 연동하기

    vi /etc/hosts
    
    192.168.197.100 server
    192.168.197.10 01-node
    192.168.197.20 02-node
    

    다음 내용을 추가해 주고 재부팅한 뒤, ping [가상머신 이름] 으로 서로간의 통신을 확인해본다.

프로메테우스 설정

  1. 서버 설정(server)
    • 레포지터리 추가 ```shell 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 # 따로 쳐야함


- 설치
```shell
dnf -y install prometheus2
  • 설정 파일 수정
    vi /etc/prometheus/prometheus.yml
    
# 맨 마지막에 추가
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: node
    static_configs:
      - targets: ['01-node:9100', '02-node:9100']
  • 서버 시작
    systemctl stop firewalld # 방화벽 해제
    systemctl restart prometheus
    
  • 확인 server의 [아이피:9090]을 했을때, 다음 화면이출력되면 성공이다.
    image
  1. 노드 설정(01-node, 02-node)
    • 레포지터리 추가 ```shell 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 # 따로 쳐야함


- 설치
```shell
dnf -y install node_exporter
  • 실행
    systemctl stop firewalld # 방화벽 해제
    systemctl restart node_exporter
    
  • 확인 image

그라파나

설정

  1. 서버 설정(server)
    • 설치
      dnf -y install grafana
      
    • 설정 파일 수정
      vi /etc/grafana/grafana.ini
      

      image
      35번째 줄을 다음과 같이 바꾼다.

  • 확인 image
    server의 ip:3000으로 접속, 초기 아이디 패스워드 모두 admin이다. 접속해서 새로운 비밀번호를 설정한다.

프로메데우스와 연동

image
image
image
자기 프로메테우스 서버의 ip주소
image

대시보드 설정

  • 템플릿 다운 : https://grafana.com/grafana/dashboards/15780-opstree-node-exporter-a/
  • 적용
    image
    image
    image

  • 직접 만들기
    image
    image
    image

cpu남은양 확인
image

irate(node_cpu_seconds_total {mode="idle"}[1m])

cup사용양 확인
image

100 - (avg by (instance) (irate(node_cpu_seconds_total {mode="idle"}[5m])) * 100)

알람 설정

  • 설치
    dnf -y install alertmanager
    
  • 원본 설정파일 백업
    mv /etc/prometheus/alertmanager.yml /etc/prometheus/alertmanager.yml.org
    
  • 설정 파일 생성
    vi /etc/prometheus/alertmanager.yml
    
global:
  smtp_smarthost: '54.180.32.98:25'  #내가 만든 이메일 도메인
  smtp_require_tls: false
  smtp_from: 'Alertmanager <test01@mail.cloudcampkjh.kro.kr>' #내가 만든 이메일 도메인 계정1

route:
  receiver: 'email-notice'
  group_by: ['alertname', 'Service', 'Stage', 'Role']
  group_wait:      30s
  group_interval:  5m
  repeat_interval: 4h

receivers:
- name: 'email-notice'
  email_configs:
  - to: "test02@mail.cloudcampkjh.kro.kr" #내가 만든 이메일 도메인 계정2
  • 알람 발생 규칙 설정
    vi /etc/prometheus/alert_rules.yml
    

    ```shell groups:

  • name: Instances rules:
    • alert: InstanceDown expr: up == 0 for: 1m #여기서 시간 설정 할 수 있다. labels: severity: critical annotations: description: ‘ of job has been down for more than 5 minutes.’ summary: ‘Instance down’ ```
  • 프로메테우스에 alertmanager 추가
    vi /etc/prometheus/prometheus.yml
    

    ```shell

    Alertmanager configuration

    alerting: alertmanagers:

    • static_configs:
      • targets:
        • ‘localhost:9093’ #여기 들여쓰기 신경쓰기

    rule_files: # - “first_rules.yml” # - “second_rules.yml” - “alert_rules.yml” #들여쓰기 신경쓰기 ```

  • 재시작
    systemctl restart prometheus alertmanager
    
  • 확인 image

node의 컴퓨터 하나 꺼보기

systemctl stop node_exporter
  • 1분 후 image
    image

test02에 메일이 온다.

  • Gmail로 받아보기 image
    image
    두개가 설정이 완료되야 한다.
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
  • 재시작 및 확인
    systemctl restart prometheus alertmanager
    

    image