System-Monitoring-Dashboard 만들기 (fluent-bit, influxDB, grafana)

시나리오

  1. fluent-bit로 cpu, disk, network, memory 정보를 1초마다 읽어 들인다.
  2. influxDB에 적재한다.
  3. grafana로 influxDB의 데이터를 시각화 한다.

1. fluent-bit로 system metrics 추출

– fluent-bit 설치는 doc 참조
doc v1.3: https://docs.fluentbit.io/manual

/etc/td-agent-bit/td-agent-bit.conf

[SERVICE]                                                                
    # Flush                                                              
    # =====                                                              
    # Set an interval of seconds before to flush records to a destination
    Flush        5                                                           
                                                                             
    # Daemon                                                                 
    # ======                                                                 
    # Instruct Fluent Bit to run in foreground or background mode.           
    Daemon       Off                                                         
                                                                             
    # Log_Level                                                              
    # =========                                                              
    # Set the verbosity level of the service, values can be:                 
    #                                                                        
    # - error                                                                
    # - warning                                                              
    # - info                                                                 
    # - debug                                                                
    # - trace                                                                
    #                                                                        
    # By default 'info' is set, that means it includes 'error' and 'warning'.
    Log_Level    info                                                        
                                                                             
    # Parsers_File                                                           
    # ============                                                           
    # Specify an optional 'Parsers' configuration file                       
    Parsers_File parsers.conf                                                
    Plugins_File plugins.conf                                                
                                                                             
    # HTTP Server                                                            
    # ===========                                                            
    # Enable/Disable the built-in HTTP Server for metrics                    
    HTTP_Server  Off                                                         
    HTTP_Listen  0.0.0.0                                                     
    HTTP_Port    2020                                                        
                                                                             
#############################################################################
                                                                             
[INPUT]                                                                      
    Name cpu                                                                 
    Tag  system.cpu                                                          
                                                                             
    # Interval Sec                                                           
    # ====                                                                   
    # Read interval (sec) Default: 1                                         
    Interval_Sec 1                                                           
    #Interval_NSec 0                                                         
    #PID True                       
    
[INPUT]                                                                      
    Name disk                                                                
    Tag  system.disk                                                         
                                                                             
    # Dev_Name                                                               
    # ====                                                                   
    # To limit the target disk/partition.                                    
    # If not set, the plugin gathers from all of disks and partitions.       
    # Dev_Name sda                                                           
                                                                             
    # Total Interval                                                         
    #     = Interval Sec + ( Interval Nsec / 1000 / 1000 / 1000 )            
    #                                                                        
    # Interval Sec                                                           
    # ====                                                                   
    # Read interval (sec) Default: 1                                         
    Interval_Sec 1                                                           
                                                                             
    # Interval NSec                                                          
    # ====                                                                   
    # Read interval (nsec) Default: 0                                        
    Interval_NSec 0                                                          
                                                                             
[INPUT]                                                                      
    Name mem                                                                 
    Tag  system.mem   

#############################################################################

[OUTPUT]
    Name influxdb
    Match system.*
    Host 127.0.0.1
    Port 8086  # influxdb default port
    Database system_metrics_db

2. influxDB 설치 및 database 생성

– 설치는 doc 참조
doc v1.7: https://docs.influxdata.com/influxdb/v1.7/

– system_metrics_db 데이터베이스 생성

#!/usr/bin/env bash

# influxdb start
$ sudo service influxdb start

# influxdb admin으로 접속
$ influx
  > show databases
  > create database system_metrics_db
  > use system_metrics_db

3. grafana로 dashboard 생성

– 설치는 doc 참조
주소: https://grafana.com/docs/grafana/latest/installation/debian/

– 먼저 fluent-bit를 실행해서 influxdb에 system-metrics를 적재하자.
$ sudo service td-agent-bit start

– grafana 실행
$ sudo service grafana-server start

– grafana 접속

 브라우저를 켜고 localhost:3000 접속해보자. (default-port: 3000)
init-user: admin
init-password: admin

0

– Create a data source (influxDB) 1

InfluxDB default-PORT: 8086
db: system_metrics_db
user/password: admin/admin 2

– New dashboard
– 방금 만든 InfluxDBTest data source 선택 3

– SQL문으로 편집하기위해 연필 모양 아이콘 클릭 4 5

field key 는 influxDB에서 확인하면 된다.

$ influx
  > show databases
  > use system_metrics_db
  > show field keys

6 – fluent-bit에서 설정한 tag name 으로 테이블(?) 네임이 결정된다.
– 기존에 있던걸 찍어서 위에 설정한 것과 이름이 다를 것이다.

Visualization Tab에서 여러 가지 설정을 만질 수 있음. 7


결과 화면

8 Google Compute Engine에서 적용하는데
free tier라 influxdb는 메모리 부족으로 켜지지도 않고,
컴퓨터 멈추고 그래서 사양 업그레이드를 했다.
Host PC에서 접속하기 위해 방화벽에서 3000번 포트를 뚫어주었다.
disk는 fluent-bit 기본값으로 read, write 두 개로 돼있나 보다.
생각했던 건 사용 중인 용량하고 전체 용량이었는데…
그게 중요한 건 아니라 따로 알아보진 않았다.


추가)

Grafana 알림 설정하기

내 글: Grafana에서 Alert 설정하기 (Email 알림)

InfluxDB Retention Policy 적용하기

– 위 글대로 환경 구성을하면 반드시 느려질 것이다. 데이터가 계속 쌓이기 때문인데 그 문제를 해결하는 방법이다.
내 글: [InfluxDB] Retention Policy란? & 설정 방법