LogParser를 이용한 exchange 로그 분석
12420 단어 Exchange
최근에 만든 exchange 모니터링 시스템에서 로그 로그를 분석해야 하는데 또 그를 꺼내서 상세하게 연구했다.
LogParser 기본 용도는 다음과 같습니다.
Input Formats는 분석 로그 파일 형식에 따라 내장된 일부 해상도를 선택할 수 있습니다. 그 중에서 가장 자주 사용하는 CSV 형식입니다.
Output Formats 출력 파일의 형식은 명령행 모드에서 처리된 데이터를 내보내기 처리할 때 주로 사용됩니다.
Query Syntax는logparser로 로그 파일을 분석할 때 파일을 데이터베이스 테이블로 이해할 수 있으며, 로그 파일에 대한 조회 필터링 등 기본적인 sql 문장을 실행할 수 있습니다.
LogParser의 또 다른 강력한 점은 COM+로 변환하여 다른 언어를 호출할 수 있다는 것이다. 예를 들어 exchange 로그를 분석할 때 나는 사용한다.net에서 로그를 2차 처리합니다.
이번 Exchange 로그 분석 방향:
exchange 서버는 여러 개의 집단이기 때문에 로그는 여러 서버에 분산되고 로그는 중복되지 않기 때문에 이용합니다.net는 인터넷 이웃을 통해 여러 서버의 로그 디렉터리에 접근한 후 디렉터리에 대해 정해진 시간에 로그를 캡처하고 LogParser를 이용하여 로그를 간단하게 필터링한 후 데이터베이스에 부칩니다.프론트 데스크톱은 쏟아진 원시 데이터를 통해 데이터 분석을 한다.
기본 코드 구현:
1 using (IdentityScope c = new IdentityScope("mossadmin", "inet", "password")) //
2 {
3 var logs = System.IO.Directory.GetFiles(LogPath, "*.log") // ,
4 .Where(f => int.Parse(f.Substring(f.LastIndexOf('\\') + 7, 8)) >= _config.fileDT)
5 .OrderBy(f => int.Parse(f.Substring(f.LastIndexOf('\\') + 7, 8)))
6 .ToList();
7
8 if (logs.Count > 0)
9 {
10 DelOldLog(_config);
11 logs.ForEach(f =>
12 {
13 bind(f,_config.MacName);
14 _config.fileDT = int.Parse(f.Substring(f.LastIndexOf('\\') + 7, 8));
15 _config.modifyDT = new FileInfo(f).LastWriteTime;
16 });
17 }
18 }
LogParser 처리:
1 static void bind(string logPath,string macName)
2 {
3 LogQuery oLogQuery = new LogQuery();// LogPaser
4
5 TsvInputFormat oTsvInputFormat = new TsvInputFormat();//
6 LogRecordSet oRecordSet;
7 string query = string.Empty;
8
9 DataTable dt = new DataTable();
10 #region --Log “reccode=”
11 query = @"select * from '" + logPath + "' where [event-id]='RECEIVE'";
12
13 oTsvInputFormat.nSkipLines = 4;
14 oTsvInputFormat.iCodepage = 65001;
15
16 oRecordSet = oLogQuery.Execute(query, oTsvInputFormat);
17 for (int i = 0; i < oRecordSet.getColumnCount(); i++)
18 {
19 dt.Columns.Add(oRecordSet.getColumnName(i));
20 }
21 dt.Columns.Add("MacName");
22 //
23 for (; !oRecordSet.atEnd(); oRecordSet.moveNext())
24 {
25 DataRow dr = dt.NewRow();
26 for (int i = 0; i < oRecordSet.getColumnCount()-1; i++)
27 {
28 dr[oRecordSet.getColumnName(i)] = oRecordSet.getRecord().getValue(oRecordSet.getColumnName(i));
29 }
30 dr["MacName"] = macName;
31 dt.Rows.Add(dr);
32 }
33
34 oRecordSet.close();
35 #endregion
36
37 SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);
38 sqlbulkcopy.DestinationTableName = "LM_webLog";//
39 sqlbulkcopy.WriteToServer(dt);
40
41 Console.WriteLine(dt.Rows.Count + ":" + logPath);
42
43
44 }
Exchange 로그 형식:
#Software: Microsoft Exchange Server
#Version: 14.0.0.0
#Log-type: Message Tracking Log
#Date: 2012-12-19T00:02:50.276Z
#Fields: date-time,client-ip,client-hostname,server-ip,server-hostname,source-context,connector-id,source,event-id,internal-message-id,message-id,recipient-address,recipient-status,total-bytes,recipient-count,related-recipient-address,reference,message-subject,sender-address,return-path,message-info,directionality,tenant-id,original-client-ip,original-server-ip,custom-data
Exchange의 로그 형식은 표준 csv와 약간 다르다. 파일 헤더에 주석이 있는 파일을 볼 수 있다. LogParser를 이용하여 처리할 때 정확한 열을 읽을 수 없다. 그리고 자신이 가지고 있는 도움말 문서를 연구할 때 원래 몇 줄을 뛰어넘어 처리할 수 있는지 지정할 수 있다.모든 것이 구글의 시대에 점점 더 열심히 자신의 도움말 문서를 보러 가지 않는다. 이것은 앞으로 구글에 너무 의존해서는 안 된다.
oTsvInputFormat.nSkipLines = 4; //
oTsvInputFormat.iCodepage = 65001;//
요약:
Logparser는 텍스트 형식 로그 처리를 할 때 확실히 강력하고 기본적으로 모든 형식의 데이터를 식별할 수 있으며 결합할 수 있다.net는 모든 것을 데이터 분석에 사용하고 데이터 가져오는 데 강력한 도구이며 속도가 매우 빠르다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Office 365】계층형 주소록의 계층구조를 리스트에 출력하는 PowerShell 스크립트를 작성했다Office 365(Exchange Online)의 계층형 주소록의 계층 구조를 목록에 출력하는 PowerShell 스크립트를 작성했으므로 메모. 가공 용이성 중시의 리스트를 출력하는 스크립트와 확실히 알기 쉬움 중...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.