slapd 는 자기 로그 파일을 직접 만들지 않는다. syslog 로 보낼 뿐이다. 그래서 로그가 안 보인다는 문제는 대개 수준이 낮아서이거나 syslog 가 그 facility 를 어디로도 보내지 않아서다. 둘을 따로 확인해야 한다.
cn=config 방식에서는 olcLogLevel 을 고친다. 재기동이 필요 없다.
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
현재 값을 확인한다.
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config -LLL -s base olcLogLevel
slapd.conf 를 쓰는 오래된 구성이라면 loglevel 지시어를 고치고 재기동한다.
loglevel stats
값은 비트 플래그다. 이름을 여러 개 나열하면 OR 로 합쳐진다. 숫자로도 쓸 수 있다.
| 이름 | 값 | 내용 |
|---|---|---|
none |
0 | 끈다. 단 심각한 메시지는 여전히 나온다 |
trace |
1 | 함수 호출 추적 |
packets |
2 | 패킷 처리 |
args |
4 | 함수 인자 |
conns |
8 | 연결 관리 |
BER |
16 | 송수신 패킷 덤프 |
filter |
32 | 검색 필터 처리 |
config |
64 | 설정 처리 |
ACL |
128 | 접근 제어 평가 |
stats |
256 | 연결·조작·결과 요약 |
stats2 |
512 | 응답으로 나간 항목 |
shell |
1024 | shell 백엔드 |
parse |
2048 | 항목 파싱 |
sync |
16384 | 복제(syncrepl) |
any |
-1 | 전부 |
olcLogLevel: stats sync
olcLogLevel: 16640
운영에서는 stats 가 기본이다. 누가 언제 무엇을 bind · search 했는지가 남는다. 접근 제어가 의심되면 stats ACL, 복제 문제라면 stats sync 를 잠시 켠다.
any 는 오래 켜 두지 않는다. 디스크를 빠르게 채우고 성능도 떨어뜨린다. BER 은 패킷 내용을 그대로 덤프하므로 비밀번호가 평문으로 로그에 남을 수 있다. 문제 재현 중에만 켜고 바로 되돌린다.
수준을 올렸는데도 아무것도 안 나온다면 syslog 쪽이다. slapd 는 기본적으로 local4 facility 로 보낸다.
rsyslog 에 규칙을 넣는다.
# /etc/rsyslog.d/slapd.conf
local4.* /var/log/slapd.log
systemctl restart rsyslog
tail -f /var/log/slapd.log
facility 를 바꾸려면 olcLogFile 이 아니라 기동 옵션의 -l 을 쓴다. slapd.conf 구성이라면 syslog 지시어도 쓸 수 있다.
# /etc/sysconfig/slapd (RHEL 계열)
SLAPD_OPTIONS="-l LOCAL4"
systemd + journald 환경에서는 파일로 빼지 않고 저널에서 바로 보는 편이 간단하다.
journalctl -u slapd -f
journalctl -u slapd --since "10 min ago" | grep -i err
설정을 건드리지 않고 한 번만 자세히 보고 싶으면 slapd 를 전면에서 띄운다. 서비스를 내린 상태여야 한다.
systemctl stop slapd
slapd -h "ldap:/// ldapi:///" -d 256 -u ldap -g ldap
-d 는 같은 비트 플래그를 받는다. -d 0 도 전면 실행 자체는 유효해서, 기동 오류만 화면에서 확인할 때 쓴다. Ctrl+C 로 끝낸 뒤 서비스를 다시 올린다.
-d 로 띄운 slapd 는 데몬으로 내려가지 않는다. 터미널이 끊기면 프로세스도 끝나므로 운영 기동에 쓰지 않는다.
ACL 로그로 확인할 접근 제어 규칙.