pythonpexpect 라이브러리 기반 로그 정보 자동 가져오기
3921 단어 pythonpexpect창고로그 자동 가져오기
1. 앞말
대부분의 사람들에게 버그를 해결하는 것은 키워드로 로그를 작성하여 문제를 포지셔닝하는 것이다!
디버깅 상황에서 우리는 실시간으로 컨트롤러에서 로그를 볼 수 있다.그러나 서버에 배치된 응용 프로그램에 대해 로그는 서버의 디렉터리에 저장되어 로컬을 통해 볼 수 없습니다
이런 상황에서 우리가 먼저 서버에 로그인한 후에 로그 디렉터리 폴더에 들어가서 마지막으로 로그 파일을 통해 문제를 포지셔닝해야 한다.K8s 용기와 관련이 있다면, 서비스에 대응하는 용기에 kubectl 명령을 사용해서 로그 디렉터리에 들어가야 위치를 정할 수 있습니다. 이 모든 것은 매우 번거롭고 효과가 적습니다.
이 글은 Python 의존 라이브러리:pexpect를 소개합니다. 명령행 자동화 도구로서 로그를 한 번에 가져와 신속하게 위치를 정하는 데 도움을 줄 수 있습니다!
2. pexpect 소개
pexpect는 Python 언어로 이루어진 클래스 Expect의 일종으로 하위 응용 프로그램을 생성하고 제어하며 기대 모드를 통해 하위 응용 프로그램의 출력에 상응하는 처리를 한다
프로젝트 주소:
https://github.com/pexpect/pexpect/tree/5eed1a31a2853a09b7367c59fbd1a4a0b53341df
그것은 주로 인간과 기계의 대화를 시뮬레이션하여 일부 자동화된 장면을 실현한다
예: SSH, FTP, PASSWD, Telnet 등의 명령행 프로그램과 자동화된 상호 작용
사용하기 전에 의존 패키지를 설치합니다
#
pip3 install pexpect
3. 실전
서버 K8S 컨테이너에서 로그를 가져오는 예를 들어 설명합니다.
3-1 SSH 로그인
우선, pexpect 시뮬레이션 SSH 원격 로그인 서버 초기화
import pexpect
PROMPT = ['# ', '>>> ', '> ', '\$ ']
def login_with_pexpect():
"""
-pexpect
:return:
"""
#
port = **
#
user = **
#
pwd = **
# ip
ip = **
ssh_cmd = "ssh -p {} {}@{}".format(port,user,ip)
# ,
child = pexpect.spawn(ssh_cmd, timeout=60, encoding='utf-8')
# ,
ret = child.expect([pexpect.TIMEOUT, '[P|p]assword: '], timeout=10)
# , ,
if ret == 1:
#
child.sendline(pwd)
child.expect(PROMPT)
return child
else:
print(' !')
그 가운데pexpect.spawn (): 프로그램을 실행하고 핸들을 되돌려줍니다.
이 방법의 일반적인 매개변수는 다음과 같습니다.
코드의 의미는 10s 내에 키워드'[P|p]assword:'가 나타날 때까지 기다리는 것입니다.
마지막으로 일치하는 결과가 1이면sendline () 방법으로 문자 문자열을 보내고 암호 입력을 모의하여 로그인 작업을 완료합니다
3-2 패키지 발송 명령
다음에 우리는 핸들을 조작하여 명령을 한 번 봉인하고 결과를 얻을 것이다
def send_command(child, cmd, expected_content=None, timeout=10):
"""
,
:param expected_content:
:param child:
:param cmd:
:return:
"""
#
if expected_content is None:
expected_content = ["#"]
child.sendline(cmd)
#
child.expect(expected_content, timeout=timeout)
#
result = child.before
return result
지적해야 할 것은,child.before는 키워드에 일치할 때까지 캐시에 있는 모든 데이터를 가져오는 데 사용됩니다.3-3 용기pod 로그 디렉터리 진입
위의 방법을 사용하여kubectl을 통해 대응하는 용기 로그 디렉터리에 들어가기
# pod
exec_enter_pod = 'kubectl -n %s exec -it %s bash' % (env, pod_name)
#
send_command(child, exec_enter_pod)
#
send_command(child, "cd logs", expected_content='tomcat/logs#')
3-4 로그 내용 가져오기
마지막으로 우리는 로그를 가져오는 명령을 구성하기만 하면 된다
예를 들어grep/tail 명령을 사용하여 로그 파일을 추출하는 명령을 구성합니다
그리고 핸들 대상을 사용하여 이 명령을 보냅니다.
마지막으로 되돌아오는 내용을 세척하면 된다
4. 마지막
글에서pexpect를 사용하여 매우 간단한 장면을 실현하였다
사실상 대부분의 인간과 기계의 대화 자동화 상호작용은 그것으로 실현될 수 있다. 예를 들어 로그 다운로드, 실시간 설정, 원격 패키지 다운로드 등이다.
이상은python 기반pexpect 라이브러리에서 로그 정보를 자동으로 가져오는 상세한 내용입니다. 더 많은python pexpect 라이브러리에서 로그를 자동으로 가져오는 것에 대한 자료는 저희 다른 관련 글에 주목하십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.