본문 바로가기

BigData/Splunk

[Splunk] 설치 전 OS 환경설정!! - Splunk A to Z 설치 정복 1

반응형

Splunk 설치 전 OS 환경설정 (Linux)

  • Ulimit 설정

Splunk Unix/Linux 환경에 운용할 때, 잊지 말고 꼭 확인해야 할 것이 바로 ulimit값 입니다.

Unix/Linux 시스템은 원래 다중 사용자를 염두에 두고 만들어진 시스템이기 때문에시스템 전체가 사용할 리소스 뿐만 아니라, 각 사용자에게 허용할 시스템 리소스에 제약을 걸 수 있습니다. Unix/Linux를 설치하였을 때 기본으로 허용되는 시스템 리소스 한계가 너무 낮기 때문에 꼭 바꿔주어야 합니다

 

 

File size

  • ulimit -f
  • splunk 의 bucket을 압축해제 했을 때 매우 클 수 있기 때문에 unlimited 또는 충분히 커야 합니다.

Open files

  • ulimit -n
  • 최소 8192 이상 설정되어 있어야 하고, Splunk전용의 서버라면 충분히 크게 설정해 줍니다. (저는 보통 100,000 정도 설정합니다. )
  • /etc/sysctl.conf에 설정되는 fs.file-max 값은 커널 전체에 적용되는 값입니다. 사용자 개별 설정인 ulimit -n 값은 당연히 fs.file-max값보다는 작아야 합니다. 

max user processes

  • ulimit -u
  • 최소 64k 이상 설정하시기 바랍니다. 

data segment size

  • ulimit -d
  • 최소 1073741824 bytes (1GB) 이상 설정되어야 합니다. 시스템을 확인해보고 위의 값보다 작다면 /etc/security/limits.conf 파일을 수정합니다.

splunk 라는 OS사용자로 운영중인 경우 open files값과 max user processes수을 각각 100,000으로 설정하려면, limits.conf 파일의 가장 아래 부분에 다음과 같은 라인을 추가 합니다.

splunk      hard     nofile      100000

splunk      soft      nofile      100000

splunk      hard     nproc      100000

splunk      soft      nproc      100000

사용자의 ulimit 값을 변경했으면, telnet 또는 ssh세션을 로그아웃하고 재 로그인 합니다.

그리고 ulimit -a 명령으로 적용되었는지 확인합니다.  

 

  • THP 설정

최신버전의 RedHat, CentOS, Ubuntu에는 대`용량 메모리 관리를 위해서 THP설정이 기본으로 Enable 되어 있습니다. 그런데 이 설정이 enable 되어 있으면 오라클 DB의 경우 I/O throughput 성능이 30% 정도 감소한다는 보고가 있습니다. THP기능의 swappable hugepage 기능 때문이라고 합니다.

 

  • 설정방법

$cat /sys/kernel/mm/transparent_hugepage/enabled

[always] never

 

: 대괄호 안에 나오는 값이 설정된 값인데, 위와 같이 [always]라고 나오면, 항상 enable되어 있다는 의미이고 diable 시켜야 합니다. -> EnableSystem Hang 유발 가능

> 수정 대상 : /sys/kernel/mm/transparent_hugepage/enabled

> 수정 내용 : 아래 커멘트 수행 (재 시작시 초기화 됨)

 

echo never > /sys/kernel/mm/transparent_hugepage/enabled

> 영구삽입 방법 : /etc/grub.conf 파일의 kernel 라인에 transparent_hugepage=never 설정 추가

 

  • UDP 설정

UDP를 통해 다량의 보안 장비 syslog데이터를 수집하는 경우, UDP 특성상 패킷 drop이 많이 발생할 수 있습니다. UDP라서 완전히 손실을 없애기는 힘들지만 다음과 같은 방법으로 손실을 거의 없앨 수 있습니다.

UDP 패킷 손실이 생기는 주된 이유는 다음과 같습니다.

  • OS Kernel 레벨에서 충분치 않은 버퍼 크기
  • 일반 Linux배포본를 설치하면, Kernel parameter에 대한 기본 값이 충분치 크지 않기 때문에, 반드시 수정해서 늘려줘야 합니다
  • UDP를 수신하는 어플리케이션(Heavy Forwarder등)이 충분히 빠르게 처리하지 못하는 경우

OS버퍼에서 해당 메세지가 넘쳐서 밀려나가기 전에 어플리케이션에서 받아가야 하는데, 빠르게 동작하지 못하는 경우에는 놓칠 수 있습니다. 기본적으로 어플리케이션 프로세스의 성능 튜닝이 필요하겠지만, Splunk에서는 buffer 크기 조정 및 persistentQueue를 enable시켜서 문제를 완화할 수 있습니다. 

 

1) OS 레벨에서 drop되는 UDP 패킷의 양 모니터링 방법

  • netstat -su 
    IcmpMsg:
        InType3: 9372
        InType8: 1
        OutType0: 1
        OutType3: 9372
    Udp:
        57 packets received
        9372 packets to unknown port received.  
       
    0 packet receive errors        ( <--- drop된 패킷 수)
        9427 packets sent
    ...

2) 다음 방법으로 splunk에서 scripted input으로 위의 내용을 주기적으로 수집해서 증가량 모니터링

  • scripted input으로 "netstat -su" 1분 주기로 실행해서 indexing
  • 적절한 props.conf 설정 필요 (아래와 유사하게 설정하시면 될 듯합니다. 일반적인 내용이므로 생략…)

§  SHOULD_LINEMERGE = true

§  BREAK_ONLY_BEFORE = IcmpMsg

§  DATETIME_CONFIG = CURRENT

 

수집후에는 "packet receive" 앞에 있는 숫자를 적절히 필드 추출 합니다..

그리고 charting을 하여 패킷유실 추이를 모니터링 할 수 있습니다.

3) root 계정으로 아래를 수행

  • sysctl -w net.core.rmem_max=33554432
  • sysctl -w net.ipv4.udp_mem='262144 327680 393216'
  • sysctl -w net.core.netdev_max_backlog=2000

4) 재부팅시에도 반영될 수 있도록 위의 내용을 /etc/sysctl.conf 파일에 반영

  • Splunk에서 buffer크기 및 persistent queue 설정
  • UDP input을 정의한 해당 inputs.conf 파일에 아래와 같이 설정

[udp://10541]
_rcvbuf = 16777216
queueSize = 16MB
persistentQueueSize = 128MB


반응형