Guia de administração do sistema: gerenciamento de recursos Oracle Solaris Containers e Oracle Solaris Zones

Capítulo 5 Administração da contabilidade estendida (tarefas)

Este capítulo descreve como administrar o subsistema da contabilidade estendida.

Para uma visão geral do subsistema da contabilidade estendida, consulte o Capítulo 4Contabilidade estendida (visão geral).

Administração da facilidade de contabilidade estendida (mapa de tarefas)

Tarefa 

Descrição 

Para instruções 

Ativar a facilidade de contabilidade estendida. 

Use a contabilidade estendida para monitorar o consumo de recursos para cada projeto executado em seu sistema. Você pode usar o subsistema da contabilidade estendida para capturar dados históricos para tarefas, processos e fluxos.

Como ativar a contabilidade estendida para processos, tarefas e fluxos, Como ativar a contabilidade estendida com um script de inicialização

Exibir o status da contabilidade estendida. 

Determine o status da facilidade de contabilidade estendida. 

Como exibir o status da contabilidade estendida

Visualizar os recursos de contabilidade disponíveis. 

Visualize os recursos de contabilidade disponíveis no sistema. 

Como visualizar recursos de contabilidade disponíveis.

Desativar a facilidade de contabilidade de processo, tarefa e fluxo. 

Desative a funcionalidade da contabilidade estendida. 

Como desativar a contabilidade de processo, tarefa e fluxo

Usar a interface Perl para a facilidade de contabilidade estendida. 

Use a interface Perl para desenvolver relatórios personalizados e scripts de extração. 

Uso da interface Perl para libexacct

Uso da funcionalidade da contabilidade estendida

Usuários podem gerenciar contagem estendida (iniciar contagem, parar contagem e alterar parâmetros de configuração de contagem) se eles tiverem o perfil correto e para o tipo de contagem estendida que será gerenciada:

ProcedureComo ativar a contabilidade estendida para processos, tarefas e fluxos

Para ativar a facilidade de contabilidade estendida para tarefas, processos e fluxos, use o comando acctadm. O parâmetro final opcional para acctadm indica se o comando deve atuar no processo, na tarefa do sistema ou nos componentes de contabilidade de fluxo da facilidade de contabilidade estendida.

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Ative a contabilidade estendida para processos.


    # acctadm -e extended -f /var/adm/exacct/proc process
    
  3. Ative a contabilidade estendida para tarefas.


    # acctadm -e extended,mstate -f /var/adm/exacct/task task
    
  4. Ative a contabilidade estendida para fluxos.


    # acctadm -e extended -f /var/adm/exacct/flow flow
    
Consulte também

Para obter mais informações, consulte acctadm(1M).

Como ativar a contabilidade estendida com um script de inicialização

Ative a contabilidade estendida continuamente vinculando o script /etc/init.d/acctadm a /etc/rc2.d.


# ln -s /etc/init.d/acctadm /etc/rc2.d/Snacctadm
# ln -s /etc/init.d/acctadm /etc/rc2.d/Knacctadm

A variável n é substituída por um número.

Você deve ativar manualmente a contabilidade estendida pelo menos uma vez para definir a configuração.

Para obter informações sobre configuração de contabilidade, consulte Configuração da contabilidade estendida.

Como exibir o status da contabilidade estendida

Digite acctadm sem argumentos para exibir o status atual da facilidade de contabilidade estendida.


# acctadm
                 Task accounting: active
            Task accounting file: /var/adm/exacct/task
          Tracked task resources: extended
        Untracked task resources: none
              Process accounting: active
         Process accounting file: /var/adm/exacct/proc
       Tracked process resources: extended
     Untracked process resources: host
                 Flow accounting: active
            Flow accounting file: /var/adm/exacct/flow
          Tracked flow resources: extended
        Untracked flow resources: none

No exemplo anterior, a contabilidade da tarefa do sistema está ativa no modo estendido e no modo mstate. A contabilidade do processo e do fluxo está ativa no modo estendido.


Observação –

No contexto da contabilidade estendida, microstate (mstate) se refere aos dados estendidos, associados às transições do processo do microstate, que estão disponíveis no arquivo de uso do processo (consulte proc(4)). Estes dados fornecem mais detalhes sobre as atividades do processo do que os registros básicos ou estendidos.


Como visualizar recursos de contabilidade disponíveis

Recursos disponíveis variam de sistema para sistema e de plataforma para plataforma. Utilize o comando acctadm com a opção -r para visualizar os grupos de recursos de contabilidade disponíveis no sistema.


# acctadm -r
process:
extended pid,uid,gid,cpu,time,command,tty,projid,taskid,ancpid,wait-status,zone,flag,
memory,mstatedisplays as one line
basic    pid,uid,gid,cpu,time,command,tty,flag
task:
extended taskid,projid,cpu,time,host,mstate,anctaskid,zone
basic    taskid,projid,cpu,time
flow:
extended 
saddr,daddr,sport,dport,proto,dsfield,nbytes,npkts,action,ctime,lseen,projid,uid
basic    saddr,daddr,sport,dport,proto,nbytes,npkts,action

ProcedureComo desativar a contabilidade de processo, tarefa e fluxo

Para desativar a contabilidade de processo, tarefa e fluxo, desative cada um deles individualmente usando o comando acctadm com a opção -x.

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Desative a contabilidade do processo.


    # acctadm -x process 
    
  3. Desative a contabilidade da tarefa.


    # acctadm -x task
    
  4. Desative a contabilidade do fluxo.


    # acctadm -x flow
    
  5. Verifique se a contabilidade da tarefa, do processo e do fluxo foi desativada.


    	# acctadm
                Task accounting: inactive
           Task accounting file: none
         Tracked task resources: extended
       Untracked task resources: none
             Process accounting: inactive
        Process accounting file: none
      Tracked process resources: extended
    Untracked process resources: host
                Flow accounting: inactive
           Flow accounting file: none
         Tracked flow resources: extended
       Untracked flow resources: none

Uso da interface Perl para libexacct

Como imprimir recursivamente o conteúdo de um objeto exacct

Use o código a seguir para imprimir recursivamente o conteúdo de um objeto exacct . Observe que esta capacidade é fornecida pela biblioteca como a função Sun::Solaris::Exacct::Object::dump(). Esta capacidade também está disponível através da função de conveniência ea_dump_object().


sub dump_object
     {
             my ($obj, $indent) = @_;
             my $istr = '  ' x $indent;

             #
             # Retrieve the catalog tag.  Because we are 
             # doing this in an array context, the
             # catalog tag will be returned as a (type, catalog, id) 
             # triplet, where each member of the triplet will behave as 
             # an integer or a string, depending on context.
             # If instead this next line provided a scalar context, e.g.
             #    my $cat  = $obj->catalog()->value();
             # then $cat would be set to the integer value of the 
             # catalog tag.
             #
             my @cat = $obj->catalog()->value();

             #
             # If the object is a plain item
             #
             if ($obj->type() == &EO_ITEM) {
                     #
                     # Note: The '%s' formats provide s string context, so
                     # the components of the catalog tag will be displayed
                     # as the symbolic values. If we changed the '%s'
                     # formats to '%d', the numeric value of the components
                     # would be displayed.
                     #
                     printf("%sITEM\n%s  Catalog = %s|%s|%s\n", 
                        $istr, $istr, @cat);
                     $indent++;

                     #
                     # Retrieve the value of the item.  If the item contains
                     # in turn a nested exacct object (i.e., an item or
                     # group),then the value method will return a reference
                     # to the appropriate sort of perl object
                     # (Exacct::Object::Item or Exacct::Object::Group).
                     # We could of course figure out that the item contained
                     # a nested item orgroup by examining the catalog tag in
                     # @cat and looking for a type of EXT_EXACCT_OBJECT or
                     # EXT_GROUP.
                     #
                     my $val = $obj->value();
                     if (ref($val)) {
                             # If it is a nested object, recurse to dump it.
                             dump_object($val, $indent);
                     } else {
                             # Otherwise it is just a 'plain' value, so
                             # display it.
                             printf("%s  Value = %s\n", $istr, $val);
                     }

             #
             # Otherwise we know we are dealing with a group.  Groups
             # represent contents as a perl list or array (depending on
             # context), so we can process the contents of the group
             # with a 'foreach' loop, which provides a list context.
             # In a list context the value method returns the content
             # of the group as a perl list, which is the quickest
             # mechanism, but doesn't allow the group to be modified.
             # If we wanted to modify the contents of the group we could
             # do so like this:
             #    my $grp = $obj->value();   # Returns an array reference
             #    $grp->[0] = $newitem;
             # but accessing the group elements this way is much slower.
             #
             } else {
                     printf("%sGROUP\n%s  Catalog = %s|%s|%s\n",
                         $istr, $istr, @cat);
                     $indent++;
                     # 'foreach' provides a list context.
                     foreach my $val ($obj->value()) {
                             dump_object($val, $indent);
                     }
                     printf("%sENDGROUP\n", $istr);
             }
     }

Como criar um novo registro de grupo e gravá-lo em um arquivo

Use este script para criar um novo registro de grupo e gravá-lo em um arquivo chamado /tmp/exacct.


#!/usr/bin/perl

use strict;
use warnings;
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
# Prototype list of catalog tags and values.
     my @items = (
             [ &EXT_STRING | &EXC_DEFAULT | &EXD_CREATOR      => "me"       ],
             [ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_PID     => $$         ],
             [ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_UID     => $<         ],
             [ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_GID     => $(         ],
             [ &EXT_STRING | &EXC_DEFAULT | &EXD_PROC_COMMAND => "/bin/rec" ],
     );

     # Create a new group catalog object.
     my $cat = ea_new_catalog(&EXT_GROUP | &EXC_DEFAULT | &EXD_NONE)

     # Create a new Group object and retrieve its data array.
     my $group = ea_new_group($cat);
     my $ary = $group->value();

     # Push the new Items onto the Group array.
     foreach my $v (@items) {
             push(@$ary, ea_new_item(ea_new_catalog($v->[0]), $v->[1]));
     }

     # Open the exacct file, write the record & close.
     my $f = ea_new_file('/tmp/exacct', &O_RDWR | &O_CREAT | &O_TRUNC)
        || die("create /tmp/exacct failed: ", ea_error_str(), "\n");
     $f->write($group);
     $f = undef;

Como imprimir o conteúdo de um arquivo exacct

Use o script Perl a seguir para imprimir o conteúdo de um arquivo exacct.


#!/usr/bin/perl

     use strict;
     use warnings;
     use Sun::Solaris::Exacct qw(:EXACCT_ALL);

     die("Usage is dumpexacct <exacct file>\n") unless (@ARGV == 1);

     # Open the exact file and display the header information.
     my $ef = ea_new_file($ARGV[0], &O_RDONLY) || die(error_str());
     printf("Creator:  %s\n", $ef->creator());
     printf("Hostname: %s\n\n", $ef->hostname());

     # Dump the file contents
     while (my $obj = $ef->get()) {
             ea_dump_object($obj);
     }

     # Report any errors
     if (ea_error() != EXR_OK && ea_error() != EXR_EOF)  {
             printf("\nERROR: %s\n", ea_error_str());
             exit(1);
     }
     exit(0);

Saída de exemplo de Sun::Solaris::Exacct::Object->dump()

Esta é uma saída de exemplo produzida ao se executar Sun::Solaris::Exacct::Object->dump() no arquivo criado em Como criar um novo registro de grupo e gravá-lo em um arquivo.


Creator:  root
Hostname: localhost
GROUP
       Catalog = EXT_GROUP|EXC_DEFAULT|EXD_NONE
       ITEM
         Catalog = EXT_STRING|EXC_DEFAULT|EXD_CREATOR
         Value = me
       ITEM
         Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_PID
         Value = 845523
       ITEM
         Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_UID
         Value = 37845
       ITEM
         Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_GID
         Value = 10
       ITEM
         Catalog = EXT_STRING|EXC_DEFAULT|EXD_PROC_COMMAND
         Value = /bin/rec
ENDGROUP