Splunk best practice: THP en Ulimit

CINQ / Data  / Splunk best practice: THP en Ulimit

Splunk best practice: THP en Ulimit

Wanneer je Splunk installeert op een Linux systeem is het in bijna alle gevallen aan te raden om specifieke settings op Linux aan te passen voor een betere performance van Splunk.

In deze post noemen we twee van deze settings, die belangrijk zijn om aan te passen op een Linux systeem: THP en Ulimit.

THP

“THP has been associated with degradation of Splunk Enterprise performance in at least some Linux kernel versions (for example, the 2.6.32 kernel used in Red Hat Enterprise Linux 6). When enabled, THP can significantly degrade overall system performance on systems that run Splunk Enterprise because of several issues:”

Deze quote uit de Splunk documentatie zegt genoeg. Voor een betere performance zullen we THP dus moeten disablen.
Meer over Transparent Huge Pages vind je via de volgende link: THP

Step-by-step guide THP settings

Volg onderstaande stappen om de settings voor THP persistent te maken:

  • Ga naar /etc/rc.d op het Linux file systeem
  • Pas de file rc.local aan met de onderstaande settings
rc.local
touch /var/lock/subsys/local
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
Executable

Vergeet niet om het bestand rc.local executable te maken →
chmod ug+x rc.local

Na een reboot van het Linux systeem staan deze waardes nu goed voor Splunk.
Mochten de waardes (nog) niet goed staan, dan kun je deze dynamisch aanpassen. Je hoeft Splunk dus niet te herstarten.

Vanaf de CLI:

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

Controle doe je door het uitvoeren van een cat op de files:

[root@machineXYZ rc.d]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@machineXYZ rc.d]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

De setting tussen de [ ] geeft de huidige waarde aan en deze is per direct actief.

Ulimits

Daarnaast is het van belang om er voor te zorgen dat je de ulimits van Linux juist instelt voor betere performance van je Splunk omgeving.
Voor meer info over ulimits uit de Splunk documentatie: klik hier

Step-by-step guide ulimits

Om hier persistent de juiste waarde voor je systemen aan toe te kennen voer je de volgende acties uit:

  • Run een Health Check vanuit de Monitoring Console op de Master Node en bekijk het rapport
  • Bij een andere uitkomst dan success volg je de hieronder beschreven actie

Maak een file aan in de directory /etc/security/limits.d/ met de naam 99-splunk.conf (of een andere naam) met de volgende inhoud:

99-splunk.conf
splunk hard core 0
splunk hard maxlogins 10
splunk soft nofile 65535
splunk hard nofile 65535
splunk soft nproc 20480
splunk hard nproc 20480
splunk soft fsize unlimited
splunk hard fsize unlimited

Let op, wanneer je een andere user gebruikt dan Splunk, dan moet je uiteraard de naam van deze user hier invullen! Believe me it happens…
Je maakt deze file aan in limits.d in plaats van het aanpassen van de limits.conf in /etc/security, dit in verband met eventuele automatisering van het bestand. De waardes zijn aanbevolen waardes vanuit Splunk Professional Services.

Een bekend probleem is dat deze settings niet altijd worden overgenomen.
Zoals ik al zei je komt een heel eind met Google 😉
Om dit werkend te krijgen is een aanpassing nodig in het start script voor Splunk in de init.d directory.

/etc/init.d/splunk aanpassen met de volgende waardes:

splunk start script

#!/bin/sh
#
# /etc/init.d/splunk
# init script for Splunk.
# generated by 'splunk enable boot-start'.
#
# chkconfig: 2345 90 60
# description: Splunk indexer service
#
RETVAL=0

. /etc/init.d/functions

splunk_start() {
  echo Starting Splunk...
  ulimit -Hn 65535
  ulimit -Sn 65535
  "/opt/splunk/bin/splunk" start --no-prompt --answer-yes
  RETVAL=$?
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/splunk
}
splunk_stop() {
  echo Stopping Splunk...
  "/opt/splunk/bin/splunk" stop
  RETVAL=$?
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/splunk
}
splunk_restart() {
  echo Restarting Splunk...
  "/opt/splunk/bin/splunk" restart
  RETVAL=$?
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/splunk
}
splunk_status() {
  echo Splunk status:
  "/opt/splunk/bin/splunk" status
  RETVAL=$?
}
case "$1" in
  start)
    splunk_start
    ;;
  stop)
    splunk_stop
    ;;
  restart)
    splunk_restart
    ;;
  status)
    splunk_status
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit $RETVAL

In bovenstaand script is het volgende aangepast:

echo Starting Splunk...
 ulimit -Hn 65535
 ulimit -Sn 65535

Door bovenstaande wijziging staan de ulimits bij een restart van Splunk goed voor Splunk. Let op!! Je moet eerst de betreffende Splunk instantie stoppen en daarna starten. Splunk restart werkt niet. De overige settings uit limits.d worden alleen actief bij een reboot, dit kun je plannen.

We hopen dat we je Splunk omgeving hiermee weer een beetje beter en sneller hebben gemaakt. Je kunt de toegepaste settings opnieuw controleren in de health check op de master, deze zouden nu allemaal een positief resultaat laten zien.

Wil je hier meer over weten of kom je er niet helemaal uit? Laat een reactie achter in de comments of stuur een berichtje naar Bob of Matthias!

No Comments
Post a Comment