Como reiniciar automaticamente o serviço / daemon do Opensolaris / OmniOS que registra avisos, mas não erros críticos no syslog?

3

O seguinte problema pode ser visto como um problema relacionado a CIFS / AD (visão específica) ou como uma questão sobre reinicializações de serviço, tratamento de erros e análise de log (visão geral). Vou apresentar ambas as áreas aqui, mas ficaria feliz em receber respostas sobre qualquer uma delas (apenas pule as partes que você não está interessado).

Situação específica: o idmap não é atualizado periodicamente para controladores de domínio

Em um Active Directory compatível com o Windows Server 2008, geralmente há vários controladores de domínio para alta disponibilidade. Se todos esses servidores estiverem indisponíveis ao mesmo tempo e um servidor de arquivos OmniOS (r151018) com o servidor SMB / CIFS ativo do kernel (que foi ingressado com êxito no domínio e funcionar como esperado) inicializar, ocorrerá o seguinte:

O serviço idmap tenta alcançar um CD por 60 segundos e depois desiste ...

root@omnios:/root# tail -n 20 /var/svc/log/system-idmap:default.log
@ Tue Sep  6 10:19:42 2016
Global Catalog servers not configured/discoverable
Domain controller servers not configured/discoverable
created thread ID 3 - 1 threads currently active
[ Sep  6 10:19:42 Method "start" exited with status 0. ]
@ Tue Sep  6 10:19:53 2016
created thread ID 4 - 2 threads currently active
getdcname wait begin
@ Tue Sep  6 10:19:57 2016
DNS: _ldap._tcp.dc._msdcs.testdomain.intranet: Host name lookup failure
@ Tue Sep  6 10:20:08 2016
getdcname timeout
@ Tue Sep  6 10:20:12 2016
DNS: _ldap._tcp.dc._msdcs.testdomain.intranet: Host name lookup failure
@ Tue Sep  6 10:20:27 2016
DNS: _ldap._tcp.dc._msdcs.testdomain.intranet: Host name lookup failure
@ Tue Sep  6 10:20:42 2016
DNS: _ldap._tcp.dc._msdcs.testdomain.intranet: Host name lookup failure
Domain discovery took 60 sec.
Check the DNS configuration.

... mas não falha criticamente:

root@omnios:/root# svcs -xv idmap
svc:/system/idmap:default (Native Identity Mapping Service)
 State: online since Tue Sep  6 10:19:42 2016
   See: man -M /usr/share/man -s 1M idmapd
   See: man -M /usr/share/man -s 1M idmap
   See: /var/svc/log/system-idmap:default.log
Impact: None.

Depois disso, smbd reclama (com razão) no syslog a cada minuto que não consegue encontrar o DC:

smbd[525]: [ID 510351 daemon.notice] smb_locate_dc status 0xc0000233
smbd[525]: [ID 199031 daemon.notice] smbd_dc_update: testdomain.intranet: locate failed

Isso persiste mesmo depois de o DC estar on-line novamente e acessível. É contornado instantaneamente reiniciando idmap com svcadm restart idmap . Naturalmente, como essas interrupções podem acontecer sem planejamento, isso não deveria ser feito manualmente.

  • Como o idmap restart pode ser roteirizado para ocorrer automaticamente nesses eventos? Eu tentei usar o SMF, mas parece que isso só funciona para serviços com falha, enquanto idmap não relata problemas ( e smbd apenas reporta avisos). Outra possibilidade seria monitorar constantemente os arquivos de log e grep para os eventos, mas isso parece ineficiente para mim. Eu também tentei reduzir o valor de config/rediscovery_interval para 60 segundos, mas parece que ele é ignorado (ou não aplicável aqui).
  • Como alternativa, qual pode ser a solução que remove o problema? Infelizmente, não encontrei nada utilizável, exceto uma postagem que reconhece como uma reinicialização completa resolve o problema (como idmap também é reiniciado) .

Edit: Saída de svccfg -s idmap listprop - a única coisa que eu mudei foi config/rediscovery_interval (padrão 3600), IDs foram removidos depois manualmente.

config                                           application
config/id_cache_timeout                          count    86400
config/list_size_limit                           count    0
config/name_cache_timeout                        count    604800
config/preferred_dc                              astring
config/stability                                 astring  Unstable
config/use_ads                                   boolean  true
config/use_lsa                                   boolean  true
config/value_authorization                       astring  solaris.smf.value.idmap
config/machine_uuid                              astring  [...]
config/machine_sid                               astring  [...]
config/rediscovery_interval                      count    60
config/domain_name                               astring  testdomain.intranet
debug                                            application
debug/all                                        integer  0
debug/config                                     integer  0
debug/discovery                                  integer  0
debug/dns                                        integer  0
debug/ldap                                       integer  0
debug/mapping                                    integer  0
debug/stability                                  astring  Unstable
debug/value_authorization                        astring  solaris.smf.value.idmap
rpcbind                                          dependency
rpcbind/entities                                 fmri     svc:/network/rpc/bind
rpcbind/grouping                                 astring  require_all
rpcbind/restart_on                               astring  restart
rpcbind/type                                     astring  service
filesystem-minimal                               dependency
filesystem-minimal/entities                      fmri     svc:/system/filesystem/minimal
filesystem-minimal/grouping                      astring  require_all
filesystem-minimal/restart_on                    astring  error
filesystem-minimal/type                          astring  service
manifestfiles                                    framework
manifestfiles/lib_svc_manifest_system_idmap_xml  astring  /lib/svc/manifest/system/idmap.xml
general                                          framework
general/action_authorization                     astring  solaris.smf.manage.idmap
general/entity_stability                         astring  Unstable
general/single_instance                          boolean  true
general/value_authorization                      astring  solaris.smf.manage.idmap
start                                            method
start/exec                                       astring  /usr/lib/idmapd
start/timeout_seconds                            count    60
start/type                                       astring  method
stop                                             method
stop/exec                                        astring  :kill
stop/timeout_seconds                             count    60
stop/type                                        astring  method
refresh                                          method
refresh/exec                                     astring  ":kill -HUP"
refresh/timeout_seconds                          count    60
refresh/type                                     astring  method
tm_common_name                                   template
tm_common_name/C                                 ustring  "Native Identity Mapping Service"
tm_man_idmapd1M                                  template
tm_man_idmapd1M/manpath                          astring  /usr/share/man
tm_man_idmapd1M/section                          astring  1M
tm_man_idmapd1M/title                            astring  idmapd
tm_man_idmap1M                                   template
tm_man_idmap1M/manpath                           astring  /usr/share/man
tm_man_idmap1M/section                           astring  1M
tm_man_idmap1M/title                             astring  idmap

Problema geral: como reagir de forma eficiente às mensagens do syslog se o processo parecer estar funcionando normalmente?

Esse problema pode ser generalizado para a questão de como observar arquivos de log da maneira mais eficiente no Solaris . Eu pesquisei e encontrei várias ferramentas como swatch , logsurfer , logwatcher ou o antigo trabalho cron antigo executado a cada minuto e conectado a um script simples que lê dmesg output.

  • Essas são as únicas maneiras possíveis de fazer isso ou há uma solução melhor?
    • Existe uma maneira de dizer ao SMF que certos avisos em alguns processos devem ser atendidos com ações, mesmo que nenhuma condição crítica tenha ocorrido?
    • Eu tropecei no FMA do gerenciador de falhas, mas parece que ele também funciona apenas em condições críticas, não em meros avisos (ou em strings que podem ser especificadas pelo usuário). Isso está correto?
  • Se é a única maneira, o que você sugere usar e por quê?
por user121391 06.09.2016 / 11:17

0 respostas