TIG 스택 설치 · 19 min read · Nov 24, 2025

Debian 12에 TIG 스택(Telegraf, InfluxDB 및 Grafana) 설치하는 방법

TIG(Telegraf, InfluxDB 및 Grafana) 스택은 시스템 메트릭의 수집, 저장, 그래프 작성 및 알림을 쉽게 만들기 위한 오픈 소스 도구 플랫폼의 약어입니다. 메모리, 디스크 공간, 로그인한 사용자, 시스템 부하, 스왑 사용량, 가동 시간, 실행 중인 프로세스 등과 같은 메트릭을 한 곳에서 모니터링하고 시각화할 수 있습니다. 스택에서 사용되는 도구는 다음과 같습니다:

  • Telegraf - 데이터베이스, 시스템 및 IoT 센서에서 데이터와 이벤트를 수집하고 전송하기 위한 오픈 소스 메트릭 수집 에이전트입니다. 수집된 데이터를 전송할 수 있는 InfluxDB, Graphite, Kafka 등과 같은 다양한 출력 플러그인을 지원합니다.
  • InfluxDB - Go 언어로 작성된 오픈 소스 시계열 데이터베이스입니다. 빠르고 고가용성 저장소에 최적화되어 있으며 메트릭, 이벤트 및 실시간 분석을 포함하여 대량의 타임스탬프 데이터와 관련된 모든 것에 적합합니다.
  • Grafana - 오픈 소스 데이터 시각화 및 모니터링 스위트입니다. Graphite, ElasticSearch, InfluxDB 등과 같은 다양한 입력 플러그인을 지원합니다. 시스템 메트릭 및 성능 데이터를 시각화하고 모니터링할 수 있는 아름다운 대시보드와 메트릭 분석을 제공합니다.

이 튜토리얼에서는 단일 Debian 12 서버에 TIG 스택을 설치하고 구성하는 방법을 배웁니다.

전제 조건

  1. 최소 1GB의 RAM을 갖춘 Debian 12를 실행하는 서버.
  2. 루트 권한이 있는 비관리자 사용자.
  3. 간단한 방화벽(UFW)이 활성화되고 실행 중입니다.
  4. 서버를 가리키는 grafana.example.com과 같은 완전한 도메인 이름(FQDN).
  5. 서비스 알림을 위한 이메일 알림을 받기 위한 Amazon SES 또는 Mailgun과 같은 이메일 서비스의 SMTP 계정.
  6. 모든 것이 업데이트되었는지 확인합니다. $ sudo apt update && sudo apt upgrade
  7. 튜토리얼과 Craft CMS가 실행되기 위해 몇 가지 필수 패키지가 필요합니다. 이 중 일부는 이미 서버에 있을 수 있습니다. $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

1단계 - 방화벽 구성

패키지를 설치하기 전에 첫 번째 단계는 InfluxDB 및 Grafana를 위한 포트를 열기 위해 방화벽을 구성하는 것입니다.

방화벽 상태를 확인합니다.

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

상태: 활성

허용된 포트
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

InfluxDB를 위한 포트 8086과 Grafana 서버를 위한 포트 3000을 엽니다.

$ sudo ufw allow 8086
$ sudo ufw allow 3000

HTTP 및 HTTPS 포트를 허용합니다.

$ sudo ufw allow http
$ sudo ufw allow https

확인을 위해 상태를 다시 확인합니다.

$ sudo ufw status
상태: 활성

허용된 포트
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8086                       ALLOW       Anywhere
3000                       ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8086 (v6)                  ALLOW       Anywhere (v6)
3000 (v6)                  ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

2단계 - InfluxDB 설치

InfluxDB의 공식 저장소를 사용하여 설치합니다.

InfluxDB GPG 키를 다운로드합니다.

$ wget -q https://repos.influxdata.com/influxdata-archive_compat.key

GPG 키를 서버에 가져옵니다.

$ echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
influxdata-archive_compat.key: OK

InfluxDB 저장소를 가져옵니다.

$ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

시스템의 저장소 목록을 업데이트합니다.

$ sudo apt update

InfluxDB 1.8.x 또는 2.0.x를 설치할 수 있는 옵션이 있습니다. 그러나 최신 버전을 사용하는 것이 좋습니다. InfluxDB를 설치합니다.

$ sudo apt install influxdb2

InfluxDB 서비스를 시작합니다.

$ sudo systemctl start influxdb

서비스 상태를 확인합니다.

$ sudo systemctl status influxdb
? influxdb.service - InfluxDB는 오픈 소스 분산 시계열 데이터베이스입니다
     Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-01-02 02:39:41 UTC; 1s ago
       Docs: https://docs.influxdata.com/influxdb/
    Process: 5584 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=0/SUCCESS)
   Main PID: 5585 (influxd)
      Tasks: 8 (limit: 2299)
     Memory: 53.1M
        CPU: 735ms
     CGroup: /system.slice/influxdb.service
             ??5585 /usr/bin/influxd
............

3단계 - InfluxDB 데이터베이스 및 사용자 자격 증명 생성

Telegraf의 데이터를 저장하기 위해 Influx 데이터베이스와 사용자를 설정해야 합니다.

InfluxDB는 InfluxDB 서버와 상호 작용하기 위한 명령줄 도구인 influx를 제공합니다. influxmysql 명령줄 도구로 생각하십시오.

다음 명령을 실행하여 Influx의 초기 구성을 수행합니다.

$ influx setup
> InfluxDB 2.0에 오신 것을 환영합니다!
? 기본 사용자 이름을 입력하세요 navjot
? 비밀번호를 입력하세요 *************
? 비밀번호를 다시 입력하세요 *************
? 기본 조직 이름을 입력하세요 howtoforge
? 기본 버킷 이름을 입력하세요 tigstack
? 보존 기간을 시간 단위로 입력하세요, 무한을 위해 0 입력 360
? 이러한 매개변수로 설정하시겠습니까?
  사용자 이름:          navjot
  조직:      howtoforge
  버킷:            tigstack
  보존 기간:  360h0m0s
 예
사용자    조직    버킷
navjot  howtoforge      tigstack

초기 사용자 이름, 비밀번호, 조직 이름, 데이터를 저장할 기본 버킷 이름 및 해당 데이터의 보존 기간을 설정해야 합니다. 귀하의 세부정보는 /home/username/.influxdbv2/configs 파일에 저장됩니다.

브라우저에서 http://:8086/ URL을 열어 이 설정을 수행할 수도 있습니다. 초기 설정을 완료한 후 위에서 생성한 자격 증명으로 URL에 로그인할 수 있습니다.

InfluxDB 로그인 페이지

다음 대시보드가 표시되어야 합니다.

InfluxDB 대시보드

초기 설정 프로세스는 데이터베이스의 모든 조직에 대한 전체 읽기 및 쓰기 액세스 권한이 있는 기본 토큰을 생성합니다. 보안상의 이유로 연결하려는 조직 및 버킷에만 연결되는 새 토큰이 필요합니다.

새 토큰을 생성하려면 왼쪽 사이드바에서 다음 아이콘을 클릭하고 API 토큰 링크를 클릭하여 진행합니다.

API 토큰 페이지로 이동합니다. 여기에서 초기 구성 시 생성한 기본 토큰을 볼 수 있습니다.

InfluxDB 토큰 페이지

API 토큰 생성 버튼을 클릭하고 사용자 정의 API 토큰 옵션을 선택하여 새 오버레이 팝업을 시작합니다. 토큰에 이름을 지정하고(telegraf) 리소스 섹션을 확장하고 읽기쓰기 섹션 모두에서 생성한 기본 버킷을 선택합니다.

InfluxDB 토큰 생성

생성을 클릭하여 토큰 생성을 완료합니다. 클립보드에 복사 버튼을 클릭하여 토큰을 복사합니다. 버튼이 일부 경우에 작동하지 않을 수 있으므로 팝업을 닫기 전에 확인해야 합니다.

InfluxDB Telegraf 토큰 팝업

지금은 저장해 두세요. 나중에 필요할 것입니다.

이로써 InfluxDB의 설치 및 구성이 완료되었습니다. 다음으로 Telegraf를 설치해야 합니다.

4단계 - Telegraf 설치

Telegraf와 InfluxDB는 동일한 저장소를 공유합니다. 즉, Telegraf를 직접 설치할 수 있습니다.

$ sudo apt install telegraf

Telegraf의 서비스는 설치 중에 자동으로 활성화되고 시작됩니다.

Telegraf는 플러그인 기반 에이전트이며 4가지 유형의 플러그인이 있습니다:

  1. 입력 플러그인은 메트릭을 수집합니다.
  2. 프로세서 플러그인은 메트릭을 변환, 장식 및 필터링합니다.
  3. 집계 플러그인은 메트릭을 생성하고 집계합니다.
  4. 출력 플러그인은 메트릭이 전송되는 대상을 정의합니다. InfluxDB를 포함합니다.

Telegraf는 이러한 모든 플러그인에 대한 구성을 /etc/telegraf/telegraf.conf 파일에 저장합니다. 첫 번째 단계는 influxdb_v2 출력 플러그인을 활성화하여 Telegraf를 InfluxDB에 연결하는 것입니다. /etc/telegraf/telegraf.conf 파일을 열어 편집합니다.

$ sudo nano /etc/telegraf/telegraf.conf

[[outputs.influxdb_v2]] 줄을 찾아 앞의 #를 제거하여 주석을 해제합니다. 아래 코드를 다음과 같이 수정합니다.

# # InfluxDB 2.0에 메트릭을 전송하기 위한 구성
 [[outputs.influxdb_v2]]
#   ## InfluxDB 클러스터 노드의 URL.
#   ##
#   ## 단일 클러스터에 대해 여러 URL을 지정할 수 있으며, 각 간격마다 오직 하나의
#   ## URL만 기록됩니다.
#   ##   예: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"]
    urls = ["http://127.0.0.1:8086"]
#
#   ## 인증을 위한 토큰.
   token = "$INFLUX_TOKEN"
#
#   ## 작성하려는 조직의 이름입니다.
   organization = "howtoforge"
#
#   ## 작성할 대상 버킷입니다.
   bucket = "tigstack"

위 코드에서 $INFLUX_TOKEN 변수 대신 이전에 저장한 InfluxDB 토큰 값을 붙여넣습니다.

INPUT PLUGINS 줄을 찾아 기본적으로 활성화된 다음 입력 플러그인을 확인합니다.

# CPU 사용량에 대한 메트릭 읽기
[[inputs.cpu]]
  ## CPU 통계 보고 여부
  percpu = true
  ## 전체 시스템 CPU 통계 보고 여부
  totalcpu = true
  ## true인 경우 원시 CPU 시간 메트릭 수집
  collect_cpu_time = false
  ## true인 경우 모든 비유휴 CPU 상태의 합계를 계산하고 보고
  report_active = false
  ## true이고 정보가 사용 가능하면 core_id 및 physical_id 태그 추가
  core_tags = false


# 마운트 포인트별 디스크 사용량에 대한 메트릭 읽기
[[inputs.disk]]
  ## 기본적으로 모든 마운트 포인트에 대한 통계가 수집됩니다.
  ## mount_points를 설정하면 지정된 마운트 포인트로만 통계를 제한합니다.
  # mount_points = ["/" ]

  ## 파일 시스템 유형별로 마운트 포인트 무시.
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

  ## 마운트 옵션별로 마운트 포인트 무시.
  ## 'mount' 명령은 괄호 안에 모든 마운트의 옵션을 보고합니다.
  ## 바인드 마운트는 특수한 'bind' 옵션으로 무시할 수 있습니다.
  # ignore_mount_opts = []


# 장치별 디스크 IO에 대한 메트릭 읽기
[[inputs.diskio]]
....
....

# /proc/stat에서 커널 통계 가져오기
[[inputs.kernel]]
  # 구성 없음


# 메모리 사용량에 대한 메트릭 읽기
[[inputs.mem]]
  # 구성 없음
  
# 프로세스 수를 가져오고 상태별로 그룹화
[[inputs.processes]]
  # 구성 없음


# 스왑 메모리 사용량에 대한 메트릭 읽기
[[inputs.swap]]
  # 구성 없음


# 시스템 부하 및 가동 시간에 대한 메트릭 읽기
[[inputs.system]]
  # 구성 없음

Apache 서버, Docker 컨테이너, Elasticsearch, iptables 방화벽, Kubernetes, Memcached, MongoDB, MySQL, Nginx, PHP-fpm, Postfix, RabbitMQ, Redis, Varnish, Wireguard, PostgreSQL 등과 같은 요구 사항에 따라 추가 입력 플러그인을 구성할 수 있습니다.

작업이 끝나면 Ctrl + X를 눌러 파일을 저장하고 프롬프트가 나타나면 Y를 입력합니다.

변경 사항을 적용한 후 Telegraf 서비스를 다시 시작합니다.

$ sudo systemctl restart telegraf

5단계 - Telegraf 통계가 InfluxDB에 저장되는지 확인

더 진행하기 전에 Telegraf 통계가 올바르게 수집되어 InfluxDB에 공급되는지 확인해야 합니다. 브라우저에서 InfluxDB UI를 열고 왼쪽 사이드바에서 두 번째 아이콘을 클릭한 다음 버킷 메뉴를 선택합니다.

InfluxDB 버킷 페이지

tigstack을 클릭하면 다음 페이지가 표시되어야 합니다.

InfluxDB 데이터 탐색기

버킷 이름을 클릭한 다음 _measurement 필터에서 하나의 값을 클릭하고 다른 값이 나타날 때마다 계속 클릭합니다. 완료되면 제출 버튼을 클릭합니다. 상단에 그래프가 표시되어야 합니다. 데이터가 나타나려면 잠시 기다려야 할 수 있습니다. 지난 1시간에서 지난 5분으로 시간 간격을 변경하여 넓은 영역에 대한 그래프를 생성했습니다.

InfluxDB 데이터 그래프

이것은 데이터가 올바르게 전달되고 있음을 확인해야 합니다.

6단계 - Grafana 설치

Grafana의 공식 저장소를 사용하여 설치합니다. Grafana GPG 키를 가져옵니다.

$ sudo mkdir -p /etc/apt/keyrings/
$ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

저장소를 시스템에 추가합니다.

$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Grafana 베타를 설치하려면 대신 다음 저장소를 추가합니다.

$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

시스템 저장소 목록을 업데이트합니다.

$ sudo apt update

Grafana를 설치합니다.

$ sudo apt install grafana

Grafana 서비스를 시작하고 활성화합니다.

$ sudo systemctl enable grafana-server --now

서비스 상태를 확인합니다.

$ sudo systemctl status grafana-server
? grafana-server.service - Grafana 인스턴스
     Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-01-02 03:48:01 UTC; 3s ago
       Docs: http://docs.grafana.org
   Main PID: 8769 (grafana)
      Tasks: 7 (limit: 2299)
     Memory: 42.6M
        CPU: 1.804s
     CGroup: /system.slice/grafana-server.service
             ??8769 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana cfg:default.paths...
.......

7단계 - Grafana 데이터 소스 설정

브라우저에서 http://:3000 URL을 열면 다음 Grafana 로그인 페이지가 표시되어야 합니다.

Grafana 로그인 페이지

기본 사용자 이름 admin과 비밀번호 admin으로 로그인합니다. 다음으로 새 기본 비밀번호를 설정해야 합니다.

Grafana 새 비밀번호

다음 Grafana 홈페이지가 표시됩니다. 첫 번째 데이터 소스 추가 버튼을 클릭합니다.

Grafana 대시보드

InfluxDB 버튼을 클릭합니다.

Grafana에서 데이터 소스 추가

다음 페이지에서 쿼리 언어로 드롭다운 메뉴에서 Flux를 선택합니다. InfluxQL을 쿼리 언어로 사용할 수 있지만 기본적으로 InfluxDB v1.x만 지원하므로 구성하기가 더 복잡합니다. Flux는 InfluxDB v2.x를 지원하며 설정 및 구성이 더 쉽습니다.

Grafana 쿼리 언어 선택기

다음 값을 입력합니다.

URL: http://localhost:8086 기본 인증 세부정보 사용자: navjot 비밀번호:

InfluxDB 세부정보 조직: howtoforge 토큰: 기본 버킷: tigstack

Grafana InfluxDB 세부정보

저장 및 테스트 버튼을 클릭하면 설정이 성공적으로 완료되었다는 확인 메시지가 표시됩니다.

Grafana 세부정보 저장

8단계 - Grafana 대시보드 설정

다음 단계는 Grafana 대시보드를 설정하는 것입니다. 왼쪽의 햄버거 메뉴를 클릭하고 대시보드를 클릭하여 대시보드 생성 화면을 엽니다.

Grafana 대시보드 메뉴 항목

대시보드 생성 버튼을 클릭하여 진행합니다.

Grafana 대시보드 생성 페이지

다음 페이지에서 시각화 추가 버튼을 클릭하여 오버레이를 시작하고 influxdb-1을 데이터 소스로 선택합니다.

Grafana 데이터 소스 선택

다음 패널 편집 페이지로 이동합니다.

Grafana 새 대시보드 패널

쿼리 편집기에 다음 코드를 붙여넣습니다.

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")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
  |> toFloat()
  |> yield(name: "mean")

위에서 사용한 버킷 이름과 /etc/hostname 파일에서 가져올 수 있는 호스트 이름을 사용합니다.

위 코드는 CPU 사용량을 계산하고 이를 위한 그래프를 생성합니다. 패널에 제목을 지정합니다.

Grafana 편집 패널 쿼리

쿼리 검사기 버튼을 클릭한 다음 새로 고침 버튼을 클릭하여 쿼리가 성공적으로 작동하는지 확인합니다. 검사기를 닫으려면 X 아이콘을 클릭합니다.

Grafana 쿼리 검사기 결과

섹션의 오른쪽에 있는 레이블 필드를 사용하여 축 이름을 지정할 수도 있습니다.

Grafana 축 레이블 필드

패널을 저장하려면 적용 버튼을 클릭합니다. 완료되면 대시보드 저장 버튼을 클릭합니다.

Grafana 대시보드 저장

대시보드에 이름을 지정하고 저장을 클릭하여 완료합니다.

Grafana 대시보드 저장 팝업

대시보드가 열리고 시각화 추가 버튼을 클릭하여 다른 패널을 생성합니다.

Grafana 새 시각화 패널 페이지

다음 프로세스를 반복하여 RAM 사용량에 대한 다른 패널을 생성합니다.

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

HDD 사용량을 표시하기 위해 다음 코드를 사용합니다.

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"] == "/")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value / 1000000.0 }))
  |> toFloat()  
  |> yield(name: "mean")

패널을 무제한으로 생성할 수 있습니다.

위 코드는 Flux 스크립팅 언어를 기반으로 합니다. 다행히도 쿼리를 작성하기 위해 언어를 배울 필요는 없습니다. InfluxDB URL에서 쿼리를 생성할 수 있습니다. 언어를 배우면 쿼리 최적화에 도움이 될 수 있습니다.

InfluxDB 대시보드로 돌아가서 탐색 페이지를 열어 쿼리를 가져와야 합니다.

버킷 이름을 클릭한 다음 _measurement 필터에서 하나의 값을 클릭하고 다른 값이 나타날 때마다 계속 클릭합니다. 완료되면 스크립트 편집기 버튼을 클릭하면 다음 페이지가 표시됩니다. 그래프도 업데이트되어야 합니다.

Grafana 탐색 쿼리 페이지

InfluxDB 스크립트 편집기

표시된 쿼리를 복사하여 이제 Grafana 대시보드에서 그래프를 구축하는 데 사용할 수 있습니다.

9단계 - 알림 및 통지 구성

모니터를 설정하는 주요 용도는 값이 특정 임계값을 초과할 때 제때 알림을 받는 것입니다.

첫 번째 단계는 알림을 받을 대상을 설정하는 것입니다. 이메일, Slack, Kafka, Google Hangouts Chat, Microsoft Teams, Telegram 등을 통해 알림을 받을 수 있습니다.

이 튜토리얼에서는 이메일 알림을 활성화합니다. 이메일 알림을 설정하려면 먼저 SMTP 서비스를 구성해야 합니다. /etc/grafana/grafana.ini 파일을 열어 SMTP를 구성합니다.

$ sudo nano /etc/grafana/grafana.ini

파일에서 [smtp]라는 줄을 찾습니다. 다음 줄의 주석을 제거하고 사용자 지정 SMTP 서버의 값을 입력합니다.

[smtp]
enabled = true
host = email-smtp.us-west-2.amazonaws.com:587
user = YOURUSERNAME
# 비밀번호에 # 또는 ;가 포함된 경우 세 개의 따옴표로 묶어야 합니다. Ex """#password;"""
password = YOURUSERPASSWORD
;cert_file =
;key_file =
;skip_verify = false
from_address = [email protected]
from_name = HowtoForge Grafana
# SMTP 대화에서 EHLO ID(기본값은 instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS 정책(기본값은 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS

프롬프트가 나타나면 Ctrl + X를 눌러 파일을 저장하고 Y를 입력합니다.

설정을 적용하려면 Grafana 서버를 다시 시작합니다.

$ sudo systemctl restart grafana-server

Grafana 페이지를 열고 알림 아이콘을 클릭한 다음 연락처 포인트를 클릭합니다.

Grafana 연락처 포인트 팝업

Grafana는 자동으로 기본 이메일 연락처 포인트를 생성하고 설정합니다. 올바른 이메일 주소로 구성해야 합니다. grafana-default-email 연락처 포인트에서 편집 버튼을 클릭합니다.

Grafana 연락처 포인트 편집

이메일 알림 채널을 설정하기 위해 세부정보를 입력합니다.

Grafana 이메일 알림 연락처 포인트

추가 메시지를 보내고 싶다면 선택적 이메일 설정 링크를 클릭하고 메시지를 입력합니다.

Grafana 선택적 이메일 설정

테스트를 클릭하여 팝업을 열고 테스트 알림 보내기 버튼을 클릭하여 이메일 설정이 작동하는지 확인합니다. 완료되면 연락처 포인트 저장을 클릭합니다.

설정이 확인되었다는 이메일을 받아야 합니다.

Grafana 테스트 이메일

이제 알림 채널을 설정했으므로 이러한 이메일을 받을 시점을 설정해야 합니다. 알림을 설정하려면 대시보드 패널로 돌아가야 합니다.

대시보드 화면으로 돌아갑니다. 방금 생성한 대시보드를 클릭하면 다양한 패널이 있는 홈페이지가 표시됩니다. 패널을 편집하려면 패널 이름을 클릭하고 드롭다운 메뉴가 나타납니다. 편집 링크를 클릭하여 진행합니다.

Grafana 대시보드 편집 패널

알림 패널을 클릭하고 새 알림 규칙 버튼을 클릭하여 새 알림을 설정합니다. CPU 사용량 패널에 대한 알림을 생성하고 있습니다.

Grafana 새 알림 규칙 생성 버튼

이제 Grafana가 알림을 보낼 조건을 구성할 수 있습니다. 옵션 링크 드롭다운 메뉴를 클릭하고 기본 시간 범위(지금-6시간에서 지금)로 변경하여 지난 15분으로 설정합니다. 즉, 15분 전부터 지금까지 확인합니다.

Grafana 알림 시간 범위 편집

기본적으로 선택된 알림 유형은 Grafana 관리 알림입니다. 기본적으로 두 개의 표현식이 선택되어 있습니다. 쓰레기통 버튼을 눌러 삭제합니다. 표현식 추가 드롭다운을 선택하고 고전적 조건을 표현식 유형으로 선택합니다.

Grafana 알림 표현식 유형 추가

Grafana 알림 표현식

알림 조건으로 설정을 클릭하여 알림을 보내기 위해 선택한 표현식을 선택합니다. 그렇게 하면 표현식 상자가 아래와 같이 변경됩니다.

Grafana 표현식 알림 조건

조건

Grafana는 알림을 시작할 시점을 결정하기 위해 다음 형식의 쿼리에서 작동합니다.

avg() OF query(A) IS ABOVE 0.8
  • avg()는 각 시리즈의 값을 임계값에 대해 비교 가능한 값으로 줄이는 방법을 제어합니다. 다른 함수(avg(), min(), max(), sum(), count() 등)를 선택하려면 함수 이름을 클릭할 수 있습니다.

  • query(A) 괄호 안의 문자는 메트릭 탭에서 실행할 쿼리를 정의합니다.

  • IS BELOW 14 임계값 유형 및 임계값 값을 정의합니다. IS BELOW를 클릭하여 다른 임계값 유형을 선택할 수 있습니다.

아래에 두 번째 조건을 추가할 수 있습니다. 현재 여러 조건 사이에 ANDOR 연산자만 사용할 수 있습니다.

다음으로 평가 동작을 설정합니다. 새 폴더 버튼을 클릭하여 규칙을 저장할 폴더를 생성합니다. 새 평가 그룹 버튼을 클릭하여 동일한 시간 간격 후에 평가될 규칙을 그룹화합니다. 그룹을 생성할 때 시간 간격을 5분으로 설정합니다.

Grafana 알림 평가 그룹

완료되면 페이지는 다음과 같아야 합니다. 실행 오류 또는 시간 초과 시 알림 상태알림 중으로 설정합니다.

Grafana 알림 평가 동작

규칙

  • 이름 - 알림에 대한 설명적인 이름을 입력합니다.
  • 폴더 - 알림 규칙을 저장할 기존 폴더를 생성하거나 선택합니다.
  • 그룹 - 알림 그룹의 이름을 입력합니다. 단일 그룹의 알림은 동일한 시간 간격 후에 평가됩니다.
  • 보류 중 - Grafana가 알림을 평가해야 하는 빈도를 지정합니다. 평가 간격이라고도 합니다. 여기에서 원하는 값을 설정할 수 있습니다.

데이터 없음 및 오류 처리

데이터가 없거나 null 값만 반환하는 쿼리를 Grafana가 처리하는 방법을 다음 조건을 사용하여 구성할 수 있습니다:

  1. 데이터 없음 - 규칙 상태를 NoData로 설정합니다.
  2. 알림 중 - 규칙 상태를 알림 중으로 설정합니다.
  3. 확인 - 알림 규칙 상태를 확인으로 설정합니다. 문제가 없더라도 알림을 받을 수 있습니다.

실행 또는 시간 초과 오류를 처리하는 방법을 Grafana에 지시할 수 있습니다.

  1. 알림 중 - 규칙 상태를 알림 중으로 설정합니다.
  2. 확인 - 알림 규칙 상태를 확인으로 설정합니다. 문제가 없더라도 알림을 받을 수 있습니다.
  3. 오류 - 규칙 상태를 오류로 설정하여 문제가 있음을 나타냅니다.

완료되면 알림 미리보기 버튼을 클릭하여 모든 것이 잘 작동하는지 확인합니다. 규칙 저장 및 종료 버튼을 클릭하여 알림 추가를 완료합니다. 이제 이메일로 알림을 받기 시작해야 합니다. 다음은 그런 이메일의 예입니다.

Grafana CPU 사용량 이메일

10단계 - Nginx 설치

Debian 12는 이전 버전의 Nginx를 제공합니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginx 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginx의 메인라인 버전을 위한 저장소를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

시스템 저장소를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인합니다. Debian 시스템에서는 다음 명령이 sudo와 함께만 작동합니다.

$ sudo nginx -v
nginx version: nginx/1.25.3

Nginx 서버를 시작합니다.

$ sudo systemctl start nginx

서비스 상태를 확인합니다.

$ sudo systemctl status nginx
? nginx.service - nginx - 고성능 웹 서버
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-01-02 09:21:10 UTC; 5s ago
       Docs: https://nginx.org/en/docs/
    Process: 12964 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 12965 (nginx)
      Tasks: 3 (limit: 2299)
     Memory: 2.9M
        CPU: 86ms
     CGroup: /system.slice/nginx.service
             ??12965 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??12966 "nginx: worker process"
             ??12967 "nginx: worker process"

Jan 02 09:21:10 grafana systemd[1]: Starting nginx.service - nginx - high performance web server...
Jan 02 09:21:10 grafana systemd[1]: Started nginx.service - nginx - high performance web server.

11단계 - SSL 설치

SSL 인증서를 생성하기 위해 Certbot을 설치해야 합니다. Debian의 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Debian 12는 Snapd가 설치되어 있지 않습니다. Snapd 패키지를 설치합니다.

$ sudo apt install snapd

다음 명령을 실행하여 Snapd 버전이 최신인지 확인합니다.

$ sudo snap install core && sudo snap refresh core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

Certbot 명령이 /usr/bin 디렉토리에서 실행될 수 있도록 심볼릭 링크를 생성하는 명령을 사용합니다.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbot이 제대로 작동하는지 확인합니다.

$ certbot --version
certbot 2.8.0

다음 명령을 실행하여 SSL 인증서를 생성합니다.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d grafana.example.com

위 명령은 서버의 /etc/letsencrypt/live/grafana.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Certbot 갱신 스케줄러 서비스 확인합니다.

$ systemctl list-timers

스케줄된 서비스 중 하나로 snap.certbot.renew.service를 찾을 수 있습니다.

NEXT                        LEFT        LAST                        PASSED    UNIT                         ACTIVATES
-----------------------------------------------------------------------------------------------------------------------------------------
Tue 2024-01-02 15:24:52 UTC 6h left     Mon 2024-01-01 15:24:52 UTC 17h ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Tue 2024-01-02 20:05:29 UTC 10h left    Tue 2024-01-02 09:02:47 UTC 21min ago apt-daily.timer              apt-daily.service
Tue 2024-01-02 20:35:00 UTC 11h left    -                           -         snap.certbot.renew.timer     snap.certbot.renew.service

SSL 갱신이 잘 작동하는지 확인하기 위해 프로세스를 드라이 런합니다.

$ sudo certbot renew --dry-run

오류가 없으면 모든 준비가 완료된 것입니다. 인증서는 자동으로 갱신됩니다.

12단계 - Grafana 및 InfluxDB를 위한 Nginx 구성

/etc/nginx/nginx.conf 파일을 열어 편집합니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size 64;

프롬프트가 나타나면 Ctrl + X를 눌러 파일을 저장하고 Y를 입력합니다.

/etc/nginx/conf.d/grafana.conf 파일을 생성하고 열어 편집합니다.

$ sudo nano /etc/nginx/conf.d/grafana.conf

다음 코드를 붙여넣습니다. grafana.example.com을 도메인 이름으로 바꿉니다.

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {

    listen 443 ssl reuseport;
    listen [::]:443 ssl reuseport;

    http2 on;

    server_name grafana.example.com;

    access_log  /var/log/nginx/grafana.access.log;
    error_log   /var/log/nginx/grafana.error.log;

    ssl_certificate      /etc/letsencrypt/live/grafana.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/grafana.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/grafana.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] valid=60s;
    resolver_timeout 2s;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:3000;
    }

    location /api/live {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:3000;
    }

    location /influxdb/ {
      access_log /var/log/nginx/influx.access.log;
        error_log /var/log/nginx/influx.error.log;
        rewrite ^/influxdb$ /influxdb/ permanent;
        rewrite ^/influxdb/(.*)$ /$1 break;
        proxy_cookie_path ~*^/api /influxdb/api;
        proxy_connect_timeout 600s;
        proxy_http_version 1.1;
        proxy_pass http://localhost:8086;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
        proxy_set_header Authorization $http_authorization;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        sub_filter '' '';
        sub_filter 'src="/' 'src="/influxdb/';
        sub_filter 'href="/' 'href="/influxdb/';
        sub_filter 'data-basepath="' 'data-basepath="/influxdb/';
        sub_filter 'n.p="/' 'n.p="/influxdb/';
        sub_filter 'o.p="/' 'o.p="/influxdb/';
        sub_filter '/api/' '/influxdb/api/';
        sub_filter 'api/v2/query' 'influxdb/api/v2/query';
        sub_filter '/health`' '/influxdb/health`';
        sub_filter_types text/css text/javascript application/javascript application/json;
        sub_filter_once off;
    }
}
# HTTPS 강제 적용
server {
    listen 80;
    listen [::]:80;
    server_name grafana.example.com;
    return 301 https://$host$request_uri;
}

프롬프트가 나타나면 Ctrl + X를 눌러 파일을 저장하고 Y를 입력합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t

Nginx 서버를 다시 시작합니다.

$ sudo systemctl restart nginx

Telegraf를 위한 HTTPS 구성

/etc/telegraf/telegraf.conf 파일을 열어 편집합니다.

$ sudo nano /etc/telegraf/telegraf.conf

[[outputs.influxdb_v2]] 섹션을 찾아 URL 값을 https://grafana.nspeaks.com/influxdb로 변경하여 InfluxDB와 Telegraf 간의 데이터가 안전하게 전송되도록 합니다.

urls = ["https://grafana.example.com/influxdb"]

프롬프트가 나타나면 Ctrl + X를 눌러 파일을 저장하고 Y를 입력합니다.

Telegraf 서비스를 다시 시작합니다.

$ sudo systemctl restart telegraf

Grafana를 위한 HTTPS 구성

다음으로 Grafana를 HTTPS 액세스를 위해 구성해야 합니다. /etc/grafana/grafana.ini 파일을 열어 편집합니다.

$ sudo nano /etc/grafana/grafana.ini

[server] 섹션을 찾아 domain 변수와 root_url을 다음과 같이 변경합니다.

# 브라우저에서 Grafana에 액세스하는 데 사용되는 공개 도메인 이름
;domain = localhost
domain = grafana.example.com

# 호스트 헤더가 도메인과 일치하지 않을 경우 올바른 도메인으로 리디렉션
# DNS 재바인딩 공격 방지
;enforce_domain = true

# 브라우저에서 사용하는 전체 공개 URL, 리디렉션 및 이메일에 사용됨
# 리버스 프록시 및 하위 경로를 사용하는 경우 전체 URL 지정(하위 경로 포함)
;root_url = %(protocol)s://%(domain)s:%(http_port)s/
root_url = %(protocol)s://%(domain)s

프롬프트가 나타나면 Ctrl + X를 눌러 파일을 저장하고 Y를 입력합니다.

Grafana 서버를 다시 시작합니다.

$ sudo systemctl restart grafana-server

InfluxDB 및 Grafana의 방화벽 포트 닫기

InfluxDB 및 Grafana 포트를 닫아야 합니다.

$ sudo ufw delete allow 8086
$ sudo ufw delete allow 3000

Grafana는 https://grafana.example.com에서 액세스할 수 있어야 하며 InfluxDB UI 및 API는 모두 https://grafana.example.com/influxdb URL에서 액세스할 수 있어야 합니다.

결론

이로써 Debian 12 서버에 TIG 스택을 설치하고 구성하는 튜토리얼이 종료됩니다. 질문이 있는 경우 아래 댓글에 남겨주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.