Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Analisando métricas de desempenho com o kit de ferramentas de análise Performance Co-Pilot

Analisando métricas de desempenho com o kit de ferramentas de análise Performance Co-Pilot

Data de Publicação: 06/03/2025
O QUE É?

Para fins de monitoramento de desempenho, o SUSE Linux Enterprise Micro inclui uma imagem de contêiner que permite executar o kit de ferramentas de análise Performance Co-Pilot (PCP) em um contêiner.

POR QUÊ?

Para monitorar o desempenho do sistema. Este artigo apresenta informações sobre como configurar e usar o kit de ferramentas.

DEDICAÇÃO

O tempo de leitura é de aproximadamente 40 minutos.

META

Você poderá iniciar o contêiner do PCP com uma configuração adequada às suas necessidades.

REQUISITOS
  • Uma instância em execução do SLE Micro.

1 Kit de ferramentas de análise Performance Co-Pilot

O kit de ferramentas inclui ferramentas para reunir e processar informações de desempenho coletadas em tempo real ou de registros de arquivo do PCP.

Os dados de desempenho são coletados por agentes de domínio de métricas de desempenho e passados para o daemon pmcd. O daemon coordena a coleta e a exportação das estatísticas de desempenho em resposta às solicitações das ferramentas de monitoramento do PCP. O pmlogger é usado para registrar as métricas. Para obter os detalhes, consulte PCP documentation.

1.1 Obtendo a imagem do contêiner do PCP

A imagem do contêiner do PCP é baseada no contêiner BCI-Init, que utiliza o systemd usado para gerenciar os serviços do PCP.

Você pode extrair a imagem do contêiner usando o Podman ou pelo console de gerenciamento da Web do Cockpit. Para extrair a imagem usando o Podman, execute o seguinte comando:

# podman pull registry.suse.com/suse/pcp:latest

Para obter a imagem do contêiner usando o Cockpit, vá para os contêineres do Podman, clique em Obter nova imagem e pesquise por pcp. Em seguida, selecione e faça download da imagem do registry.suse.com para o SLE 15 SP4.

2 Executando o contêiner do PCP

O comando a seguir mostra as opções mínimas que você precisa usar para executar um contêiner do PCP:

# podman run -d  \
  --systemd always \
  -pHOST_IP:HOST_PORT:CONTAINER_PORT \
 -v HOST_DIR:/var/log/pcp/pmlogger \
  PCP_CONTAINER_IMAGE

em que as opções têm o seguinte significado:

-d

O contêiner é executado em um modo separado sem tty.

--systemd always

Executa o contêiner no modo systemd. Todos os serviços necessários para execução no contêiner do PCP são iniciados automaticamente pelo systemd no contêiner.

--privileged

O contêiner é executado com privilégios estendidos. Use essa opção se o seu sistema tem o SELinux habilitado; do contrário, as métricas coletadas ficarão incompletas.

-v HOST_DIR:/var/log/pcp/pmlogger

Cria uma montagem de vinculação para que os arquivos de pmlogger sejam gravados em HOST_DIR no host. Por padrão, pmlogger armazena as métricas coletadas em /var/log/pcp/pmlogger.

PCP_CONTAINER_IMAGE

É a imagem do contêiner do PCP da qual foi feito o download.

Veja a seguir outras opções úteis do comando podman run:

Outras opções
-p HOST_IP:HOST_PORT:CONTAINER_PORT

Publica portas do contêiner mapeando-as para portas de host. Se você não especificar HOST_IP, as portas serão mapeadas no host local. Se você omitir o valor HOST_PORT, será usado um número de porta aleatório. Por padrão, o daemon pmcd escuta em e expõe a PMAPI para receber métricas na porta 44321, portanto, recomendamos mapear essa porta com o mesmo número de porta do host. O daemon pmproxy escuta em e expõe a PMWEBAPI REST para acessar as métricas na porta 44322 por padrão, portanto, é recomendável mapear essa porta com o mesmo número de porta do host.

--net host

O contêiner usa a rede do host. Use essa opção para coletar métricas das interfaces de rede do host.

-e

A opção permite definir as seguintes variáveis de ambiente:

PCP_SERVICES

É uma lista de serviços separados por vírgula que serão iniciados pelo systemd no contêiner.

Os serviços padrão são: pmcd, pmie, pmlogger, pmproxy.

Você pode usar essa variável para executar um contêiner com uma lista de serviços diferente da lista padrão, por exemplo, apenas com pmlogger:

# podman run -d \
  --name pmlogger \
  --systemd always \
  -e PCP_SERVICES=pmlogger  \
  -v pcp-archives:/var/log/pcp/pmlogger  \
  registry.suse.com/suse/pcp:latest
HOST_MOUNT

É um caminho dentro do contêiner para a montagem de vinculação do sistema de arquivos raiz do host. O valor padrão não está definido.

REDIS_SERVERS

Especifica uma conexão com um servidor Redis. Em uma configuração sem cluster, forneça uma lista das especificações de host separadas por vírgulas. Em uma configuração em cluster, especifique qualquer host de cluster individual. Outros hosts no cluster são descobertos automaticamente. O valor padrão é: localhost:6379.

Se você precisar usar uma configuração diferente da fornecida pelas variáveis de ambiente, proceda conforme descrito na Seção 3, “Configurando os serviços do PCP”.

2.1 Iniciando o contêiner do PCP automaticamente na inicialização

Após executar o contêiner do PCP, você poderá configurar o systemd para iniciar o contêiner no momento da inicialização. Para isso, siga o procedimento abaixo:

  1. Crie um arquivo de unidade para o contêiner usando o comando podman generate systemd:

    # podman generate systemd --nameCONTAINER_NAME > /etc/systemd/system/container-CONTAINER_NAME.service

    em que CONTAINER_NAME é o nome do contêiner do PCP usado ao executá-lo da imagem do contêiner.

  2. Habilite o serviço em systemd:

    # systemctl enable container-CONTAINER_NAME

3 Configurando os serviços do PCP

Todos os serviços executados dentro do contêiner do PCP têm uma configuração padrão que pode não atender às suas necessidades. Se você precisar de uma configuração personalizada que não possa ser coberta pelas variáveis de ambiente, crie arquivos de configuração para os serviços do PCP e transmita-os ao PCP usando uma montagem de vinculação da seguinte maneira:

# podman run -d \
  --nameCONTAINER_NAME \
 --systemd always \
 -v $HOST_CONFIG:CONTAINER_CONFIG_PATH:z \
  -v HOST_LOGS_PATH:/var/log/pcp/pmlogger  \
  registry.suse.com/suse/pcp:latest

Onde:

CONTAINER_NAME

É um nome de contêiner opcional.

HOST_CONFIG

É um caminho absoluto para a configuração criada na máquina host. Você pode escolher qualquer nome de arquivo desejado.

CONTAINER_CONFIG_PATH

É um caminho absoluto para um arquivo de configuração específico dentro do contêiner. Cada arquivo de configuração disponível está descrito em mais detalhes nas seções correspondentes.

HOST_LOGS_PATH

É um diretório que deve ser uma montagem de vinculação com os registros do contêiner.

Por exemplo, um contêiner chamado pcp, com o arquivo de configuração pmcd na máquina host e o diretório pcp-archives para os registros na máquina host, é executado pelo seguinte comando:

# podman run -d \
  --name pcp  \
  --systemd always \
  -v $(pwd)/pcp-archives:/var/log/pcp/pmlogger \
  -v $(pwd)/pmcd:/etc/sysconfig/pmcd \
registry.suse.com/suse/pcp:latest

3.1 Configuração personalizada do daemon pmcd

A configuração do daemon pmcd é armazenada no arquivo /etc/sysconfig/pmcd. O arquivo armazena variáveis de ambiente que modificam o comportamento do daemon pmcd.

Você pode adicionar as seguintes variáveis ao arquivo /etc/sysconfig/pmcd para configurar o daemon pmcd:

PMCD_LOCAL

Define se o host remoto pode se conectar ao daemon pmcd. Se definido como 0, as conexões remotas com o daemon serão permitidas. Se definido como 1, o daemon escutará apenas no host local. O valor padrão é 0.

PMCD_MAXPENDING

Define a contagem máxima de conexões pendentes com o agente. O valor padrão é 5.

PMCD_ROOT_AGENT

Se o pmdaroot estiver habilitado (o valor estiver definido como 1), a adição de um novo PDMA não acionará a reinicialização de outros PMDAs. Se o pmdaroot não estiver habilitado, o pmcd exigirá a reinicialização de todos os PMDAs quando um novo PMDA for adicionado. O valor padrão é 1.

PMCD_RESTART_AGENTS

Se definido como 1, o daemon pmcd tentará reiniciar qualquer PMDA encerrado. Habilite essa opção apenas se você tiver habilitado pmdaroot, pois o próprio pmcd não tem privilégios para reiniciar o PMDA.

PMCD_WAIT_TIMEOUT

Define o tempo máximo em segundos que o pmcd pode aguardar para aceitar uma conexão. Após esse período, a conexão será relatada como falha. O valor padrão é 60.

PCP_NSS_INIT_MODE

Define o modo no qual o pmcd inicializa o banco de dados do certificado NSS quando são usadas conexões seguras. O valor padrão é readonly. Você pode definir o modo como readwrite; mas, se a inicialização falhar, o valor padrão será usado como fallback.

Veja a seguir um exemplo:

PMCD_LOCAL=0
      PMCD_MAXPENDING=5
      PMCD_ROOT_AGENT=1
      PMCD_RESTART_AGENTS=1
      PMCD_WAIT_TIMEOUT=70
      PCP_NSS_INIT_MODE=readwrite

3.2 Configuração personalizada do pmlogger

A configuração personalizada para o pmlogger é armazenada nos seguintes arquivos de configuração:

  • /etc/sysconfig/pmlogger

  • /etc/pcp/pmlogger/control.d/local

3.2.1 O arquivo /etc/sysconfig/pmlogger

Você pode usar os seguintes atributos para configurar o pmlogger:

PMLOGGER_LOCAL

Define se o pmlogger permite conexões de hosts remotos. Se definido como 1, o pmlogger permitirá conexões apenas de um host local.

PMLOGGER_MAXPENDING

Define a contagem máxima de conexões pendentes. O valor padrão é 5.

PMLOGGER_INTERVAL

Define o intervalo de amostragem padrão usado pelo pmlogger. O valor padrão é 60 s. Lembre-se de que esse valor pode ser substituído pela linha de comando pmlogger.

PMLOGGER_CHECK_SKIP_LOGCONF

Definir essa opção como sim desabilita uma nova geração e a verificação da configuração do pmlogger se a configuração do pmlogger vier de pmlogconf. O comportamento padrão é gerar novamente os arquivos de configuração e verificar se há mudanças sempre que pmlogger for iniciado.

Veja a seguir um exemplo:

PMLOGGER_LOCAL=1
PMLOGGER_MAXPENDING=5
PMLOGGER_INTERVAL=10
PMLOGGER_CHECK_SKIP_LOGCONF=yes

3.2.2 O arquivo /etc/pcp/pmlogger/control.d/local

O arquivo /etc/pcp/pmlogger/control.d/local armazena as especificações do host, as métricas que devem ser registradas, a frequência de registro (o padrão é 24 horas) e as opções de pmlogger. Por exemplo:

# === VARIABLE ASSIGNMENTS ===
#
# DO NOT REMOVE OR EDIT THE FOLLOWING LINE
$version=1.1

# Uncomment one of the lines below to enable/disable compression behaviour
# that is different to the pmlogger_daily default.
# Value is days before compressing archives, 0 is immediate compression,
# "never" or "forever" suppresses compression.
#
#$PCP_COMPRESSAFTER=0
#$PCP_COMPRESSAFTER=3
#$PCP_COMPRESSAFTER=never

# === LOGGER CONTROL SPECIFICATIONS ===
#
#Host           P?  S?  directory                       args

# local primary logger
LOCALHOSTNAME   y   n   PCP_ARCHIVE_DIR/LOCALHOSTNAME   -r -T24h10m -c config.default -v 100Mb
Nota
Nota: Os padrões apontam para o host local

Se você executar o pmlogger em um contêiner em uma máquina diferente daquela que executa o pmcd (um cliente), mude a seguinte linha para apontar para o cliente:

# local primary logger
CLIENT_HOSTNAME   y   n   PCP_ARCHIVE_DIR/CLIENT_HOSTNAME   -r -T24h10m -c config.default -v 100Mb

Por exemplo, para o nome de host slemicro_1, a linha deve ter a seguinte aparência:

# local primary logger
slemicro_1   y   n   PCP_ARCHIVE_DIR/slemicro_1   -r -T24h10m -c config.default -v 100Mb

4 Gerenciando métricas do PCP

4.1 Listando métricas do PCP

De dentro do contêiner, você pode usar o comando pminfo para listar métricas. Por exemplo, para listar todas as métricas de desempenho disponíveis, execute:

# pminfo

Você pode listar um grupo de métricas relacionadas especificando o prefixo de métricas:

# pminfoMETRIC_PREFIX

Por exemplo, para listar todas as métricas relacionadas ao kernel, use:

# pminfo disk

disk.dev.r_await
disk.dm.await
disk.dm.r_await
disk.md.await
disk.md.r_await
...

Você também pode especificar strings adicionais para restringir a lista de métricas, por exemplo:

# piminfo disk.dev

disk.dev.read
disk.dev.write
disk.dev.total
disk.dev.blkread
disk.dev.blkwrite
disk.dev.blktotal
...

Para obter o texto de ajuda online de uma métrica específica, use a opção -t seguida da métrica, por exemplo:

# pminfo -t kernel.cpu.util.user

kernel.cpu.util.user [percentage of user time across all CPUs, including guest CPU time]

Para exibir um texto de descrição de uma métrica específica, use a opção -T seguida da métrica, por exemplo:

# pminfo -T kernel.cpu.util.user

Help:
percentage of user time across all CPUs, including guest CPU time

4.2 Verificando métricas locais

Após iniciar o contêiner do PCP, você poderá verificar se as métricas estão sendo registradas corretamente executando o seguinte comando dentro do contêiner:

# pcp

Performance Co-Pilot configuration on localhost:

 platform: Linux localhost 5.3.18-150300.59.68-default #1 SMP Wed May 4 11:29:09 UTC 2022 (ea30951) x86_64
 hardware: 1 cpu, 1 disk, 1 node, 1726MB RAM
 timezone: UTC
 services: pmcd pmproxy
     pmcd: Version 5.2.2-1, 9 agents, 4 clients
     pmda: root pmcd proc pmproxy xfs linux mmv kvm jbd2
 pmlogger: primary logger: /var/log/pcp/pmlogger/localhost/20220607.09.24
     pmie: primary engine: /var/log/pcp/pmie/localhost/pmie.log

Agora verifique se os registros foram gravados em um destino apropriado:

# lsPATH_TO_PMLOGGER_LOGS

em que PATH_TO_PMLOGGER_LOGS deve ser /var/log/pcp/pmlogger/localhost/ neste caso.

4.3 Gravando métricas de sistemas remotos

Você pode implantar contêineres de coletores que coletam métricas de sistemas remotos diferentes daqueles em que os contêineres do pmlogger são executados. Cada sistema de coletor remoto precisa do daemon pmcd e de um conjunto de pmda. Para implantar vários coletores com um sistema de monitoramento centralizado, faça o seguinte:

  1. Em cada sistema do qual você deseja coletar métricas (clientes), execute um contêiner com o daemon pmcd:

    # podman run -d \
        --name pcp-pmcd \
        --privileged \
        --net host \
        --systemd always \
        -e PCP_SERVICES=pmcd \
        -e HOST_MOUNT=/host \
        -v /:/host:ro,rslave \
        registry.suse.com/suse/pcp:latest
  2. No sistema de monitoramento, crie um arquivo de configuração do pmlogger para cada cliente control.CLIENT com o seguinte conteúdo:

    $version=1.1
    
    CLIENT_HOSTNAME n n PCP_ARCHIVE_DIR/CLIENT -N -r -T24h10m -c config.default -v 100Mb

    Lembre-se de que o CLIENT_HOSTNAME deve ser resolvido no DNS. Você pode usar endereços IP ou nomes de domínio completos e qualificados (FQDN, Fully Qualified Domain Names).

  3. No sistema de monitoramento, crie um diretório para cada cliente para armazenar os registros feitos:

    # mkdir /root/pcp-archives/CLIENT

    Por exemplo, para slemicro_1:

    # mkdir /root/pcp-archives/slemicro_1
  4. No sistema de monitoramento, execute um contêiner com pmlogger para cada cliente:

    # podman run -d \
        --name pcp-pmlogger-CLIENT \
     --systemd always \
     -e PCP_SERVICES=pmlogger \
     -v /root/pcp-archives/CLIENT:/var/log/pcp/pmlogger:z \
        -v $(pwd)/control.CLIENT:/etc/pcp/pmlogger/control.d/local:z \
        registry.suse.com/suse/pcp:latest

    Por exemplo, para um cliente chamado slemicro_1:

    # podman run -d \
        --name pcp-pmlogger-slemicro_1 \
        --systemd always \
        -e PCP_SERVICES=pmlogger \
        -v /root/pcp-archives:/var/log/pcp/pmlogger:z \
        -v $(pwd)/control.slemicro_1:/etc/pcp/pmlogger/control.d/local:z \
        registry.suse.com/suse/pcp:latest
    Nota
    Nota

    A segunda montagem de vinculação aponta para o arquivo de configuração criado no Passo 2 e substitui a configuração padrão do pmlogger. Se você não criar essa montagem de vinculação, o pmlogger usará o arquivo padrão /etc/pcp/pmlogger/control.d/local, e o registro dos clientes falhará porque a configuração padrão aponta para um host local. Para obter detalhes sobre o arquivo de configuração, consulte a Seção 3.2.2, “O arquivo /etc/pcp/pmlogger/control.d/local.

  5. Para verificar se a coleção de registros está funcionando apropriadamente, execute:

    # ls -l pcp-archives/CLIENT/CLIENT

    Por exemplo:

    # ls -l pcp-archives/slemicro_1/slemicro_1
    
    total 1076
    -rw-r--r--. 1 systemd-network systemd-network 876372 Jun  8 11:24 20220608.10.58.0
    -rw-r--r--. 1 systemd-network systemd-network    312 Jun  8 11:22 20220608.10.58.index
    -rw-r--r--. 1 systemd-network systemd-network 184486 Jun  8 10:58 20220608.10.58.meta
    -rw-r--r--. 1 systemd-network systemd-network    246 Jun  8 10:58 Latest
    -rw-r--r--. 1 systemd-network systemd-network  24595 Jun  8 10:58 pmlogger.log