FTP를 통해 파일 테일링

FTP를 통해 파일 테일링

내 Windows 데스크톱에서 원격 서버에 있는 대용량 로그 파일에 액세스하려고 합니다. 나오직SSH 액세스가 아닌 이 원격 시스템에 대한 FTP 액세스 권한이 있어야 합니다.

현재 저는 WinSCP를 사용하여 FTP를 통해 전체 파일을 가져오고 있습니다. 이는 매번 전체 파일을 전송해야 함을 의미합니다. 그러나 로그 파일인 경우 마지막 몇 줄만 필요할 것 같습니다.

대역폭이 심각하게 제한되어 있어 전체 파일을 전송하는 데 몇 분이 걸리기 때문에 이는 특히 실망스럽습니다.

쉘 액세스가 있는 경우 tail -100마지막 100줄을 얻는 것과 같은 방법을 사용하여 쉽게 달성할 수 있습니다.

FTP를 통해 이 작업을 수행할 수 있는 솔루션을 찾고 싶습니다. 연속적인 꼬리일 필요는 없으며 일회성으로도 충분합니다.

답변1

당신이 하고 싶은 일은 확실히 FTP를 통해 할 수 있습니다. 기술적으로는 중단된 파일 다운로드를 재개할 때 모든 FTP 클라이언트가 수행하는 작업과 동일합니다.

사용자 관점에서는 FTP 클라이언트가 지정된 수의 후행 바이트만 명시적으로 다운로드하도록 지원하는지 여부는 알 수 없습니다.

그러나 일부 FTP 클라이언트에서는 이전에 다운로드한 파일의 새로운 내용을 다운로드할 수 있습니다.

특히 WinSCP의 경우 로그 파일 다운로드를 시작하기만 하면 됩니다. 그런 다음덮어쓰기 확인 프롬프트,재개하다(드롭다운 메뉴에 있습니다.)아니요단추). 이 옵션은 소스 파일이 대상 파일보다 큰 경우에만 사용할 수 있습니다.

로그의 마지막 몇 줄만 다운로드하려면 다운로드를 시작하기 전에 로그 파일보다 약간 작은 크기의 더미 로컬 파일을 생성하여 WinSCP를 속일 수 있습니다.

위의 트릭을 쉽게 자동화할 수도 있습니다.

fsutil file createnew mylog.log 100000000
winscp.com /command "open mysession" "get -resume /path_to_log/mylog.log" "exit"

에 대한 대안은 다음을 fsutil참조하세요.Windows 시스템에서 대용량 파일을 빠르게 생성하시겠습니까?

더 많은 노력을 기울이면 먼저 로그 파일 크기를 확인하고 로그 크기보다 몇 킬로바이트 작은 더미 파일 크기를 자동으로 계산하도록 스크립트를 수정할 수 있습니다.

답변2

WinSCP를 사용하여 이 작업을 어떻게 수행할 수 있는지 모르겠습니다. 실제로 불가능할 수도 있지만 일반적으로 다음을 사용할 수 있습니다.나머지명령. 보다RFC 3659. 하지만 파일의 후반부부터 다운로드를 시작할 수 있는지, 아니면 이미 마커를 받아야 하는지는 확실하지 않습니다. RFC 3659는 적어도 STREAM 모드에서는 이것이 가능함을 나타냅니다.

FILE STRUcture를 사용한 STREAM 모드 전송은 데이터 자체 외에 다시 시작 마커가 전송되지 않은 경우에도 다시 시작될 수 있습니다. 이는 필요한 경우 RESTART(REST) ​​명령 및 표준 파일 전송 명령 중 하나와 함께 SIZE 명령을 사용하여 수행됩니다.

답변3

귀하의 요구 사항을 지원하는 소프트웨어에 대해 들어 본 적이 없습니다. 그러나 당신이 프로그래머라면 Perl로 이것을 작성하는 방법을 이해해야 합니다.

여기에서 모든 파일을 얻는 방법의 예를 찾았습니다. 이는 귀하의 결심이 아니지만 수행 방법을 이해하는 데 도움이 됩니다. http://www.perlmonks.org/?node_id=907019

다른 하나는 Net::FTP 라이브러리에 대한 도움말입니다. http://search.cpan.org/dist/libnet/Net/FTP.pm

이것을 사용하면 서버에 대한 FTP 연결을 열 수 있습니다(첫 번째 예). 권한 부여(첫 번째 예)

두 번째 URL은 다음 방법을 사용하여 파일의 마지막 부분을 가져오는 방법을 알려줍니다. ->ascii는 로그 파일이므로 전송 모드를 ascii로 설정합니다. ->size( FILE ) 시작해야 하는 위치를 계산하기 위한 파일 크기 가져오기 -> 다시 시작( WHERE ) 파일 설정 읽기를 시작하려는 파일의 위치 -> 읽기( BUFFER, SIZE [, TIMEOUT ] ) 작은 SIZE 부분을 BUFFER 변수로 직접 읽습니다.

또 다른 함수: length(BUFFER)는 얼마나 많은 데이터를 얻는지 알려줍니다. 0이면 EOF에 도달한 것입니다. ("$BUFFER\n") 단순 인쇄 버퍼 내용을 화면에 인쇄한 것입니다.

주의하세요, 이것은 완전한 해결이 아니라 어떻게 해야 하는지에 대한 방법입니다. 내가 이 글을 쓰는 유일한 이유는 아마도 당신의 작업에 준비된 소프트웨어가 없기 때문일 것입니다.

해당 프로그램을 작성하는 방법을 모른다면 슈퍼유저가 아닌 stackoverflow.com에 문의하세요. 도움을 받을 준비가 되어 있는 프로그래머가 많이 있습니다.

가능하다면 FTP 사이트가 다운로드 재개를 지원하는지 확인하세요. 이 파일의 끝 부분을 읽는 것은 불가능합니다.

또 다른 부분 해결 방법은 하루 또는 한 시간에 한 파일씩 로그 파일을 순환하는 것입니다. 이는 로그 파일이 얼마나 빨리 증가하는지에 따라 달라집니다.

관련 정보