Como especificar o arquivo de log do memcached no RHEL / CentOS

4

Estou executando o memcached 1.4.5 no RHEL5.5. Eu instalei este usando o yum que instalou o script padrão do memcached em /etc/init.d e o arquivo de configuração em /etc/sysconfig/memcached :

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="256"
OPTIONS=""

Tudo está funcionando bem com uma exceção - não consigo descobrir como especificar o local do arquivo de log. Gostaria de colocar o arquivo de log em /var/log , mas a ajuda nem o manual especificam como fazer isso.

É possível conseguir isso usando os scripts base?

    
por Olly 02.12.2010 / 22:18

4 respostas

0

Uma sugestão para criar um log de depuração para o memcached em uma postagem anterior:

Supondo que o usuário nobody tenha permissões de gravação para / tmp, tente o seguinte, observando a posição de 2:

memcached -d -m 3072 -l localhost -p 11211 -u ninguém -v 2 > > /tmp/memcached.log

Se o usuário nobody não puder gravar em / var / log, eu suponho que é possível trocar / tmp com / var / log no comando acima.

    
por 02.12.2010 / 22:44
30

Modifique a linha OPTIONS em /etc/sysconfig/memcached adicionando ">> /var/log/memcached 2>&1" no final. IE

OPTIONS="-vv >> /var/log/memcached 2>&1"
    
por 29.11.2012 / 21:50
8

Usar 2>&1 >> logfile nas OPÇÕES ou no script de inicialização não é prudente, pois o arquivo de log não será reaberto quando ocorrer a rotação do log, presumindo, é claro, que você tenha colocado algo para que isso ocorra. A implicação disso é que você terminará com arquivos de log rotacionados (vazios, dependendo das configurações de rotação) e seus dados de log reais serão gravados em um arquivo para o qual não existe nenhuma entrada de diretório, o que significa que ele será excluído o arquivo está fechado. Para o arquivo de log ser fechado quando planejado e, portanto, rotacionado com segurança, você teria que reiniciar o memcached (adeus cache!).

Em vez disso, use algo como o comando logger (1) para logar ao syslog (com um recurso particular como local1, e ter suas regras de syslog roteando-as apropriadamente (olá carimbos de hora!),

OPTIONS=" 2>&1 | logger -i -p local1.info -t memcached"

Uma regra para rotear as mensagens especialmente no syslog é opcional, mas se você estiver usando o rsyslog, isso ajudará:

local1.debug  /var/log/memcached/memcached.log

Não se esqueça de uma regra de logrotate e, como você está usando o logger, não precisa se preocupar em fechar nenhum arquivo de log, porque o syslog fará isso para você.

# cat /etc/logrotate.d/memcached
/var/log/memcached/memcached.log {
    daily
    rotate 3
    dateext
    missingok
    create 0640 root root
    compress
    delaycompress
    postrotate
        #/bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
        /bin/kill -HUP 'cat /var/run/syslogd.pid'
    endscript
}

FWIW, a situação é diferente para sistemas EL7 (systemd)

Para os sistemas systemd, ele cuidará da coleta da saída de stderr e do log, portanto, se você incluir apenas -v (ainda muito silencioso) ou -vv (muito detalhado), poderá consultá-los com journalctl:

# journalctl --since '2012-01-01' _SYSTEMD_UNIT=memcached.service
-- Logs begin at Fri 2015-07-10 11:00:21 NZST, end at Mon 2015-08-03 23:36:49 NZST. --
Aug 03 23:36:49 HOSTNAME memcached[4318]: slab class  17: chunk size      3632 perslab     288
Aug 03 23:36:49 HOSTNAME memcached[4318]: slab class  18: chunk size      4544 perslab     230
...
Aug 03 23:36:49 HOSTNAME memcached[4318]: slab class  42: chunk size   1048576 perslab       1
Aug 03 23:36:49 HOSTNAME memcached[4318]: <26 server listening (auto-negotiate)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 send buffer was 212992, now 268435456
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)
Aug 03 23:36:49 HOSTNAME memcached[4318]: <27 server listening (udp)

Embora você não encontre esses registros em nenhum lugar em / var / log /; os logs são mantidos em um formato binário, então você pode usar journalctl --output json ... se você quisesse. Veja /etc/systemd/journald.conf para mais informações.

Do começo ao fim (embora para os servidores RHEL7 / systemd)

# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -vv"


# cat /usr/lib/systemd/system/memcached.service
[Unit]
Description=Memcached
Before=httpd.service
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

[Install]
WantedBy=multi-user.target


# cat /etc/systemd/system/memcached.service.d/local.conf
[Service]
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=memcached
SyslogFacility=local1
SyslogLevel=debug
SyslogLevelPrefix=false


# systemctl daemon-reload
# systemctl restart memcached.service

# systemctl status memcached
memcached.service - Memcached
   Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled)
  Drop-In: /etc/systemd/system/memcached.service.d
           └─local.conf                                                      <---------- NOTE
   Active: active (running) since Tue 2015-08-04 01:07:50 NZST; 7s ago
 Main PID: 3842 (memcached)
   CGroup: /system.slice/memcached.service
           └─3842 /usr/bin/memcached -u memcached -p 11211 -m 64 -c 1024 -l 127.0.0.1 -vv
...

// Note: rsyslogd uses its imjournal module to read logs from journald;
// make sure you have this configured if you've brought your rsyslog
// config from a previous version of RHEL

# echo "local1.debug  /var/log/memcached/memcached.log" >> /etc/rsyslog.d/memcached.conf
# mkdir /var/log/memcached
# systemctl restart rsyslog.service
# systemctl status rsyslog.service

// Don't forget log rotation

# cat /etc/logrotate.d/memcached
/var/log/memcached/memcached.log {
    daily
    rotate 3
    dateext
    missingok
    create 0640 root root
    compress
    delaycompress
    postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
    endscript
}
    
por 03.08.2015 / 13:26
2

O Memcached não fornece uma opção de linha de comando para o local do arquivo de log. No Ubuntu, há um script wrapper chamado start-memcached que analisa um /etc/memcached.conf que contém um parâmetro logfile. Infelizmente, isso parece não existir no CentOS / RHEL. Eu acho que você teria que modificar o script de inicialização para realizar o que você quer. Isso parece ser um pouco de descuido - um rápido googling mostra que outras pessoas também têm esse problema, então talvez seja algo que eles consertem logo (ou já consertaram e eu não sei). Ou você pode tentar os scripts de inicialização do Ubuntu.

    
por 02.12.2010 / 22:39