서버에서 로그 관리를 어떻게 구현 했습니까?


13

다른 사람들이 어떻게 로그 관리 시스템을 구현하는지 알아 내려고 노력 중입니다.

저는 20-30 대의 Linux 서버와 몇 개의 Windows 상자를 가지고 있습니다 (대부분 가상화 됨). 대부분의 자동화 된 작업을 수행하기 위해 많은 Perl 및 Bash 스크립트를 사용하며 로깅을 표준화하려고합니다.

스크립트 및 syslog-ng의 로깅을 위해 log4perl 및 log4sh에서 중앙 로깅 서버의 모든 로그를 가져 왔습니다. Enterprise Edition이 꽤 비싸고 모든 서버에서 무료 라이센스 제한을 초과 할 수도 있지만 splunk에 대해 읽었습니다.

견본 및 로그 검사와 같은 다른 도구를 보았지만이 모든 조각이 어떻게 결합되는지 잘 모르겠습니다 ... 모든 권장 사항을 높이 평가할 것입니다!


답변:


8

약 30 대의 서버가 있으며 syslog를 사용하여 모든 로그를 단일 로깅 서버로 보냅니다. 백업의 경우 모든 머신은 logrotate를 사용하여 기존 로그의 회전 및 삭제를 처리하면서 며칠 동안 로컬로 자체 로그를 저장하도록 구성됩니다.

각 응용 프로그램 서버는 작은 perl 스크립트를 실행하여 로그를 syslog로 보내고 로그 파일로 전달합니다 (아래 perl 스크립트).

그런 다음 로그 호스트에는 기본적으로 들어오는 로그를 의심스러운 것으로 확인하는 logcheck와 유사한 일부 사용자 지정 스크립트가 있습니다.

또한 모든 호스트의 모든 전자 메일을 한 곳으로 보내므로 프로그램이 그런 식으로 불만을 제기하면 모든 메시지를받습니다. 이것은 이론적으로 프로그램이 작동하고 분석 할 수있는 단일 사서함으로 이동할 수 있습니다.

다음은 로깅 펄 스크립트입니다. 그것은 프로그램의 출력을 파이프로 연결하여 작동 한 다음 출력을 syslogs하고 다시 뱉어내어 다른 곳으로 보낼 수 있습니다 (멀티 로그로 보냅니다). syslog로 이동하기 위해 -q 옵션을 제공 할 수도 있습니다.

#!/usr/bin/perl

use Sys::Syslog;
use Getopt::Long;

$SERVER_NAME = `hostname`;
chomp $SERVER_NAME;
$FACILITY = 'local0';
$PRIORITY = 'info';

GetOptions ('s=s' => \$SERVER_NAME, 'f=s' => \$FACILITY, 'p=s' => \$PRIORITY, 'q+' => \$quiet);

#print "$SERVER_NAME\n$FACILITY\n$PRIORITY\n";

#Sys::Syslog::setlogsock('unix');
openlog ($SERVER_NAME,'ndelay',$FACILITY);

if (!($quiet)) {syslog($PRIORITY,"Logging Started -- Logger version 1.1");}

$| = 1;

while (<>) {
    if (!($quiet)) {print $_ unless $_ =~ /^\s+$/};
    chomp;
    syslog($PRIORITY,$_) if $_;
}

closelog;

$| = 0;

이 스크립트는 매우 유용하지만 클라이언트의 syslog와 서버의 syslog-ng (또는 클라이언트의 syslog-ng)를 사용하면 로그 필터링을보다 강력하게 제어하여이 기능을 사용할 수 있습니다.
thepocketwade

@thepocketwade : 매우 사실입니다. 추가 기능이 필요하지 않았습니다.
jedberg

2

아직 구현하지는 않았지만 모든 로그 생성 시스템을 rsyslog로 옮기고 syslog의 수집기로 작동하는 요새 유형 서버를 구현할 계획입니다. 거기에서 Splunk의 무료 버전은 정보를 얻는 데 필요한 모든 것을 할 수 있다고 생각합니다.

이제 그것을 구현하기 위해 ...


2

중앙 syslog 호스트를 사용합니다. 각 에지 시스템은 * .debug를 중앙 로그 호스트로 보냅니다. 중앙 syslog 호스트는 syslog-ng를 실행하며 각 머신이 해당 날짜에 이름이 지정된 자체 파일을 생성하도록 로그를 분할하는 규칙이 있습니다. 또한 모든 파일을 단일 파일로 덤프하여 logcheck.sh의 하위 항목을 실행합니다.

하루에 한 번 나는 로그 압축기를 실행하여 7 일보다 오래된 로그를 압축하고 28 일보다 오래된 것을 삭제합니다. 이 둘 사이에서 로그는 서버에서 35 일의 예상 수명을 제공합니다. 즉, 모든 로그는 매월 백업해야하며 최대 2 년 동안 복구 할 수 있습니다.

스토리지가 강하지 만 커버리지를 보장하는 가장 좋은 방법 인 것 같습니다.


비슷한 시스템이 있지만 로그 서버에 로그를 필터링 할 미리 정의 된 폴더 (메일, 인증, catchall)가 있습니다. 어느 시점에서 나는 splunk를 사용하고있었습니다. 로그 서버에서 splunk 서버로 데이터를 쉽게 전달할 수있었습니다.
thepocketwade

1

중앙 로깅의 경우 LogZilla를 적극 권장 합니다 . 우리는 그것을 1 년 이상 사용해 왔으며 절대적으로 그것을 좋아합니다. UI는 배우고 사용하기가 매우 쉬우 며 설치에 약 1 시간이 걸렸습니다.

그렇지 않은 경우에도 스크립트 기반 모니터링에서 벗어나려고 노력해야합니다. 모니터링과 정확히 일치합니다. 달성하려는 것은 관리입니다. Top talker 등의 문제를 해결하면 스크립트 기반 모니터링에 의해 발생하는 "화재"의 양이 크게 줄어 듭니다. 다음은 syslog 관리에 대한 매우 유용한 기사입니다.

http://www.cisco.com/en/US/technologies/collateral/tk869/tk769/white_paper_c11-557812.html


0

우리는 엔터프라이즈 로깅을 위해 LogLogic의 어플라이언스를 사용합니다. syslog를 기반으로하기 때문에 모든 * nix 박스는이를 사용하는 데 아무런 문제가 없습니다. Windows 서버에 설치해야하는 작은 앱이 있습니다. REGEX 쿼리를 포함하여 원하는 항목을 검색 할 수 있으며 상당히 많은 부하를 처리 할 수있는 것 같습니다 (Active Directory 설정만으로도 트래픽이 많이 발생합니다).


1
그들의 제품을 조심스럽게 평가하십시오 ... 나는 그들로부터 약 10 개의 전화 / 이메일을 받았으며, 그들은 매우 영구적입니다.
Flamewires

요즘에는 거의 모든 공급 업체에 대해 말할 수 있으며 실제 제품의 기능 자체와는 관련이 없습니다. DELL, EMC 등이 얼마나 자주 여기를
두드 리거나

0

중앙 로깅 서버의 경우 내 Octopussy 프로젝트를 살펴볼 수 있습니다 .

처음에는 많은 일이 있지만,이 로그로 많은 일을 할 수 있습니다!


0

다음은 중앙 로깅 및 분석의 모든 측면을 다루는 자습서입니다.

링크 : http://crunchtools.com/centralizing-log-files/


또한 scriptlog라고하는 내부적으로 (최종 오픈 소스이지만 현재 작업중인) 프로젝트에 대해 log4sh를보고 있습니다. string 또는 CRITICAL 문자열 인 경우이를 모니터링하는 nagios 플러그인도 있습니다. 내가 그것을 얻을 때 게시 할
예정
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.