데이터 가시화 (d3.js , Plotly, Grafana, Kibana 등)

InfluxDB , Telegraf, Grafana 모니터링 설치 (2021년 8월기준)

[하마] 이승현 (wowlsh93@gmail.com) 2021. 3. 9. 10:58

* 해당 글은 리눅스 기준 입니다. (CentOS 7버전, Ubuntu18에서 잘됨)



InfluxDB 2.x 설치 

(docs.influxdata.com/influxdb/v2.0/get-started/?t=Linux) 

아래 2가지 방식 중에 패키지로 서비스로 시작하는것을 추천한다.

파일로 받아서 실행 하기)

  1. curl -s https://repos.influxdata.com/influxdb2.key | gpg --import -
  2. wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-linux-amd64.tar.gz

   3. tar xvzf influxdb2-2.0.4-linux-amd64.tar.gz
   4. cd influxdb2-2.0.4-linux-amd64
   5. influxd  로 시작한다. 


패키지로 인스톨 및 서비스시작하기   (arm64 or amd64 시스템에 맞게 변경해야함)

- RedHat & CentOS (amd 64-bit)

https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4.x86_64.rpm
sudo yum localinstall influxdb2-2.0.4.x86_64.rpm

systemctl start influxdb 
systemctl enable influxdb 
systemctl status influxdb 

- Ubuntu & Debian (amd 64-bit)

https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-amd64.deb
sudo dpkg -i influxdb2-2.0.4-amd64.deb

 

sudo service influxdb start
sudo service influxdb status


InfluxDB UI설정하기 

최신 InfluxDB는 UI도 수려하게 지원한다. 따라서 UI를 통한 셋업방법을 알아보자.

1. localhost:8086 으로 접속하면 UI에 접근할수있다.
2. 아래 설정을 넣는다. (매우 중요하다.)

  1. Username 넣어준다.   (예: hama) 
  2. Password 넣어준다.  (기억해두시라) 
  3. Organization 이름 넣어준다.  <-- 이전버전에는 없는 것이다.
  4. Bucket 이름 생성한다.  <-- 이전버전에는 없는 것이다. 
  5. Click Continue.

3. 메인 화면에서 Build a dashboard 를 선택한다. 

4. Create Dashboard 를 선택한다. 

5. Add Cell 을 선택한다. 

6. 
- from (bukcet) :  monitoirng 선택한다. 즉 bucket 이름이다
- filter (_measurement)  : folder_status 를 선택한다. .
- filter (_field) : size를 선택한다. 
- filter (tag) : tag를 선택한다. 
- 5s refresh : 5초마다 화면을 갱신해준다
- past 1h : 과거 1시간 전 데이터 부터 보여준다
- Submit : 적용한다. 

Influxdb의 ui를 통해 위와 같이 나오는 것을 볼 수 있다. (메뉴얼없어도 직관적으로 다룰 수 있을 것이다)

InfluxDB에 데이터 넣기 

대략 아래와 같이 코딩하자.  (참고 소스 : https://github.com/wowlsh93/monitoring)

module github.com/wowlsh93/monitoring

go 1.14

require (
    ....
	github.com/influxdata/influxdb-client-go/v2 v2.2.2
)

- influxdb 클라이언트 의존성은 v2.2.2 

//DBPATH: http://localhost:8086
//AUTHTOKEN: zYR-2G5BRmb5SDIkbKRUe2DXyon4rbXEzjoTwsSDHMUWeO3hTjasWBIGw8W7Dy_QxipDNWOj2g5MMD9le8-B3Q==

db := influxdb.Influxdb{
	Client :  influxdb2.NewClient(conf.DBPATH, conf.AUTHTOKEN),
}

- influxdb를 접근하기위해서는 db 경로와 auth 토큰이 필요하다. 
auth token 발급법은 docs.influxdata.com/influxdb/v2.0/security/tokens/create-token/ 링크에서 알수있다.
간략히 설명하면 UI에서 Data -> Tokens를 가면 발급받을 수 있다. (아래 빨간색 사각형)

package influxdb

import (
	"context"
	"github.com/influxdata/influxdb-client-go/v2"
	"time"
)

type Influxdb struct {
	Client influxdb2.Client
}

func (db* Influxdb) AddData(measurement string, curSize int64) {
	writeAPI := db.Client.WriteAPIBlocking("opusm", "monitoring")
	p := influxdb2.NewPointWithMeasurement(measurement).
		AddTag("storage", "total").
		AddField("size", curSize).
		SetTime(time.Now())

	writeAPI.WritePoint(context.Background(), p)
}
func (db* Influxdb) Close() {
	db.Client.Close()
}

- 위와 같이 influxdb에 값을 넣을 수 있다.
- "opusm" 은 조직이고
- "ledgermaster" 은 버켓이고 (참고로 이건 데이타베이스라고 생각하자.)
- Measurement 도 지정하자. (참고로 이건 테이블과 비슷하다고 보면 된다) 
- Tag, Field 도 넣어주자 (참고로 Tag는 인덱싱되는 컬럼, Field는 그냥 컬럼들이라고 생각하자, 둘다 key,value 쌍이다)
- Field 값은 필드 값은 strings, floats, integers, boolean 타입을 가진다. 
- 해당 timestamp에 field set, tag set 들이 구성된다.  (key, value 를 합쳐서 set이라고 한다) 

* tag 는 아래와 같이 사용된다. 

butterflies 와 honeybees의 갯수는 일반 필드이고, location 과 scientist는 tag인데 생각을 해보자!!  보통 우리는 과학자에 필터링을 걸 것어서 사용 할 것이다. scientist=perpetua 처럼 말이다. perpetua 과학자가 처리한 데이터만 골라서 보여주고 싶을 것이다. 이런 그룹짓고 싶은 필터링에 indexing을 거는 것이다 tag를 사용해서~~

* 포인트와 시리즈이라는 개념도 중요한데 시리즈에 대해 잘 이해가 안가는..

Telegraf 1.17   (influxdb2 용) 

(docs.influxdata.com/telegraf/v1.17/introduction/getting-started/)

1. 설치하기 

Ubuntu & Debian
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.17.3-1_amd64.deb sudo dpkg -i telegraf_1.17.3-1_amd64.deb

RedHat & CentOS
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.17.3-1.x86_64.rpm
sudo yum localinstall telegraf-1.17.3-1.x86_64.rpm

Linux Binaries (64-bit)
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.17.3_linux_amd64.tar.gz
tar xf telegraf-1.17.3_linux_amd64.tar.gz


2. 기본설정하기 

2-1)
vi /etc/telegraf/telegraf.conf 에서 
[[outputs.influxdb_v2]]
urls = ["$INFLUX_HOST"]
token = "$INFLUX_TOKEN"
organization = "$INFLUX_ORG"
bucket = "telegraf"

을 해주면 influxdb2로 출력해준다. 

2-2))
telegraf -sample-config --input-filter cpu:mem --output-filter influxdb > telegraf.conf
cpu 사용량 및 메모리 사용량에 대한 메트릭을 읽게한다. 아래의 output출력으로 정보를 보낼 수 있다.


3. 시작하기 

systemctl start telegraf <-- 시작하기
sudo systemctl status telegraf  <-- 확인하기 

UI의 telegraf 버킷에 각종 system 값들이 들어온것을 볼 수 있다. 

4. 특정폴더사이즈 감시 

4-1) 
#!/usr/bin/env bash
du -bs "${1}" | awk '{print "[ { \"bytes\": "$1", \"dudir\": \""$2"\" } ]";}'

를 metrics-exec_du.sh 이름으로 만든다.

4-2) 아래를 telegraf.conf파일에 추가한다.

[[inputs.exec]]
  commands = [ "YOUR_PATH/metrics-exec_du.sh /var/lib/influxdb/data" ]
 timeout = "10s"
 name_override = "quorum-test"
 name_suffix = ""
 data_format = "json"
 tag_keys = [ "dudir" ]

4-3) systemctl restart telegraf  로 다시 시작한다.  

du 가 추가된 것을 볼 수 있다.

Grafana 8.0.6


1. 설치하기 grafana.com/grafana/download

Red Hat, CentOS, RHEL, and Fedora(64 Bit)

wget https://dl.grafana.com/oss/release/grafana-8.0.6-1.x86_64.rpm
sudo yum install grafana-8.0.6-1.x86_64.rpm

Ubuntu and Debian(64 Bit)

sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_8.0.6_amd64.deb
sudo dpkg -i grafana_8.0.6_amd64.deb

2. 실행하기  grafana.com/docs/grafana/latest/installation/rpm/#2-start-the-server

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server
sudo systemctl enable
grafana-server

* 방화벽 해제 (centos에서 외부에서 3000포트로 접근하려는데 방화벽이 실행중이라면)
sudo systemctl stop firewalld

3. Grafana UI 다루기 grafana.com/docs/grafana/latest/getting-started/getting-started/

브라우저에서 다음 주소로 Grafana UI 에 들어간다. => http://localhost:3000/

admin/admin 으로 들어간후에 비밀번호 바꿔준다. 

메인화면은 위와 같다. 

4. Data Source 추가하기 

Data sources선택 

InfluxDB 선택 

* 이전버전 InfluxDB 데이타소스 방식과 매우 많이 달라졌다. (4버전대가 편했는데....) 
- 이름은 아무거나 만들어주고
- 여기선 Query Language 를 Flux로 한다. 이게 새로 추가된 방식이다. (InfluxDB 2.x대에는 이걸 써야한다)
- HTTP에 URL을 http://your ip address:8086

나머지는 건드리지 않았다. (혹시 Basic auth 켜있으면 꺼준다)

- 조직은 influxdb 설정에서 만든것을 넣어준다. 
- 토큰은 influxdb 에서 만든 auth token 문자열을 넣어준다.
- 버킷에는 influxdb 설정에서 만든 것을 넣어준다.

나머지는 건드리지 않았다. 
Save& Test를 해주며 끝마친다. 

5. 데시보드 추가하기 

Dashboard선택 

일단 Add an empty panel 을 선택한다.

이전 버전(4.x대 이전)과는 굉장히 많은 차이가 있다.

- Flux language syntax 를 이용하여 쿼리하여 데이터를 보여준다.
- bucket 으로 부터 3시간 이전 데이터부터 2시간 이전데이터까지를 보여준다. 
- 새로 만들어진 Flux 스크립트 기반으로 모니터링 환경을 꾸미려면 관련 학습이 선행되어야 할 것 같다. 

Getting start with Flux => https://docs.influxdata.com/influxdb/v2.0/query-data/get-started/

이로써 기초적인 설치와 세팅이 끝났다.


6. Flux 예제 


-  example-bucket 이란 이름의 버킷으로 부터 데이터를 가져온다.
- 1시간 전 부터 시작하는 데이터를 가져 온다
- measurement 는 "cpu" 를 가져온다.
- tag 키가 cpu이고 tag 밸류가 "cpu-total" 인 포인트만 가져온다. 
- 1분간의 데이터를 평균(mean)하여 가져온다. (즉 그래프에는 1시간 전부터 시작하여 1분당 한개의 값만 나올 것이다.)