Grafana와 Prometheus

VirtualBox 6



게스트 OS: CentOS Linux release 7.5.1804 (Core)

가상 머신의 설정 -> 네트워크 설정
과제: NAT
[고급] -> [포트 포워딩]
SSH: TCP 1022 -> 22
Promethus GUI: TCP 19090 -> 9090
Grafana GUI: TCP 13000 -> 3000

모듈 버전 및 패키지



Prometheus: 2.14.0
꾸러미: prometheus-2.14.0.linux-amd64.tar.gz

Node exporter:0.18.1
꾸러미: node_exporter-0.18.1.linux-amd64.tar.gz

Grafana: 6.4.4
꾸러미: grafana-6.4.4-1.x86_64.rpm

CentOS 설정



firewalld에서 http https 허용



Firewall 참고
$ systemctl status firewalld  # active (runnig)
$ sudo firewall-cmd --list-all
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

# ポート許可
$ sudo firewall-cmd --permanent --add-port=22/tcp
$ sudo firewall-cmd --permanent --add-port=9090/tcp
$ sudo firewall-cmd --permanent --add-port=9100/tcp
$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --list-ports
$ sudo firewall-cmd --reload

$ sudo systemctl stop firewalld  # 以下検証環境
$ sudo systemctl is-enabled firewalld  # enabledになっていたら下記を実施
$ sudo systemctl disable firewalld
$ sudo systemctl is-enabled firewalld

Prometheus 설치



설치 작업



공식 사이트
Owner 등은 모두 root
$ cd /tmp
$ curl -LO https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz
$ tar xvzf prometheus-2.14.0.linux-amd64.tar.gz
$ sudo cp -r prometheus-2.14.0.linux-amd64 /etc/prometheus

Prometheus 시작 스크립트 설정, 로그 회전 설정 설정 참고
$ sudo /etc/init.d/prometheus start
$ sudo /etc/init.d/prometheus status
$ sudo /etc/init.d/prometheus stop

Prometheus에 대한 액세스 확인



http://localhost:19090/graph


PromQL 실행 확인



Expression이 표시되는 프레임에 쿼리를 입력하고 Execute를 클릭하여 실행합니다.

올라가는 서버 확인
Expression : upElement: up{instance="localhost:9090",job="prometheus"}
Value: 1

사용 중 메모리 확인
(기본 단위는 바이트, 초 등)
Expression : process_resident_memory_bytesElement: process_resident_memory_bytes{instance="localhost:9090",job="prometheus"}
Value: 49057792

Exporter



사용되는 포트 목록 : port allocations

Node exporter 설치


$ cd /tmp
$ curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
$ tar xvzf node_exporter-0.18.1.linux-amd64.tar.gz
$ sudo cp -r node_exporter-0.18.1.linux-amd64 /etc/node_exporter

Node exporter의 기동 스크립트 설정, 로그 로테이트 설정 참조
$ sudo vim /etc/rc.d/init.d/node_exporter  # 起動スクリプト作成
$ sudo chmod +x /etc/rc.d/init.d/node_exporter
$ sudo mkdir /var/log/node_exporter
$ sudo /etc/init.d/node_exporter start  # 起動スクリプトにてスタート
$ sudo /etc/init.d/node_exporter status
$ sudo chkconfig node_exporter on

$ sudo vim /etc/logrotate.d/node_exporter  # ログローテート設定作成

$ sudo vim /etc/prometheus/prometheus.yml  # Prometheus 設定ファイルに追記
$ sudo /etc/prometheus/promtool check config /etc/prometheus/prometheus.yml
Checking /etc/prometheus/prometheus.yml 
  SUCCESS: 0 rule files found
$ sudo /etc/init.d/prometheus reload

Prometheus 콘솔에서 다음을 실행 및 확인
Expression : node_memory_Cached_bytesElement: node_memory_Cached_bytes{instance="localhost:9100",job="node"}
Value: 996540416

Grafana 설치 및 Prometheus와 협력


$ wget https://dl.grafana.com/oss/release/grafana-6.4.4-1.x86_64.rpm
$ sudo yum install initscripts urw-fonts
$ sudo rpm -Uvh grafana-6.4.4-1.x86_64.rpm
$ sudo /etc/init.d/grafana-server start
$ sudo chkconfig grafana-server on

http://localhost:13000/ 방문
admin/admin으로 로그인하여 초기 암호 변경

Datasource 추가



[Create your first data source] -> [Add data source] -> [Prometheus] -> [Select]


[Save & Test]를 클릭하면 "Data source is working"이 표시되었다.

대시보드 만들기



Dashboards - Official & community built dashboards에서 json 파일을 다운로드합니다.
왼쪽의 플러스 마크에서 [Import] -> [Upload .json file]을 선택하여 업로드합니다.


환경 파일


$ cat /etc/sysconfig/grafana-server
GRAFANA_USER=grafana

GRAFANA_GROUP=grafana

GRAFANA_HOME=/usr/share/grafana

LOG_DIR=/var/log/grafana

DATA_DIR=/var/lib/grafana

MAX_OPEN_FILES=10000

CONF_DIR=/etc/grafana

CONF_FILE=/etc/grafana/grafana.ini

RESTART_ON_UPGRADE=true

PLUGINS_DIR=/var/lib/grafana/plugins

PROVISIONING_CFG_DIR=/etc/grafana/provisioning

# Only used on systemd systems
PID_FILE_DIR=/var/run/grafana

구성



/etc/grafana/grafana.ini

PromQL



이하, node_exporter를 넣은 서버(localhost:9100)에 관한 수신(bytes)의 출력 결과.
node_network_receive_bytes_total출력 예:


Element
Value


node_network_receive_bytes_total{device="enp0s3",instance="localhost:9100",job="node"}
54247

node_network_receive_bytes_total{device="lo",instance="localhost:9100",job="node"}
354136

node_network_receive_bytes_total{device="virbr0",instance="localhost:9100",job="node"}
0

node_network_receive_bytes_total{device="virbr0-nic",instance="localhost:9100",job="node"}
0


라벨의 정규 표현 예



virbr이 붙는 device 정보를 모두 출력node_network_receive_bytes_total{device=~"virbr.+"}
device가 virbr0 or virbr0-nic의 것을 출력node_network_receive_bytes_total{device=~"virbr0|virbr0-nic"}

metric 정규식



node_network_receive_bytes_total과 node_network_transmit_bytes_total을 모두 쿼리합니다.{__name__=~"node_network_(receive|transmit)_bytes_total"}

rate() 지정된 시간별 값


  • counter에만 사용한다.

  • node_network_receive_bytes_total과 같이 시간에 비례하여 데이터가 축적되어 가기 때문에, 시간마다의 데이터를 출력하고 싶은 경우에 사용.

    10분마다 값rate(node_network_receive_bytes_total[10m])

    랭킹



    상위 5개의 데이터를 반환한다.topk(5, max_over_time(node_network_receive_bytes_total[30m]))

    연산자



    아래와 같은 연산자도 기술 가능.rate(node_network_transmit_bytes_total[10m])+ 1000 / 10 * 20 - 5 ^ 2 % 2

    비교 연산자


    == , != , > , >= , < , <= 가 사용 가능.rate(node_network_receive_bytes_total[10m]) !=0rate(node_network_receive_bytes_total[10m]) <= 1000

    그룹화



    instance="localhost:9100"의 것을 그룹화해 합계치를 취득한다.sum(node_network_receive_bytes_total) by (instance)sum(rate(node_network_receive_bytes_total[5m])) by (instance)

    게이지


  • 정해진 범위의 값이 상하하는 메모리 등에 사용한다.
  • max_over_time , min_over_time , avg_over_time functions.max_over_time(node_memory_MemFree_bytes[5m])

    참고로 한 사이트


  • htps : // 이 m/치다 26/이고 ms/d251fb42f7f2d8아68374
  • htps : // 메이 m. 코 m/@ゔぁぁ/p로 mql-트리어 l-후-r 베긴에 rs-9 아 b455142085
  • 좋은 웹페이지 즐겨찾기