2014-01-06 6 views
0

IIS 로그를 파일 시스템에 기록하도록 Azure 웹 사이트를 구성했습니다. 내 웹 사이트 내에서 관리자가 사이트의 트래픽에 대한 보고서를 볼 수있는 대시 보드 페이지를 만들고 싶습니다.이 보고서는 이러한 로그를 분석하여 생성되었습니다.동일한 웹 사이트에서 Azure IIS 로그에 액세스

DirectoryInfo.GetFiles() 코드로 로그 디렉터리에 액세스하려고 시도했으며 FtpLib를 사용하여 FTP를 통해 연결하려고 시도했습니다.

Azure 외부에서 나는 FTP에 연결하여 로그를 다운로드 할 수 있지만 Azure 웹 사이트에서 실행되는 코드에서 볼 수는 없습니다. Azure가 웹 사이트 코드에서 보내는 FTP 트래픽을 허용하지 않는다고 가정합니다.

사이트 : /site/wwwroot

로그 :

합니다 (FTP를 검사하여) 하늘빛의 폴더 구조는 같은 보이는 가상 디렉터리를 만들 수있는 푸른 포털 내에서 /LogFiles/http/RawLogs

을, 그러나 그들은이다/사이트 내에서만 허용됩니다.

사이트가 Azure 웹 사이트, MVC 4, 통합 파이프 라인, 64 비트, .NET 4.5로 실행 중이며 FTP의 경우 FtpLib v1.0.1.2를 사용 중입니다. FtpLib가 Login()에서 다음 메시지와 함께 실패합니다. 알 수없는 오류 (0x2ee2)

Azure 내에서 로깅을 변경하여 Blob 저장소에 기록 할 수 있다는 것을 알고 있습니다. 그러나 추가 월 비용이 발생합니다. 이 파일에 액세스 할 수있는 다른 옵션이 있습니까?

감사합니다.

편집 :

using (var ftp = new FtpConnection("XXXXXXXX.windows.net", "XXXXXXXX", "XXXXXXXX")) 
{ 
    ftp.Open(); 
    ftp.Login(); //Fails here 
    ftp.SetLocalDirectory(Server.MapPath("~/")); //Temp 
    ftp.SetCurrentDirectory("/LogFiles/http/RawLogs");     

    foreach (var f in ftp.GetFiles("*.log")) 
    { 
     ftp.GetFile(f.Name, f.Name, false); 
     ftp.RemoveFile(f.Name); 
    }    
} 

을 그리고 여기에 파일 시스템 버전 :

//var logRoot = Server.MapPath("~/../../LogFiles/http/RawLogs"); //Throws error about traversal outside of site root 
//var logRoot = "/LogFiles/http/RawLogs"; //Throws error: Could not find a part of the path 'D:\LogFiles\http\RawLogs'. 
var logRoot = "LogFiles/http/RawLogs"; //Throws error: Could not find a part of the path 'D:\Windows\system32\LogFiles\http\RawLogs'. 
foreach (var f in new DirectoryInfo(logRoot).GetFiles("*.log")) 
{ 
    f.CopyTo(root + f.Name, true); 
    f.Delete(); 
} 
+0

LogFiles 폴더의 특정 파일에서 File.ReadAllLines (...)을 사용하여 읽을 수있었습니다. 코드를 확인하십시오. 사실 Directory.GetFiles()를 수행하고 파일을 가져올 수있었습니다. 코드를 확인하십시오. 또는 추가 평가를 위해 코드를 게시하십시오. – ramiramilu

+0

경로가 맞습니까? LogFiles는 보통 루트 폴더와 함께 C :에 저장됩니다. 그러나 나는 D : 당신의 길에 뛰어 드는 것을 봅니다. LogFiles와 Site를 포함하고있는 루트 폴더 뒤에 쓰기 권한이 없다는 것은 꽤 확신합니다. 경로는 C : \ DWASFiles \ Sites \ customname \ VirtualDirectory0 \ Site 및 C : \ DWASFiles \ Sites \ customname \ VirtualDirectory0 \ LogFiles와 같아야합니다. – ramiramilu

+0

예, Azure가 예외로 표시 한 경로입니다. 이 사이트는 가상 머신이 아닌 웹 사이트로 호스팅됩니다. 나는 "D :"를 지정하지 않고, Azure가 그것을 선택합니다. 질문에서 언급했듯이 FTP를 통해 보는 것은 사이트 코드가/site /에 있고 로그가/LogFiles /에 있다는 것을 의미합니다. 물론 이것은 FTP가 직접 파일 시스템에 액세스하는 것이 아니기 때문에 파일의 실제 모습을 추상화 한 것일 수 있습니다. –

답변

1

I 코드를 제공하도록 요청받은 적이, 여기에 FTP 버전 (안 푸른에 로컬로 작동)입니다 로그 파일에 대한 경로와 관련된 문제점을 참조하십시오. AzureWebsites는 C 드라이브를 사용하지만 구현시 D 드라이브를 사용하고 있습니다. Server.MapPath("~")을 사용하고 그 위에 문자열 조작을 수행하여 올바른 ROOT 경로를 얻습니다. 따라서 루트 디렉토리에는 두 개의 디렉토리가 추가로 포함됩니다 (LogFilesSite). 루트 디렉토리가 이미 있으므로 LogFiles 디렉토리에 추가하고 거기에서 모든 파일을 읽으십시오.

+0

고맙습니다. 내가 로컬로 액세스 한 문제는 잘못된 방식으로 파일 시스템에 매핑했기 때문입니다. 작성 당시 올바른 경로는 Server.MapPath ("~ /") + @ ".. \ .. \ LogFiles \ http \ RawLogs"입니다. FTP를 통한 액세스가 차단 된 것처럼 보였으므로 그 애비뉴를 포기했습니다. –

관련 문제