Documentation

28. 컨트롤러 문제 해결

28.1. 오류 로그

컨트롤러 서버 오류는 ``/var/log/tower``에 로깅됩니다. 슈퍼바이저 로그는 ``/var/log/supervisor/``에서 확인할 수 있습니다. Nginx 웹 서버 오류는 httpd 오류 로그에 로깅됩니다. ``/etc/tower/conf.d/``에서 다른 컨트롤러 로깅 요구 사항을 구성합니다.

대부분의 브라우저에 빌드된 JavaScript 콘솔을 사용하여 클라이언트 측 문제를 살펴보고 https://access.redhat.com/에서 Red Hat Customer Portal을 통해 Ansible에 오류를 보고합니다.

28.2. sosreport

``sosreport``는 지원 팀이 보고된 문제를 분석하고 조사하는 데 사용할 수 있는 진단 정보를 수집하는 유틸리티입니다. 이 정보를 기술 지원에 올바르게 제공하려면 Red Hat Customer Portal의 `Knowledgebase article for sosreport <https://access.redhat.com/solutions/3592>`_를 참조하여 다음 절차를 수행합니다.

  1. Install the sosreport 유틸리티.

  2. Generate an sosreport.

  3. Red Hat 지원에 sosreport를 제공합니다.

28.3. 호스트에 연결할 때 발생하는 문제

호스트 연결 오류로 인해 빠른 시작 가이드의 helloworld.yml 예제 플레이북 또는 기타 플레이북을 실행할 수 없는 경우 다음을 시도합니다.

  • 호스트에 ``ssh``를 수행할 수 있습니까? Ansible은 관리 중인 서버에 대한 SSH 액세스 권한을 사용합니다.

  • 인벤토리 파일에 호스트 이름과 IP가 올바르게 추가되었습니까? (오타를 확인하십시오.)

28.4. HTTP를 통해 컨트롤러에 로그인할 수 없음

컨트롤러 액세스는 보안 프로토콜(HTTPS)을 통해 의도적으로 제한됩니다. 로드 밸런서 또는 프록시 뒤에서 《HTTP 전용》으로 컨트롤러 노드를 실행하도록 구성이 설정되어 있고 SSL 없이 액세스만 하려는 경우(예: 문제 해결을 위해) 컨트롤러 인스턴스의 /etc/tower/conf.d``에 있는 ``custom.py 파일에 다음 설정을 추가해야 합니다.

SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False

이러한 설정을 ``False``로 변경하면 컨트롤러에서 HTTP 프로토콜을 사용할 때 쿠키와 로그인 세션을 관리할 수 있습니다. 제대로 적용하려면 클러스터 설치의 모든 노드에서 이 작업을 수행해야 합니다.

변경 사항을 적용하려면 다음을 실행합니다.

automation-controller-service restart

28.5. 라이브 이벤트용 WebSockets 포트가 작동하지 않음

|at|는 컨트롤러 서버의 포트 80/443을 사용하여 플레이북 활동 및 기타 이벤트의 실시간 업데이트를 클라이언트 브라우저로 스트리밍합니다. 이러한 포트는 기본적으로 80/443으로 구성되어 있지만, 방화벽에서 차단된 경우 이전 웹 소켓 포트에 대해 열거나 추가한 방화벽 규칙을 모두 닫으면 방화벽에서 이 포트를 통한 트래픽을 허용합니다.

28.6. 플레이북을 실행할 때 발생하는 문제

플레이북 오류로 인해 빠른 시작 가이드의 helloworld.yml 예제 플레이북 또는 기타 플레이북을 실행할 수 없는 경우 다음을 시도합니다.

  • 현재 명령을 실행 중인 사용자로 인증하고 있습니까? 그렇지 않으면 사용자 이름이 설정된 방식을 확인하거나 --user=username 또는 -u username 명령을 전달하여 사용자를 지정합니다.

  • YAML 파일이 올바르게 들여쓰기되어 있습니까? 공백을 올바르게 배치해야 할 수 있습니다. YAML에서는 들여쓰기 수준이 중요합니다. ``yamlint``를 사용하여 플레이북을 확인할 수 있습니다. 자세한 내용은 http://docs.ansible.com/YAMLSyntax.html에서 YAML 입문을 참조하십시오.

  • -``으로 시작하는 항목은 목록 항목 또는 플레이로 간주됩니다. ``key: value 형식의 항목은 해시 또는 사전으로 작동합니다. 추가 또는 누락된 - 플레이가 없는지 확인합니다.

28.7. 작업을 실행할 때 발생하는 문제

플레이북에서 작업을 실행하는 데 문제가 있는 경우 플레이북 YAML 파일을 검토해야 합니다. 수동으로 또는 소스 제어 메커니즘을 통해 플레이북을 가져오는 경우, 호스트 정의가 컨트롤러에서 제어되며 ``hosts: all``로 설정되어야 한다는 것에 유의하십시오.

28.8. 《작업 템플릿》 드롭다운에 플레이북이 표시되지 않음

작업 템플릿 드롭다운 목록에 플레이북이 표시되지 않는 경우 다음과 같은 몇 가지 사항을 확인할 수 있습니다.

  • 플레이북이 유효한 YML이고 Ansible을 통해 구문 분석할 수 있는지 확인합니다.

  • 《awx》 시스템 사용자가 파일을 볼 수 있도록 프로젝트 경로(/var/lib/awx/projects)의 권한과 소유권이 설정되어 있는지 확인합니다. 다음 명령을 실행하여 소유권을 변경할 수 있습니다.

chown awx -R /var/lib/awx/projects/

28.9. 플레이북이 보류 중 상태로 유지됨

플레이북 작업을 실행하려고 하는데 《보류 중》 상태가 무기한 유지되는 경우 다음을 시도합니다.

  • ``supervisorctl status``를 통해 모든 슈퍼바이저 서비스가 실행되고 있는지 확인합니다.

  • /var/ 파티션에서 사용 가능한 공간이 1GB를 넘는지 확인합니다. /var/ 파티션의 공간이 부족하면 작업이 완료되지 않습니다.

  • 컨트롤러 서버에서 ``automation-controller-service restart``를 실행합니다.

문제가 계속되는 경우 컨트롤러 서버에서 root로 ``sosreport``를 실행한 다음, 결과를 포함하여 `support request`_를 제출합니다.

28.10. 컨트롤러 작업 취소

현재 실행 중인 컨트롤러 작업에 대한 cancel 요청을 발행하는 경우 컨트롤러는 ansible-playbook 프로세스에 ``SIGINT``를 발행합니다. 그러면 Ansible이 새 작업 디스패치를 중지하고 종료되지만, 대부분의 경우 원격 호스트에 이미 디스패치된 모듈 작업은 완료될 때까지 실행됩니다. 이 동작은 명령행 Ansible 실행 중에 ``Ctrl-C``를 누른 것과 유사합니다.

소프트웨어 종속 항목의 경우 실행 중인 작업을 취소하면 작업이 기본적으로 제거되지만 종속 항목은 그대로 유지됩니다.

28.11. 외부 데이터베이스를 재사용하면 설치에 실패함

후속 노드 설치 시 외부 DB를 재사용하면 설치 실패가 발생하는 인스턴스가 보고되었습니다.

예를 들어 클러스터형 설치를 수행했다고 가정합니다. 그다음, 이 작업을 다시 수행해야 했으며 동일한 외부 데이터베이스를 재사용하여 두 번째 클러스터형 설치를 수행했는데 후속 설치에 실패했다고 가정합니다.

이전 설치에서 사용된 외부 데이터베이스를 설정하는 경우 클러스터형 노드에 사용된 데이터베이스를 수동으로 먼저 지워야 추가 설치에 성공할 수 있습니다.

28.11.1. 격리 기능 및 변수

|At|에서는 컨테이너 기술을 사용하여 각 작업을 격리합니다. 기본적으로 현재 프로젝트만 작업 템플릿을 실행하는 컨테이너에 노출됩니다.

추가 디렉터리를 노출하도록 플레이북 실행을 사용자 지정해야 할 수도 있습니다. 작업 격리 사용을 미세 조정하기 위해 설정할 수 있는 특정 변수가 있습니다.

기본적으로 |at|에서는 시스템의 tmp 디렉터리(기본적으로 /tmp)를 스테이징 영역으로 사용합니다. 작업 설정 화면의 작업 실행 경로 필드 또는 ``/api/v2/settings/jobs``의 REST API에서 이 설정을 변경할 수 있습니다.

AWX_ISOLATION_BASE_PATH = "/opt/tmp"

구체적으로 호스트에서 플레이북이 실행되는 컨테이너로 노출되어야 하는 추가 디렉터리가 있는 경우 작업 설정 화면의 격리된 작업에 노출된 경로 필드 또는 ``/api/v2/settings/jobs``의 REST API에서 지정할 수 있습니다.

AWX_ISOLATION_SHOW_PATHS = ['/list/of/', '/paths']

참고

플레이북에서 경로에 정의된 키 또는 설정을 사용해야 하는 경우 AWX_ISOLATION_SHOW_PATHS``에 ``/var/lib/awx/.ssh 파일을 추가하는 것이 좋습니다.

위의 필드는 작업 설정 창에서 찾을 수 있습니다.

_images/configure-tower-jobs-isolated-jobs-fields.png

28.12. 컨트롤러 인벤토리의 프라이빗 EC2 VPC 인스턴스

기본적으로 컨트롤러는 EIP(탄력적 IP) 주소가 연결된 인스턴스만 VPC에 표시합니다. 모든 VPC 인스턴스를 보려면 다음 단계를 수행합니다.

  1. 컨트롤러 인터페이스에서 인벤토리를 선택합니다.

  2. 소스가 AWS로 설정된 그룹을 클릭하고 소스 탭을 클릭합니다.

  3. Source Variables 박스에 다음을 입력합니다.

vpc_destination_variable: private_ip_address

저장한 다음, 그룹 업데이트를 트리거합니다. 완료되면 모든 VPC 인스턴스를 볼 수 있습니다.

참고

해당 인스턴스를 구성하려면 VPC 내에서 인스턴스 액세스 권한이 있는 컨트롤러를 실행해야 합니다.

28.13. 《오류: 제공된 호스트 목록이 비어 있습니다.》 문제 해결

컨트롤러를 통해 플레이북을 실행하려고 할 때 《건너뛰는 중: 일치하는 호스트 없음》 메시지가 표시되는 경우 다음과 같은 몇 가지 사항을 확인합니다.

  • 플레이북의 호스트 선언 행이 인벤토리의 그룹/호스트 이름과 정확히 일치하는지 확인합니다(대소문자 구분).

  • 일치하고 Ansible Core 2.0 이상을 사용하는 경우 그룹 이름의 공백을 확인한 다음, 밑줄을 사용하거나 공백을 사용하지 않도록 수정하여 그룹을 인식할 수 있게 합니다.

  • 작업 템플릿에서 제한을 지정한 경우 유효한 제한 값이고 인벤토리의 항목과 여전히 일치하는지 확인합니다. 제한 필드는 여기(http://docs.ansible.com/intro_patterns.html)에 설명된 패턴 인수를 사용합니다.

이러한 옵션을 확인한 후에도 문제가 계속 발생하면 지원 티켓을 제출하십시오.