HashiCorp 진단 도구 hcdiag로 Consul 문제 해결

HashiCorp 진단 도구 hcdiag로 Consul 문제 해결

이 페이지는 HashiCorp Diagnostics 도구 hcdiag를 사용해 Consul 운영을 문제 해결하는 과정을 설명해요. hcdiag는 Consul, Nomad, Vault, TFE 서버 환경에서 중요한 데이터를 수집하고 보관하는 데 사용할 수 있는 문제 해결용 데이터 수집 도구랍니다.

출처: 문서

본문

이 페이지는 HashiCorp Diagnostics 도구 hcdiag를 사용해 Consul 운영을 문제 해결하는 과정을 설명합니다.

개요 (Overview)

HashiCorp Diagnostics — hcdiag — 은 Consul, Nomad, Vault, TFE 서버 환경에서 중요한 데이터를 수집하고 보관하는 데 사용할 수 있는 문제 해결용 데이터 수집 도구입니다. hcdiag가 수집하는 정보는 인시던트 대응과 문제 해결 중에 팀과 공유하기에 적합합니다.

이 튜토리얼에서 다음을 수행합니다.

  • Ubuntu Docker 컨테이너 안에서 Consul 서버를 "dev" 모드로 실행
  • 공식 HashiCorp Ubuntu 패키지 리포지토리에서 hcdiag 설치
  • 이 Consul 서비스에 대해 기본 hcdiag 명령 실행
  • hcdiag 도구가 만든 파일의 내용 탐색
  • 추가 hcdiag 기능과 hcdiag에서 사용자 지정 구성 파일 사용법 알아보기

사전 요구 사항 (Prerequisites)

이 튜토리얼에는 머신에 로컬 Docker 설치가 필요합니다. Docker 설치 지침은 여기에서 찾을 수 있습니다.

환경 설정

-d 플래그로 분리 모드에서 ubuntu Docker 컨테이너를 실행하세요. --rm 플래그는 Docker에 컨테이너가 중지되면 삭제하도록 지시하고, -t 플래그는 수동으로 중지할 때까지 컨테이너를 실행 상태로 유지하는 pseudo-tty를 할당합니다.

$ docker run -d --rm -t --name consul ubuntu:22.04

-it 플래그로 컨테이너에서 대화형 셸 세션을 엽니다.

$ docker exec -it consul /bin/bash

팁

이제 터미널 프롬프트가 Ubuntu 컨테이너의 셸에 있음을 보여주도록 다르게 보일 것입니다. 예를 들어 root@a931b3c8ca00:/#처럼 보일 수 있습니다. 튜토리얼의 나머지 명령은 이 Ubuntu 컨테이너 셸에서 실행됩니다.

apt-get을 업데이트하고 필요한 종속성을 설치합니다.

$ apt-get update && apt-get install -y wget gpg

작업 디렉터리를 만들고 들어갑니다.

$ mkdir /tmp/consul-hcdiag && cd /tmp/consul-hcdiag

Consul 설치 및 시작

HashiCorp 리포지토리를 추가합니다.

$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor > /usr/share/keyrings/hashicorp-archive-keyring.gpg && echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com jammy main" | tee /etc/apt/sources.list.d/hashicorp.list

consul 패키지를 설치합니다.

$ apt-get update && apt-get install -y consul

모든 출력을 현재 디렉터리의 consul.log 파일로 리다이렉트하면서 Consul을 백그라운드 프로세스로 시작합니다.

$ consul agent -dev >> consul.log 2>&1 &

Consul 클라이언트 액세스

hcdiag를 Consul 서비스로 연결하는 데 필요한 환경 변수를 설정합니다 — 이 경우 dev 모드 Consul 에이전트가 실행 중이므로 http://127.0.0.1:8500입니다.

$ export CONSUL_HTTP_ADDR=http://127.0.0.1:8500

consul members 명령을 실행해 Consul이 실행 중인지 확인합니다.

$ consul members
Node          Address         Status  Type    Build   Protocol  DC   Partition  Segment
c6c722a039fa  127.0.0.1:8301  alive   server  1.13.1  2         dc1  default    <all>

hcdiag 도구 설치 및 실행

HashiCorp 리포지토리에서 최신 hcdiag 릴리스를 설치합니다.

$ apt-get install -y hcdiag

이것은 최소 환경이므로 SHELL 환경 변수를 설정해야 합니다.

$ export SHELL=/bin/sh

consul 플래그로 hcdiag를 실행합니다. 이는 사용 가능한 환경과 Consul 제품 정보를 수집합니다.

$ hcdiag -consul
2022-08-26T18:48:30.272Z [INFO]  hcdiag: Ensuring destination directory exists: directory=.
2022-08-26T18:48:30.273Z [INFO]  hcdiag: Checking product availability
2022-08-26T18:48:30.424Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57292 latency=3.334206ms
2022-08-26T18:48:30.432Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57294 latency=756.452µs
2022-08-26T18:48:30.434Z [INFO]  hcdiag: Gathering diagnostics
2022-08-26T18:48:30.434Z [INFO]  hcdiag.product: Running operations for: product=host
2022-08-26T18:48:30.434Z [INFO]  hcdiag.product: running operation: product=host runner="uname -v"
2022-08-26T18:48:30.434Z [INFO]  hcdiag.product: Running operations for: product=consul
2022-08-26T18:48:30.434Z [INFO]  hcdiag.product: running operation: product=consul runner="consul version"
2022-08-26T18:48:30.436Z [INFO]  hcdiag.product: running operation: product=host runner=disks
2022-08-26T18:48:30.437Z [INFO]  hcdiag.product: running operation: product=host runner=info
2022-08-26T18:48:30.439Z [INFO]  hcdiag.product: running operation: product=host runner=memory
2022-08-26T18:48:30.439Z [INFO]  hcdiag.product: running operation: product=host runner=process
2022-08-26T18:48:30.439Z [INFO]  hcdiag.product: running operation: product=host runner=network
2022-08-26T18:48:30.440Z [INFO]  hcdiag.product: running operation: product=host runner=/etc/hosts
2022-08-26T18:48:30.442Z [INFO]  hcdiag.product: running operation: product=host runner=iptables
2022-08-26T18:48:30.443Z [WARN]  hcdiag.product: result: runner=iptables status=fail result="map[iptables -L -n -v:]" error="exec error, command=iptables -L -n -v, format=string, error=exec: \"iptables\": executable file not found in $PATH"
2022-08-26T18:48:30.443Z [INFO]  hcdiag.product: running operation: product=host runner="/proc/ files"
2022-08-26T18:48:30.454Z [INFO]  hcdiag.product: running operation: product=host runner=/etc/fstab
2022-08-26T18:48:30.457Z [INFO]  hcdiag: Product done: product=host statuses="map[fail:1 success:9]"
2022-08-26T18:48:30.513Z [INFO]  hcdiag.product: running operation: product=consul runner="consul debug -output=/tmp/consul-hcdiag/hcdiag-2022-08-26T184830Z3905111513/ConsulDebug -duration=10s -interval=5s"
2022-08-26T18:48:30.589Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57296 latency=756.369µs
2022-08-26T18:48:30.593Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/host from=127.0.0.1:57296 latency=2.57301ms
2022-08-26T18:48:30.597Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57296 latency=705.57µs
2022-08-26T18:48:30.598Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/members?wan=1 from=127.0.0.1:57296 latency=43.877µs
2022-08-26T18:48:42.600Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/metrics/stream from=127.0.0.1:57296 latency=12.0006132s
2022-08-26T18:48:42.619Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/agent/self"
2022-08-26T18:48:42.620Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/monitor?loglevel=DEBUG from=127.0.0.1:57306 latency=12.018503143s
2022-08-26T18:48:42.621Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57294 latency=956.549µs
2022-08-26T18:48:42.623Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/agent/metrics"
2022-08-26T18:48:42.623Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/metrics from=127.0.0.1:57294 latency=415.444µs
2022-08-26T18:48:42.625Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/catalog/datacenters"
2022-08-26T18:48:42.625Z [DEBUG] agent.http: Request finished: method=GET url=/v1/catalog/datacenters from=127.0.0.1:57294 latency=118.765µs
2022-08-26T18:48:42.625Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/catalog/services"
2022-08-26T18:48:42.626Z [DEBUG] agent.http: Request finished: method=GET url=/v1/catalog/services from=127.0.0.1:57294 latency=88.196µs
2022-08-26T18:48:42.626Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/namespace"
2022-08-26T18:48:42.627Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/status/leader"
2022-08-26T18:48:42.627Z [DEBUG] agent.http: Request finished: method=GET url=/v1/status/leader from=127.0.0.1:57294 latency=77.818µs
2022-08-26T18:48:42.628Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/status/peers"
2022-08-26T18:48:42.628Z [DEBUG] agent.http: Request finished: method=GET url=/v1/status/peers from=127.0.0.1:57294 latency=36.511µs
2022-08-26T18:48:42.628Z [INFO]  hcdiag.product: running operation: product=consul runner="log/docker consul"
2022-08-26T18:48:42.630Z [INFO]  hcdiag.product: result: runner="log/docker consul" status=skip
  result=
  | /bin/sh: 1: docker: not found
   error="docker not found, container=consul, error=exec error, command=docker version, error=exit status 127"
2022-08-26T18:48:42.630Z [INFO]  hcdiag.product: running operation: product=consul runner=journald
2022-08-26T18:48:42.631Z [INFO]  hcdiag.product: result: runner=journald status=skip
  result=
  | /bin/sh: 1: journalctl: not found
   error="journald not found on this system, service=consul, error=exec error, command=journalctl --version, error=exit status 127"
2022-08-26T18:48:42.631Z [INFO]  hcdiag: Product done: product=consul statuses="map[skip:2 success:9]"
2022-08-26T18:48:42.631Z [INFO]  hcdiag: Recording manifest
2022-08-26T18:48:42.634Z [INFO]  hcdiag: Created Results.json file: dest=/tmp/consul-hcdiag/hcdiag-2022-08-26T184830Z3905111513/Results.json
2022-08-26T18:48:42.636Z [INFO]  hcdiag: Created Manifest.json file: dest=/tmp/consul-hcdiag/hcdiag-2022-08-26T184830Z3905111513/Manifest.json
2022-08-26T18:48:42.642Z [INFO]  hcdiag: Compressed and archived output file: dest=hcdiag-2022-08-26T184830Z.tar.gz
2022-08-26T18:48:42.642Z [INFO]  hcdiag: Writing summary of products and ops to standard output
product  success  fail  unknown  total
consul   9        0     2        11
host     9        1     0        10

팁

이것은 hcdiag가 정보를 수집하는 데 사용하는 일부 시스템 서비스를 제공하지 않는 매우 최소한의 환경입니다. 위 출력처럼 몇 가지 오류가 보이는 것은 정상입니다.

옵션 없이 hcdiag를 호출하면 사용 가능한 모든 환경 및 제품 정보를 수집할 수도 있습니다. 모든 실행 가능한 옵션을 알아보려면 hcdiag -h를 실행하세요.

결과 검토

.tar.gzip 아카이브 파일에 대해 디렉터리를 나열하여 hcdiag가 만든 파일을 찾으세요.

$ ls -l *.gz
-rw-r--r-- 1 root root 28025 Aug 18 12:24 hcdiag-2022-08-18T122356Z.tar.gz

팁

추출된 디렉터리는 파일 이름의 일부로 타임스탬프를 사용합니다. 즉 이 튜토리얼에서 사용된 이에 대한 모든 참조는 로컬 머신에서 보게 될 것과 다릅니다.

내용을 더 자세히 검사하려면 아카이브를 푸세요.

$ tar zxvf hcdiag-2022-08-18T122356Z.tar.gz
hcdiag-2022-08-18T122356Z/ConsulDebug/agent.json
hcdiag-2022-08-18T122356Z/ConsulDebug/consul.log
hcdiag-2022-08-18T122356Z/ConsulDebug/host.json
hcdiag-2022-08-18T122356Z/ConsulDebug/index.json
hcdiag-2022-08-18T122356Z/ConsulDebug/members.json
hcdiag-2022-08-18T122356Z/ConsulDebug/metrics.json
hcdiag-2022-08-18T122356Z/ConsulDebug.tar.gz
hcdiag-2022-08-18T122356Z/Manifest.json
hcdiag-2022-08-18T122356Z/Results.json
hcdiag-2022-08-18T122356Z/docker-consul.log
hcdiag-2022-08-18T122356Z/journald-consul.log

아카이브는 여러 파일과 디렉터리를 추출합니다.

  • Manifest.json은 사용된 구성 옵션, 실행 기간, 발생한 오류 수를 포함하여 hcdiag 실행을 설명하는 정보를 포함합니다.
  • Results.json은 환경에 대한 정보와 consul debug 호출의 출력을 포함합니다.
  • ConsulDebug/는 consul debug 호출의 출력을 포함하는 디렉터리입니다.

사용 사례나 상황에 따라 공유하기에 적절한 정보만 포함되도록 번들을 검사하세요. hcdiag 번들에 포함될 수 있는 시크릿이나 민감한 정보를 난독화해야 한다면 hcdiag redactions 문서를 참조하세요.

Consul Enterprise 사용자

Consul Enterprise 사용자라면 지원 요청에 필요한 정보 수집량을 줄이기 위해 hcdiag의 출력을 HashiCorp 고객 지원팀과 공유하세요.

이 도구는 로컬에서만 작동하며 진단 번들을 누구에게도 내보내거나 공유하지 않습니다. 안전한 위치로 전송하여 볼 필요가 있는 특정 지원 인력과 공유하려면 다른 도구를 사용해야 합니다.

구성 파일 (Configuration file)

hcdiag의 동작을 HCL(HashiCorp Configuration Language) 형식 파일로 구성할 수 있습니다. 이 파일을 사용해 자체 사용자 지정 러너를 추가하고, 정규식을 사용해 민감한 콘텐츠를 편집하고, 명령을 제외하는 등의 동작을 구성할 수 있습니다.

팁

이 최소 환경에는 대부분의 일반 명령줄 텍스트 편집기가 없으므로 apt-get install nano 또는 apt-get install vim으로 설치해야 합니다.

diag.hcl라는 파일을 다음 내용으로 만드세요. 이 파일은 두 가지를 수행합니다.

  1. PASSWORD=sensitive 형식의 모든 민감한 콘텐츠를 편집하도록 hcdiag에 지시하는 에이전트 수준(전역) redaction을 추가합니다. 이것은 인위적인 예시입니다. redactions가 어떻게 작동하고 어떻게 사용하는지에 대한 자세한 정보는 공식 hcdiag Documentation을 참조하세요.
  2. hcdiag가 consul debug 명령을 제외하도록 지시합니다.

diag.hcl

agent {
  redact "regex" {
    match = "PASSWORD=\\S*"
    replace = "<PASSWORD REDACTED>"
  }
}
product "consul" {
  excludes = ["GET /v1/agent/metrics"]
}

diag.hcl 구성 파일로 hcdiag 명령을 실행하세요. 다음 출력과 유사한 출력을 반환합니다.

$ hcdiag -consul -config diag.hcl
2022-08-26T18:53:24.997Z [INFO]  hcdiag: Ensuring destination directory exists: directory=.
2022-08-26T18:53:24.997Z [INFO]  hcdiag: Checking product availability
2022-08-26T18:53:25.149Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57310 latency=866.114µs
2022-08-26T18:53:25.155Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57312 latency=616.956µs
2022-08-26T18:53:25.157Z [INFO]  hcdiag: Gathering diagnostics
2022-08-26T18:53:25.157Z [INFO]  hcdiag.product: Running operations for: product=host
2022-08-26T18:53:25.157Z [INFO]  hcdiag.product: running operation: product=host runner="uname -v"
2022-08-26T18:53:25.157Z [INFO]  hcdiag.product: Running operations for: product=consul
2022-08-26T18:53:25.157Z [INFO]  hcdiag.product: running operation: product=consul runner="consul version"
2022-08-26T18:53:25.159Z [INFO]  hcdiag.product: running operation: product=host runner=disks
2022-08-26T18:53:25.159Z [INFO]  hcdiag.product: running operation: product=host runner=info
2022-08-26T18:53:25.160Z [INFO]  hcdiag.product: running operation: product=host runner=memory
2022-08-26T18:53:25.160Z [INFO]  hcdiag.product: running operation: product=host runner=process
2022-08-26T18:53:25.161Z [INFO]  hcdiag.product: running operation: product=host runner=network
2022-08-26T18:53:25.161Z [INFO]  hcdiag.product: running operation: product=host runner=/etc/hosts
2022-08-26T18:53:25.163Z [INFO]  hcdiag.product: running operation: product=host runner=iptables
2022-08-26T18:53:25.164Z [WARN]  hcdiag.product: result: runner=iptables status=fail result="map[iptables -L -n -v:]" error="exec error, command=iptables -L -n -v, format=string, error=exec: \"iptables\": executable file not found in $PATH"
2022-08-26T18:53:25.164Z [INFO]  hcdiag.product: running operation: product=host runner="/proc/ files"
2022-08-26T18:53:25.175Z [INFO]  hcdiag.product: running operation: product=host runner=/etc/fstab
2022-08-26T18:53:25.178Z [INFO]  hcdiag: Product done: product=host statuses="map[fail:1 success:9]"
2022-08-26T18:53:25.238Z [INFO]  hcdiag.product: running operation: product=consul runner="consul debug -output=/tmp/consul-hcdiag/hcdiag-2022-08-26T185324Z4292389516/ConsulDebug -duration=10s -interval=5s"
2022-08-26T18:53:25.321Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57314 latency=761.333µs
2022-08-26T18:53:25.323Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/host from=127.0.0.1:57314 latency=1.034301ms
2022-08-26T18:53:25.326Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57314 latency=791.722µs
2022-08-26T18:53:25.329Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/members?wan=1 from=127.0.0.1:57314 latency=37.086µs
2022-08-26T18:53:36.737Z [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
2022-08-26T18:53:36.737Z [DEBUG] agent: Node info in sync
2022-08-26T18:53:37.331Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/metrics/stream from=127.0.0.1:57314 latency=12.000899626s
2022-08-26T18:53:37.356Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/monitor?loglevel=DEBUG from=127.0.0.1:57320 latency=12.023058522s
2022-08-26T18:53:37.356Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/agent/self"
2022-08-26T18:53:37.357Z [DEBUG] agent.http: Request finished: method=GET url=/v1/agent/self from=127.0.0.1:57312 latency=965.341µs
2022-08-26T18:53:37.360Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/catalog/datacenters"
2022-08-26T18:53:37.360Z [DEBUG] agent.http: Request finished: method=GET url=/v1/catalog/datacenters from=127.0.0.1:57312 latency=258.37µs
2022-08-26T18:53:37.361Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/catalog/services"
2022-08-26T18:53:37.361Z [DEBUG] agent.http: Request finished: method=GET url=/v1/catalog/services from=127.0.0.1:57312 latency=109.885µs
2022-08-26T18:53:37.362Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/namespace"
2022-08-26T18:53:37.362Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/status/leader"
2022-08-26T18:53:37.363Z [DEBUG] agent.http: Request finished: method=GET url=/v1/status/leader from=127.0.0.1:57312 latency=177.814µs
2022-08-26T18:53:37.363Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/status/peers"
2022-08-26T18:53:37.364Z [DEBUG] agent.http: Request finished: method=GET url=/v1/status/peers from=127.0.0.1:57312 latency=109.065µs
2022-08-26T18:53:37.364Z [INFO]  hcdiag.product: running operation: product=consul runner="log/docker consul"
2022-08-26T18:53:37.366Z [INFO]  hcdiag.product: result: runner="log/docker consul" status=skip
  result=
  | /bin/sh: 1: docker: not found
   error="docker not found, container=consul, error=exec error, command=docker version, error=exit status 127"
2022-08-26T18:53:37.366Z [INFO]  hcdiag.product: running operation: product=consul runner=journald
2022-08-26T18:53:37.368Z [INFO]  hcdiag.product: result: runner=journald status=skip
  result=
  | /bin/sh: 1: journalctl: not found
   error="journald not found on this system, service=consul, error=exec error, command=journalctl --version, error=exit status 127"
2022-08-26T18:53:37.368Z [INFO]  hcdiag: Product done: product=consul statuses="map[skip:2 success:8]"
2022-08-26T18:53:37.368Z [INFO]  hcdiag: Recording manifest
2022-08-26T18:53:37.373Z [INFO]  hcdiag: Created Results.json file: dest=/tmp/consul-hcdiag/hcdiag-2022-08-26T185324Z4292389516/Results.json
2022-08-26T18:53:37.374Z [INFO]  hcdiag: Created Manifest.json file: dest=/tmp/consul-hcdiag/hcdiag-2022-08-26T185324Z4292389516/Manifest.json
2022-08-26T18:53:37.381Z [INFO]  hcdiag: Compressed and archived output file: dest=hcdiag-2022-08-26T185324Z.tar.gz
2022-08-26T18:53:37.381Z [INFO]  hcdiag: Writing summary of products and ops to standard output
product  success  fail  unknown  total
consul   8        0     2        10
host     9        1     0        10

이전 hcdiag 실행과 달리 이 출력에는 Consul 에이전트 메트릭 정보가 포함되어 있지 않습니다.

2022-08-18T12:15:30.644Z [INFO]  hcdiag.product: running operation: product=consul runner="GET /v1/agent/metrics"

또한 redaction 형식으로 비밀번호를 캡처하고 노출할 수 있는 러너 출력은 이 민감한 내용 대신 <PASSWORD REDACTED>가 표시됩니다.

정리 (Cleanup)

Ubuntu 컨테이너를 종료해 터미널 프롬프트로 돌아갑니다.

$ exit

Docker 컨테이너를 중지합니다. 튜토리얼 시작 부분의 docker run 명령에 전달된 -rm 플래그 때문에 Docker가 컨테이너를 자동으로 삭제합니다.

$ docker stop consul

프로덕션 사용 팁 (Production usage tips)

기본적으로 hcdiag 도구는 현재 시간에서 72시간 전까지의 파일을 포함합니다. -include-since 플래그로 원하는 시간 범위를 지정할 수 있습니다.

Consul 서버의 성능에 영향을 줄 것이 우려된다면 러너가 동시에 실행되지 않고 -serial 플래그로 직렬로 호출되도록 지정할 수 있습니다.

프로덕션에서 hcdiag를 배포하는 것은 다음 절차와 유사한 워크플로우를 포함합니다.

  1. 대상 범위의 Consul 시스템(Consul 서버 또는 Consul 클라이언트일 수 있음)에 hcdiag 바이너리를 배치합니다.
  2. 구성 파일과 -config 플래그로 실행할 때 지정된 구성 파일이 hcdiag를 실행하는 사용자가 읽을 수 있는지 확인합니다.
  3. 현재 디렉터리(또는 dest 플래그로 선택한 대상 디렉터리)가 hcdiag를 실행하는 사용자가 쓸 수 있는지 확인합니다.
  4. hcdiag가 실행 중에 연결해야 하는 HashiCorp 제품에 대한 연결성을 확인합니다. 연결을 설정하거나 인증 토큰을 전달하는 데 필요한 환경 변수를 필요에 따라 내보냅니다.
  5. 정보 수집 기간을 결정합니다. 기본값은 서버 로그 출력에서 72시간 전까지 수집합니다. 필요에 따라 -include-since 플래그로 요구 사항을 조정하세요. 예를 들어 로그 출력 24시간만 포함하려면 다음과 같이 호출합니다.
    $ hcdiag -consul -include-since 24h
    
  6. -includes 플래그로 수집되는 것을 제한합니다. 예를 들어 -includes /var/log/consul-*,/var/log/nomad-*는 hcdiag가 지정된 Consul 및 Nomad 파일 이름 패턴과 일치하는 로그만 수집하도록 지시합니다.
  7. redactions를 사용해 키나 비밀번호 같은 민감한 정보가 hcdiag의 출력이나 생성된 번들 파일에 도달하지 못하게 합니다.
  8. -dryrun 플래그를 사용해 실제로 아무것도 수행하지 않고 hcdiag가 무엇을 할지 관찰하여 구성과 옵션을 테스트합니다.

요약 (Summary)

이 튜토리얼에서는 Git 리포지토리를 검색하고, Docker Compose로 로컬 Consul 데이터센터를 만들고, 로컬 환경을 사용해 실행 중인 Consul 환경에서 정보를 수집하는 맥락에서 hcdiag 도구를 탐구했습니다.

또한 사용 가능한 구성 플래그, 구성 파일, hcdiag 사용을 위한 프로덕션 특정 팁에 대해서도 배웠습니다.

다음 단계 (Next Steps)

도구에 대한 추가 정보는 hcdiag GitHub 리포지토리를 확인하세요.

다른 HashiCorp 도구에 대한 hcdiag 가이드도 있습니다. Vault, Terraform, Nomad 등이 있습니다.

도움 및 참조 (Help and Reference)

Consul 환경 문제 해결에 대한 추가 도움은 다음 리소스를 탐색하세요.

더 알아보기 (Learn more)