O Openldap (especificamente versão 2.4) armazena o histórico de transações nos arquivos de log por padrão no diretório de dados do ldap (então /var/lib/ldap/log.###########
). Atualmente, esses arquivos de log ocupam muito espaço, nunca são removidos automaticamente e crescem infinitamente. A remoção manual de logs antigos funciona bem, mas eu gostaria de limitar a quantidade de logs que o slapd
mantém automaticamente.
Eu sei que esses logs de transação são usados para recuperar o ldap no caso de uma falha catastrófica. No meu cenário, o ldap é regularmente limpo e preenchido por meio de um script (isso não é usado para contas de login do sistema). Por isso, não preciso me preocupar com a recuperação, no caso de uma falha, é aceitável executar o script novamente. Por outro lado, o wipe regular / população de ldap inclui muitas transações, então esses logs de transação se acumulam rapidamente.
logrotate
tem potencial aqui, mas se o log de transações mais recente for removido, o slapd
não será iniciado (ele reclamará sobre a necessidade de executar a recuperação). Porque eu não posso confiar nos nomes de log (porque slapd
mantém muitos logs pequenos, incrementando o número do arquivo de log como vai) Eu gostaria de usar as configurações de banco de dados Berkeley que cria esses logs. Posso contar com as datas de acesso / criação (a data de modificação mais recente é o log de transações mais recente), mas ainda prefiro usar Berkeley, se possível.
As configurações dos logs de transações são controladas pelas configurações de banco de dados de Berkeley em /var/lib/ldap/DB_CONFIG
. O exemplo DB_CONFIG
que vem com o openldap especifica algumas configurações de log de transação:
set_lg_regionmax 262144
set_lg_bsize 2097152
De acordo com a documentação da Oracle sobre Berkeley:
set_lg_regionmax: Set the size of the underlying logging area of the
Berkeley DB environment, in bytes. The log region is used to store
filenames, and so may need to be increased in size if a large number of
files will be opened and registered with the specified Berkeley DB
environment's log manager.
Portanto, isso parece apenas definir o tamanho do arquivo que rastreia os arquivos de log de transações.
set_lg_bsize: Set the size of the in-memory log buffer, in bytes.
Isto parece controlar quanto de RAM é alocado para o buffer de transação.
Os arquivos log.###########
no diretório de dados do ldap são todos 10485760
bytes, o que parece corresponder muito a set_lg_bsize
( 10485760 / 5 = 2097152 = set_lg_bsize
), embora eu não tenha certeza se isso é uma coincidência.
Minha interpretação disso é que $lg_bsize
do histórico de transações é armazenado na memória por vez. Quando esse limite é excedido, ele envia um pouco do histórico de transações para o arquivo de log mais recente e cria um novo log se o log atual atingir um determinado tamanho.
De acordo com a documentação da Berkeley, os logs de transação podem ser removidos configurando o sinalizador DB_LOG_AUTOREMOVE
no DB_CONFIG
.
DB_LOG_AUTOREMOVE: If set, Berkeley DB will automatically remove log
files that are no longer needed.
No entanto, quando adicionei isso ao DB_CONFIG
:
set_flags DB_LOG_AUTOREMOVE
e reiniciado slapd
Não notei diferença. Eu removi os logs de transações antigos e executei o script de preenchimento do ldap que possuí, e consegui acumular 290MB
nos logs de transações. Ainda não parece estar limitando os logs. A razão para isso pode estar relacionada à frase: that are no longer needed
Como se configura a remoção automática dos logs de transação de slapd
usando o arquivo Berkeley DB DB_CONFIG
?