Telegraf로 Consul 데이터센터 상태 모니터링

Telegraf로 Consul 데이터센터 상태 모니터링 (Monitor Consul Datacenter Health with Telegraf)

이 페이지는 Telegraf를 설정해 Consul 데이터센터 텔레메트리를 모니터링하는 과정을 설명해요. Consul이 제공하는 다양한 메트릭을 수집하고 데이터센터의 상태와 안정성을 측정할 수 있어요.

출처: 문서

본문

이 페이지는 Telegraf를 설정해 Consul 데이터센터 텔레메트리를 모니터링하는 과정을 설명해요.

소개 (Introduction)

Consul은 운영자가 데이터센터의 상태와 안정성을 측정하고 잠재적 문제를 진단하거나 예측할 수 있도록 다양한 형식의 메트릭을 제공해요.

한 가지 모니터링 솔루션은 Consul이 지원하는 StatsD 프로토콜과 함께 Telegraf Consul 플러그인을 사용하는 것이에요. 또한 Grafana를 사용해 수집한 데이터를 구성하고 쿼리할 수 있어요.

Consul 에이전트 메트릭의 전체 목록은 텔레메트리 문서를 참고해요.

워크플로 (Workflow)

  1. Telegraf가 StatsD 및 호스트 수준 메트릭을 수집하도록 구성
  2. Consul이 메트릭을 Telegraf로 보내도록 구성
  3. Consul 메트릭 검토

Telegraf 구성 (Configure Telegraf)

Telegraf는 StatsD 에이전트로 동작하며 Consul 에이전트가 실행되는 호스트에 대한 추가 메트릭을 수집할 수 있어요.

Telegraf에는 CPU 사용량, 메모리 사용량, 디스크 I/O, 네트워킹, 프로세스 상태 같은 데이터를 수집하는 입력 플러그인이 포함되어 있어요. 다음 예시는 일반적인 Consul 데이터센터 문제를 디버깅하도록 구성된 telegraf.conf 파일을 사용해요.

telegraf.conf:

[global_tags]
  role = "consul-server"
  datacenter = "us-east-1"

[agent]
  interval = "10s"
  flush_interval = "10s"
  omit_hostname = false

[[inputs.statsd]]
  protocol = "udp"
  service_address = ":8125"
  delete_gauges = true
  delete_counters = true
  delete_sets = true
  delete_timings = true
  percentiles = [90]
  metric_separator = "_"
  parse_data_dog_tags = true
  allowed_pending_messages = 10000
  percentile_limit = 1000

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false

[[inputs.disk]]
  # mount_points = ["/"]
  # ignore_fs = ["tmpfs", "devtmpfs"]

[[inputs.diskio]]
  # devices = ["sda", "sdb"]
  # skip_serial_number = false

[[inputs.kernel]]
  # no configuration

[[inputs.linux_sysctl_fs]]
  # no configuration

[[inputs.mem]]
  # no configuration

[[inputs.net]]
  interfaces = ["eth*"]

[[inputs.netstat]]
  # no configuration

[[inputs.processes]]
  # no configuration

[[inputs.swap]]
  # no configuration

[[inputs.system]]
  # no configuration

[[inputs.procstat]]
  pattern = "(consul)"

[[inputs.consul]]
  address = "localhost:8500"
  scheme = "http"

telegraf.conf 파일은 역할과 데이터센터 변수를 설정하는 전역 태그 옵션으로 시작해요. 또한 agent 섹션은 기본 수집 간격을 10초로 설정하고 Telegraf가 각 메트릭에 호스트네임 태그 host를 생략하지 않도록 지시해요.

Telegraf는 통과하는 메트릭에 추가 태그를 설정할 수도 있어요. 이 구성은 서버 역할 consul-server와 데이터센터 us-east-1에 대한 태그를 추가해요. Grafana에서 이러한 태그를 사용해 쿼리를 필터링할 수 있어요.

telegraf.conf의 다음 섹션은 UDP 포트 8125에 StatsD 리스너를 설정하고 백분위 수 메트릭을 계산하며 DogStatsD 호환 태그를 파싱하도록 지시해요. Consul은 이 데이터를 사용해 텔레메트리 통계를 보고해요. 이러한 사양에 대한 자세한 내용은 Telegraf에서 사용 가능한 StatsD 관련 옵션에 대한 전체 참조 문서를 참고해요.

파일의 다음 섹션은 CPU, 메모리, 네트워크 I/O, 디스크 I/O 데이터를 수집하기 위한 입력을 구성해요.

inputs.net에서 interfaces가 시스템 인터페이스 이름과 일치하는지 확인하는 것이 중요해요. 대부분의 Linux 시스템은 eth0이나 enp0s0 같은 이름을 사용하지만 시스템에서 유효한 인터페이스 이름을 선택할 수 있어요. 목록은 glob 패턴을 지원하므로 eth*는 eth로 시작하는 모든 인터페이스와 일치해요.

이 구성에는 주어진 패턴에 따라 프로세스에 대한 메트릭을 보고하는 procstat Telegraf 플러그인도 포함돼요. 이 경우 Consul 에이전트 프로세스 자체를 모니터링하는 데 사용해요.

마지막으로 이 구성에는 Consul API를 사용해 데이터를 쿼리해 Consul 에이전트와 관련된 헬스 체크를 모니터링하는 플러그인이 포함돼요.

telegraf.conf 파일을 편집한 후에는 Telegraf 인스턴스에 구성을 적용하도록 Telegraf 에이전트를 리로드해야 해요.

Consul 구성 (Configure Consul)

Telegraf로 텔레메트리를 보내려면 Consul 서버 또는 클라이언트 에이전트 구성에 telemetry 섹션을 추가해요. StatsD 데몬 주소의 호스트네임과 포트를 포함해요:

HCL:

telemetry {
  dogstatsd_addr = "localhost:8125"
  disable_hostname = true
}

JSON:

{
  "telemetry": {
    "dogstatsd_addr": "localhost:8125",
    "disable_hostname": true
  }
}

이 구성은 일반 StatsD 대신 DogStatsD 형식을 지정해요. 결과적으로 Consul은 각 메트릭과 함께 태그를 보내요. Grafana를 사용해 이러한 태그에 따라 대시보드에서 데이터를 필터링할 수 있어요. 예를 들어 role=consul-server로 필터링해 서버 에이전트 데이터를 표시할 수 있어요. Telegraf는 DogStatsD 형식과 호환되며 자신만의 태그를 추가할 수도 있어요.

disable_hostname 옵션은 Consul이 StatsD로 보내는 메트릭 이름에 호스트네임을 삽입하지 않도록 지시해요. 예를 들어 disable_hostname이 false로 설정되면 consul.raft.apply는 consul.<HOSTNAME>.raft.apply가 돼요. 자세한 내용은 Consul 텔레메트리 구성 참조를 참고해요. telegraf.conf가 이미 호스트네임을 태그로 삽입하므로 이 구성을 포함해요. 메트릭 이름의 일부로 호스트네임을 설정해야 한다면 이 매개변수를 false로 설정해요.

Consul 메트릭 검토 (Review Consul metrics)

Grafana나 Chronograf 같은 도구를 사용해 Telegraf의 메트릭을 시각화할 수 있어요.

모니터링해야 할 중요한 메트릭은 다음과 같아요:

메모리 사용량 메트릭 (Memory usage metrics)

메트릭 이름 설명
mem.total 서버에서 사용 가능한 물리적 메모리(RAM)의 총량
mem.used_percent 사용 중인 물리적 메모리의 백분율
swap.used_percent 사용 중인 스왑 공간의 백분율

중요한 이유: Consul은 모든 데이터를 메모리에 보관해요. Consul이 사용 가능한 메모리를 모두 소비하면 충돌해요. 다른 프로세스에 사용할 RAM이 남도록 총 사용 가능한 RAM도 모니터링해야 해요. 최상의 성능을 위해 스왑 사용량은 0%로 유지해야 해요.

조치 시점: mem.used_percent가 90%를 초과하거나 swap.used_percent가 0보다 크면 조치를 취해요.

파일 디스크립터 메트릭 (File descriptor metrics)

메트릭 이름 설명
linux_sysctl_fs.file-nr 호스트의 모든 프로세스에서 사용 중인 파일 핸들 수
linux_sysctl_fs.file-max 사용 가능한 총 파일 핸들 수

중요한 이유: Consul이 하는 거의 모든 작업(다른 호스트에서 연결 수신, 서버 간 데이터 전송, 스냅샷을 디스크에 쓰기 등)은 파일 디스크립터 핸들이 필요해요. 핸들이 부족하면 Consul은 연결 수락을 중지해요. 자세한 내용은 Consul FAQ를 참고해요.

기본적으로 프로세스 및 커널 제한은 상당히 보수적이에요. 기본값 이상으로 이러한 제한을 늘릴 것을 권장해요.

조치 시점: file-nr이 file-max의 80%를 초과하면 조치를 취해요.

CPU 사용량 메트릭 (CPU usage metrics)

메트릭 이름 설명
cpu.user_cpu Consul을 포함한 사용자 프로세스가 사용하는 CPU의 백분율
cpu.iowait_cpu I/O 작업 완료를 기다리며 소비한 CPU 시간의 백분율

중요한 이유: 정상적인 상황에서 Consul은 CPU 시간을 특히 많이 요구하지 않아요. CPU 사용량의 급증은 너무 많은 작업이 동시에 발생하고 있음을 나타낼 수 있어요. iowait_cpu는 특히 주시해야 할 지표인데, Consul이 데이터가 디스크에 기록되기를 기다리고 있음을 의미하기 때문이에요. 이는 Raft가 스냅샷을 디스크에 너무 자주 쓰고 있다는 신호일 수 있어요.

조치 시점: cpu.iowait_cpu가 10%보다 크면 조치를 취해요.

네트워크 활동 메트릭 (Network activity metrics)

메트릭 이름 설명
net.bytes_recv 각 네트워크 인터페이스에서 수신한 바이트
net.bytes_sent 각 네트워크 인터페이스에서 전송한 바이트

중요한 이유: Consul로의 네트워크 트래픽의 갑작스러운 급증은 잘못 구성된 애플리케이션 클라이언트가 Consul에 너무 많은 요청을 보내는 결과일 수 있어요. 이 데이터의 출처는 Consul이 아닌 시스템 자체예요. net 메트릭은 카운터이므로 초당 바이트 같은 비율을 계산하려면 non_negative_difference 같은 함수를 적용해야 한다는 점을 유의해요.

조치 시점: 기준선에서 50% 이상 벗어난 net 메트릭의 갑작스러운 큰 변화가 있으면 조치를 취해요.

디스크 활동 메트릭 (Disk activity metrics)

메트릭 이름 설명
diskio.read_bytes 각 블록 디바이스에서 읽은 바이트
diskio.write_bytes 각 블록 디바이스에 쓴 바이트

중요한 이유: 대용량 워크로드를 실행하면 Consul 호스트가 디스크에 많은 데이터를 써요. diskio 메트릭은 카운터이므로 초당 바이트 같은 비율을 계산하려면 non_negative_difference 같은 함수를 적용해야 해요.

리더 선거가 발생할 때 빈번한 큰 I/O 급증이 있을 수 있어요. 이는 과부하 상태에서 Consul이 Raft 스냅샷을 디스크에 자주 체크포인트하기 때문에 발생해요. 프로덕션에서 debug/trace 로깅을 활성화하면 발생할 수도 있으며, 이는 성능에 영향을 줄 수 있어요.

과도한 디스크 I/O는 커널이 모든 시간을 I/O 완료를 기다리는 데 소비하므로 시스템의 나머지 부분을 느려지게 하거나 사용 불가능하게 만들 수 있어요.

조치 시점: 기준선에서 50% 이상 또는 3 표준편차 이상 벗어난 diskio 메트릭의 갑작스러운 큰 변화가 있으면 조치를 취해요.

다음 단계 (Next steps)

Consul의 에이전트 텔레메트리에 대한 자세한 내용은 Consul 에이전트 텔레메트리와 Consul 데이터플레인 텔레메트리를 참고해요.

Consul 에이전트가 생성하는 모니터링, 경보, 로깅 데이터에 대해 더 알아보려면 Consul 모니터링을 참고해요.

더 알아보기 (Learn more)