로그프레소 소나가 구동되는 Java에 setcap이 적용되어있지 않을 경우, root가 아닌 계정(예: logpresso)로 소나 실행 시 443, 514 포트 등 1000 이하의 포트가 열리지 않습니다. 로그프레소 셸에서 httpd.bindings 명령어로 확인해보면 443 port가 closed 상태이고, 다시 httpd.openSsl 명령어를 수행해도 열리지 않습니다. (이 경우 4443 포트가 대신 열립니다)
logpresso> httpd.bindings
Port Bindings
---------------------
...
/0.0.0.0:4443 (ssl: key logpresso-web, trust null), opened, default context: sonar, ...
/0.0.0.0:443 (ssl: key logpresso-web, trust null), closed, default context: sonar, ...
...
logpresso> httpd.openSsl 443 sonar logpresso-web
Permission denied
이 경우 다음 절차를 통해 setcap을 진행한 후 다시 로그프레소를 기동하면 해당 포트를 사용할 수 있습니다. 이 작업을 수행하기 위해서는 sudo 권한을 가진 계정이 필요합니다.
# 로그프레소 소나를 구동하는 Java 경로 확인
$ echo $JAVA_HOME
/opt/jdk/21.0.7-tem
# Java에 setcap 적용
$ sudo setcap cap_net_bind_service,cap_net_raw,cap_sys_time=+ep $JAVA_HOME/bin/java
# setcap 적용 여부 확인
$ getcap $JAVA_HOME/bin/java
/opt/jdk/21.0.7-tem/bin/java cap_net_bind_service,cap_net_raw,cap_sys_time=ep
# Jli 경로 확인
$ JLI_DIR=$(find $JAVA_HOME -type f -name libjli.so -exec dirname {} \;)
$ echo $JLI_DIR
/opt/jdk/21.0.7-tem/lib
# java.conf 파일 생성
$ sudo echo "$JLI_DIR" > /etc/ld.so.conf.d/java.conf
# 만약 위 명령어 수행 시 Permission denied 메시지가 뜬다면 `sudo vi /etc/ld.so.conf.d/java.conf` 로 파일을 열어서 $JLI_DIR에 해당하는 경로를 붙여넣기 합니다
$ cat /etc/ld.so.conf.d/java.conf
/opt/jdk/21.0.7-tem/lib
# ldconfig 설정
$ sudo ldconfig
위 작업 수행 후 로그프레소 소나를 다시 기동하면 443 포트를 열 수 있습니다. 514 포트를 시스로그 서버로 열 수도 있습니다.
logpresso> httpd.openSsl 443 sonar logpresso-web
opened https server
logpresso> httpd.bindings
Port Bindings
---------------------
...
/0.0.0.0:443 (ssl: key logpresso-web, trust null), opened, default context: sonar, ...