시스템 모니터링을 위한 Grafana, influxdb 2, telegraf 설치(3)
반응형

Grafana 와 influxdb 를 연결한다. influxdb가 2.0 이라 v1.x 와는 연결이 조금 다르다.

 

Web 접속

grafana가 설치된 서버에 Web으로 접속 하면 아래와 같은 화면을 볼 수 있다.

Ex. http://192.168.1.173:3000/

초기 접속 정보는 admin / admin 이다.

 

관리자 Password 설정

원하는 Password를 입력하여 설정한다.

 

Data Sources 설정

grafana와 influxdb를 연결한다.

메뉴를 선택하고
"Add data source" 를 클릭
influxDB 선택
Query Language는 Flux 를 선택하고 URL에는 influxdb 주소를 입력한다.
influxdb의 User/Password 과 상세 정보를 입력하고 아래쪽의 Save & test 를 입력한다. 정상이면 "Datasource updated"  라고 뜬다.

 

Dashboard 생성

아래와 같이 Dashboard를 생성한다.

Manage 메뉴로 이동한다.
New Dashboard 를 클릭
Add an empty panel 클릭
쿼리 입력 후 "Query inspector" 클릭. 쿼리는 맨 아래에 별도 정리하겠습니다.

 

59 rows 와 같이 데이터가 있는 것을 확인하고 우측 상단의 X 버튼을 누르면
그래프가 표시된다.
Title 항목을 "CPU 사용량"으로, Legend placement를 Right 로 바꾸고 우측 상단의 Apply를 클릭.
설정된 그래프가 보인다. 우측 상단의 새로 고침은 원하는 시간으로 설정해 두면 된다. 우측 상단 메뉴중 디스켓 아이콘을 누르면 Dashboad가 저정된다.

 

CPU 사용량 조회쿼리

# Bucket명 수정 필요. "NAMEOFYOUBUCKET" 항목. 위에서는 telegraf로 지정함

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> filter(fn: (r) => r["_field"] == "usage_idle")
  |> filter(fn: (r) => r["cpu"] == "cpu-total")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
  |> toFloat()
  |> yield(name: "mean")

# 필요하면 HOST 추가
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")

 

Memory 사용량 조회 쿼리

# Bucket명 수정 필요. "NAMEOFYOUBUCKET" 항목. 위에서는 telegraf로 지정함

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")


# 필요하면 host 추가
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")

 

HDD 사용량 조회 쿼리

# Bucket명 수정 필요. "NAMEOFYOUBUCKET" 항목. 위에서는 telegraf로 지정함

from(bucket: "NAMEOFYOURBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "disk")
  |> filter(fn: (r) => r["_field"] == "used")
  |> filter(fn: (r) => r["path"] == "/")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")
  
  
# 필요하면 host 삽입  
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
반응형