"Cloud-init 디버깅 방법"의 두 판 사이의 차이

(새 문서: ==개요== {{작섲우}} 분류: cloud-init ;How to debug cloud-init ;Cloud-init 디버깅 방법 https://cloudinit.readthedocs.io/en/latest/howto/debugging.html ----)
 
 
(같은 사용자의 중간 판 15개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
==개요==
{{작섲우}}
{{소문자}}
[[분류: cloud-init]]
[[분류: cloud-init]]
;How to debug cloud-init
;How to debug cloud-init
;Cloud-init 디버깅 방법
;cloud-init 디버깅 방법
https://cloudinit.readthedocs.io/en/latest/howto/debugging.html
https://cloudinit.readthedocs.io/en/latest/howto/debugging.html
----
----
다양한 cloud-init 실패 모드가 있으며 이를 디버깅해야 할 필요가 있습니다. 디버깅은 시나리오에 따라 다르지만, 시작 지점은 종종 유사합니다:
* [[#인스턴스에 로그인할 수 없음|로그인할 수 없음]]
* [[#cloud-init가 실행되지 않음|cloud-init이 실행되지 않음]]
* [[#cloud-init가 실행되었지만 원하는 작업을 수행하지 않음|cloud-init이 예상치 못한 동작을 함]]
* [[#cloud-init 실행이 완료되지 않음|cloud-init 실행이 완료되지 않음]]
==인스턴스에 로그인할 수 없음==
쉘 접근 권한이 없을 때는 디버그하기 가장 어려운 시나리오 중 하나입니다. 다음과 같은 몇 가지 옵션이 있습니다:
* 1. 시리얼 콘솔에서 로그 메시지를 수집하고 오류가 있는지 확인합니다.
* 2. SSH 없이 인스턴스에 접근하려면 사용자 데이터(user-data)를 사용하여 패스워드 접근이 가능한 사용자를 생성하고 클라우드 시리얼 포트 콘솔을 통해 로그인합니다. 이는 <code>cc_users_groups</code>가 성공적으로 실행된 경우에만 가능합니다.
* 3. 동일한 사용자 데이터를 로컬에서 실행해 봅니다. LXD 또는 QEMU를 로컬에서 사용하여 쉘이나 로그를 얻고 이러한 단계로 디버깅합니다.
* 4. 이미지를 로컬 시스템으로 복사한 다음 파일시스템을 로컬로 마운트하고 이미지 로그를 검사하여 단서를 찾습니다.
==cloud-init이 실행되지 않음==
1. <code>cloud-init status --long</code> 명령어의 출력을 확인하십시오.
* <code>'extended_status'</code> 키의 값은 무엇입니까?
* <code>'boot_status_code'</code> 키의 값은 무엇입니까?
:상태에 대한 자세한 설명은 [[cloud-init 보고서 상태|우리의 보고서 상태 설명]]을 참조하십시오.
2. <code>/run/cloud-init/ds-identify.log</code>의 내용을 확인하십시오.
:이 로그 파일은 cloud-init이 실행되고 있는 플랫폼이 감지될 때 사용됩니다. 이 단계는 cloud-init을 활성화하거나 비활성화합니다.
3. 서비스 상태를 확인하십시오:
:<syntaxhighlight lang='bash'>
systemctl status cloud-init-local.service cloud-init.service\
  cloud-config.service cloud-final.service
</syntaxhighlight>
:cloud-init이 실행을 시작했지만 완료되지 않았을 수 있습니다. 이 명령어는 얼마나 많은 cloud-init 단계가 완료되었는지, 그리고 어떤 단계가 완료되었는지 보여줍니다.
==cloud-init가 실행되었지만 원하는 작업을 수행하지 않음==
1. cloud-init의 user data [[cloud-init 사용자 데이터 형식#Cloud 설정 데이터|cloud config]]를 사용 중인 경우, [[cloud-init 사용자 데이터 cloud config를 검증하는 방법|user data cloud config를 검증]]하세요.
2. <code>cloud-init status --long</code> 명령어에서 오류를 확인하세요.
:* <code>'errors'</code> 키의 값은 무엇인가요?
:* <code>'recoverable_errors'</code> 키의 값은 무엇인가요?
:이 export된 오류에 대한 자세한 정보는 [[cloud-init export된 오류|export된 오류]]에 대한 가이드를 참조하세요.
3. 오류에 대한 추가적인 맥락을 위해 다음 로그 파일들을 확인하세요:
:* <code>/var/log/cloud-init.log</code>
:* <code>/var/log/cloud-init-output.log</code>
:로그에서 오류와 이 오류에 앞서는 라인들을 식별하세요.
:다음을 확인해보세요:
:* 로그 파일에 따르면 무엇이 잘못되었나요?
:* cloud-init 오류가 이 인스턴스에 제공된 설정과 어떻게 관련이 있나요?
:* 이 오류와 관련된 설정 부분에 대해 문서에서는 뭐라고 설명하고 있나요? 설정 모듈이 실패했나요?
:* cloud-init이 어떤 [[cloud-init 실패 상태|실패 상태]]에 있나요?
==cloud-init 실행이 완료되지 않음==
cloud-init이 완료되지 않은 여러 이유가 있을 수 있습니다. 일부 이유는 cloud-init 내부에 있지만, 다른 경우에는 cloud-init이 완료되지 않는 것이 시스템의 다른 컴포넌트에서 발생한 문제나 사용자 설정의 결과일 수 있습니다.
=== 외부 요인 ===
* 다른 서비스가 실패하거나 멈췄습니다.
* 커널이나 드라이버에 버그가 있습니다.
* <code>cloud-init</code>에서 호출하는 외부 사용자공간 도구에 버그가 있습니다.
=== 내부 요인 ===
* 절대 완료되지 않는 <code>bootcmd</code> 또는 <code>runcmd</code>의 명령어 (예: <code>cloud-init status --wait</code>를 실행하면 교착 상태에 빠짐).
* 타임아웃을 비활성화하거나 매우 높은 타임아웃 값을 세팅한 설정.
=== 디버깅을 시작하려면 ===
1. <code>dmesg</code>에서 오류를 확인합니다:
:<syntaxhighlight lang='bash'>
dmesg -T | grep -i -e warning -e error -e fatal -e exception
</syntaxhighlight>
2. 실패한 다른 systemd 서비스들을 조사합니다:
:<syntaxhighlight lang='bash'>
systemctl --failed
</syntaxhighlight>
3. <code>cloud-init status --long</code>의 출력을 확인합니다:
:* <code>'extended_status'</code> 키의 값은 무엇인가요?
:* <code>'boot_status_code'</code> 키의 값은 무엇인가요?
:내보낸 오류에 대한 자세한 내용은 [[cloud-init 보고된 상태|내보낸 오류 가이드]]를 참조하세요.
4. [[cloud-init 부팅 단계|부팅 단계]]에서 실행 중인 서비스를 점검합니다:
:<syntaxhighlight lang='console'>
$ systemctl list-jobs --after
JOB UNIT                                            TYPE  STATE
150 cloud-final.service                              start waiting
└─      waiting for job 147 (cloud-init.target/start)  -    -
155 blocking-daemon.service                          start running
└─      waiting for job 150 (cloud-final.service/start) -    -
147 cloud-init.target                                start waiting
3 jobs listed.
</syntaxhighlight>
:위 예제에서는 <code>cloud-final.service</code>가 대기 중이며 <code>cloud-init.target</code> 이전에 지시되었고, <code>blocking-daemon.service</code>가 현재 실행 중이며 <code>cloud-final.service</code> 이전에 지시된 것을 볼 수 있습니다. 이 출력으로부터 cloud-init이 완료되지 않은 이유는 <code>blocking-daemon.service</code>가 아직 완료되지 않았기 때문이며, <code>blocking-daemon.service</code>가 왜 아직 실행 중인지 조사해야 함을 알 수 있습니다.
5. 실행 중인 서비스의 PID를 사용하여 모든 실행 중인 하위 프로세스를 찾습니다. cloud-init에 의해 생성된 모든 실행 중인 프로세스가 cloud-init이 계속되는 것을 막고 있을 수 있습니다.
:<syntaxhighlight lang='bash'>
pstree <PID>
</syntaxhighlight>
:확인해보세요:
:* 어떤 프로세스가 아직 실행 중인가요?
:* 왜 이 프로세스가 아직 실행 중인가요?
:* 이 프로세스는 내가 제공한 설정과 어떻게 관련이 있나요?
6. 오류에 대한 더 많은 컨텍스트를 얻기 위해 로그 파일을 확인합니다:
:* <code>/var/log/cloud-init.log</code>
:* <code>/var/log/cloud-init-output.log</code>
:로그에서 오류와 해당 오류 바로 이전의 라인을 식별하세요.
:확인해보세요:
:* 로그 파일에 따르면 무엇이 잘못되었나요?
:* cloud-init 오류는 이 인스턴스에 제공된 설정과 어떻게 관련이 있나요?
:* 이 오류와 관련된 설정 부분에 대해 문서에서는 무엇이라고 말하고 있나요?

2024년 7월 15일 (월) 22:30 기준 최신판

1 개요[ | ]

How to debug cloud-init
cloud-init 디버깅 방법

https://cloudinit.readthedocs.io/en/latest/howto/debugging.html


다양한 cloud-init 실패 모드가 있으며 이를 디버깅해야 할 필요가 있습니다. 디버깅은 시나리오에 따라 다르지만, 시작 지점은 종종 유사합니다:

2 인스턴스에 로그인할 수 없음[ | ]

쉘 접근 권한이 없을 때는 디버그하기 가장 어려운 시나리오 중 하나입니다. 다음과 같은 몇 가지 옵션이 있습니다:

  • 1. 시리얼 콘솔에서 로그 메시지를 수집하고 오류가 있는지 확인합니다.
  • 2. SSH 없이 인스턴스에 접근하려면 사용자 데이터(user-data)를 사용하여 패스워드 접근이 가능한 사용자를 생성하고 클라우드 시리얼 포트 콘솔을 통해 로그인합니다. 이는 cc_users_groups가 성공적으로 실행된 경우에만 가능합니다.
  • 3. 동일한 사용자 데이터를 로컬에서 실행해 봅니다. LXD 또는 QEMU를 로컬에서 사용하여 쉘이나 로그를 얻고 이러한 단계로 디버깅합니다.
  • 4. 이미지를 로컬 시스템으로 복사한 다음 파일시스템을 로컬로 마운트하고 이미지 로그를 검사하여 단서를 찾습니다.

3 cloud-init이 실행되지 않음[ | ]

1. cloud-init status --long 명령어의 출력을 확인하십시오.

  • 'extended_status' 키의 값은 무엇입니까?
  • 'boot_status_code' 키의 값은 무엇입니까?
상태에 대한 자세한 설명은 우리의 보고서 상태 설명을 참조하십시오.

2. /run/cloud-init/ds-identify.log의 내용을 확인하십시오.

이 로그 파일은 cloud-init이 실행되고 있는 플랫폼이 감지될 때 사용됩니다. 이 단계는 cloud-init을 활성화하거나 비활성화합니다.

3. 서비스 상태를 확인하십시오:

systemctl status cloud-init-local.service cloud-init.service\
   cloud-config.service cloud-final.service
cloud-init이 실행을 시작했지만 완료되지 않았을 수 있습니다. 이 명령어는 얼마나 많은 cloud-init 단계가 완료되었는지, 그리고 어떤 단계가 완료되었는지 보여줍니다.

4 cloud-init가 실행되었지만 원하는 작업을 수행하지 않음[ | ]

1. cloud-init의 user data cloud config를 사용 중인 경우, user data cloud config를 검증하세요.

2. cloud-init status --long 명령어에서 오류를 확인하세요.

  • 'errors' 키의 값은 무엇인가요?
  • 'recoverable_errors' 키의 값은 무엇인가요?
이 export된 오류에 대한 자세한 정보는 export된 오류에 대한 가이드를 참조하세요.

3. 오류에 대한 추가적인 맥락을 위해 다음 로그 파일들을 확인하세요:

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log
로그에서 오류와 이 오류에 앞서는 라인들을 식별하세요.
다음을 확인해보세요:
  • 로그 파일에 따르면 무엇이 잘못되었나요?
  • cloud-init 오류가 이 인스턴스에 제공된 설정과 어떻게 관련이 있나요?
  • 이 오류와 관련된 설정 부분에 대해 문서에서는 뭐라고 설명하고 있나요? 설정 모듈이 실패했나요?
  • cloud-init이 어떤 실패 상태에 있나요?

5 cloud-init 실행이 완료되지 않음[ | ]

cloud-init이 완료되지 않은 여러 이유가 있을 수 있습니다. 일부 이유는 cloud-init 내부에 있지만, 다른 경우에는 cloud-init이 완료되지 않는 것이 시스템의 다른 컴포넌트에서 발생한 문제나 사용자 설정의 결과일 수 있습니다.

5.1 외부 요인[ | ]

  • 다른 서비스가 실패하거나 멈췄습니다.
  • 커널이나 드라이버에 버그가 있습니다.
  • cloud-init에서 호출하는 외부 사용자공간 도구에 버그가 있습니다.

5.2 내부 요인[ | ]

  • 절대 완료되지 않는 bootcmd 또는 runcmd의 명령어 (예: cloud-init status --wait를 실행하면 교착 상태에 빠짐).
  • 타임아웃을 비활성화하거나 매우 높은 타임아웃 값을 세팅한 설정.

5.3 디버깅을 시작하려면[ | ]

1. dmesg에서 오류를 확인합니다:

dmesg -T | grep -i -e warning -e error -e fatal -e exception

2. 실패한 다른 systemd 서비스들을 조사합니다:

systemctl --failed

3. cloud-init status --long의 출력을 확인합니다:

  • 'extended_status' 키의 값은 무엇인가요?
  • 'boot_status_code' 키의 값은 무엇인가요?
내보낸 오류에 대한 자세한 내용은 내보낸 오류 가이드를 참조하세요.

4. 부팅 단계에서 실행 중인 서비스를 점검합니다:

$ systemctl list-jobs --after
JOB UNIT                                             TYPE  STATE
150 cloud-final.service                              start waiting
└─      waiting for job 147 (cloud-init.target/start)   -     -
155 blocking-daemon.service                          start running
└─      waiting for job 150 (cloud-final.service/start) -     -
147 cloud-init.target                                start waiting

3 jobs listed.
위 예제에서는 cloud-final.service가 대기 중이며 cloud-init.target 이전에 지시되었고, blocking-daemon.service가 현재 실행 중이며 cloud-final.service 이전에 지시된 것을 볼 수 있습니다. 이 출력으로부터 cloud-init이 완료되지 않은 이유는 blocking-daemon.service가 아직 완료되지 않았기 때문이며, blocking-daemon.service가 왜 아직 실행 중인지 조사해야 함을 알 수 있습니다.

5. 실행 중인 서비스의 PID를 사용하여 모든 실행 중인 하위 프로세스를 찾습니다. cloud-init에 의해 생성된 모든 실행 중인 프로세스가 cloud-init이 계속되는 것을 막고 있을 수 있습니다.

pstree <PID>
확인해보세요:
  • 어떤 프로세스가 아직 실행 중인가요?
  • 왜 이 프로세스가 아직 실행 중인가요?
  • 이 프로세스는 내가 제공한 설정과 어떻게 관련이 있나요?

6. 오류에 대한 더 많은 컨텍스트를 얻기 위해 로그 파일을 확인합니다:

  • /var/log/cloud-init.log
  • /var/log/cloud-init-output.log
로그에서 오류와 해당 오류 바로 이전의 라인을 식별하세요.
확인해보세요:
  • 로그 파일에 따르면 무엇이 잘못되었나요?
  • cloud-init 오류는 이 인스턴스에 제공된 설정과 어떻게 관련이 있나요?
  • 이 오류와 관련된 설정 부분에 대해 문서에서는 무엇이라고 말하고 있나요?
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}