Coletar registros do Apache Tomcat
Neste documento, explicamos como ingerir registros do Apache Tomcat no Google Security Operations usando o Bindplane. O analisador extrai campos de registros formatados em JSON, transformando-os no modelo de dados unificado (UDM). Ele inicializa valores padrão, analisa o payload JSON, processa possíveis erros de análise JSON e mapeia vários campos do registro bruto para os campos UDM correspondentes, incluindo metadados, principal, observador e informações de resultado de segurança, além de adicionar rótulos personalizados para o contexto do ambiente.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Um host Windows 2016 ou mais recente ou Linux com
systemd
- Se estiver executando por trás de um proxy, as portas do firewall estarão abertas.
- Apache Tomcat versão 9.0.70 ou mais recente
- Acesso de gravação a
$CATALINA_BASE/conf
e$CATALINA_BASE/logs
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID do cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instale o agente do Bindplane no servidor Tomcat para coletar arquivos de registro
Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Outros recursos de instalação
Para mais opções de instalação, consulte o guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
- Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yaml
da seguinte forma:receivers: filelog/tomcat: include: [ /path/to/tomcat/logs/access-log.*.json ] start_at: beginning exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'TOMCAT' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - filelog/tomcat exporters: - chronicle/chronicle_w_labels
- Substitua o
/path/to/tomcat/logs
. - Substitua
<customer_id>
pelo ID do cliente real. - Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
- Substitua o
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane em Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agent
Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar registros de acesso JSON no Tomcat
- Abra o arquivo do Tomcat em
$CATALINA_BASE/conf/server.xml
. Localize a tag <Host> e adicione o seguinte dentro dela:
<Valve className="org.apache.catalina.valves.JsonAccessLogValve" directory="logs" prefix="access-log" suffix=".json" rotatable="true" maxDays="7"/>
Reinicie o Tomcat para aplicar as mudanças:
cd /path/to/tomcat bin/catalina.sh stop bin/catalina.sh start
Um novo arquivo de registro JSON vai aparecer diariamente (por exemplo,
logs/access-log.2025-07-02.json
).
Tabela de mapeamento da UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
@timestamp |
metadata.event_timestamp |
O valor de @timestamp do registro bruto é mapeado diretamente para esse campo do UDM. Ele representa o horário em que o evento ocorreu. |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
O ID efêmero do agente é adicionado como um par de chave-valor nos campos additional . |
agent.hostname |
observer.hostname |
O nome do host do agente é usado como o nome do host do observador. |
agent.id |
observer.asset_id |
O ID do agente é combinado com o tipo de agente para criar o ID do recurso observador (por exemplo, filebeat: <agent_id> ). |
agent.type |
observer.application |
O tipo de agente é usado como o aplicativo observador. |
agent.version |
observer.platform_version |
A versão do agente é usada como a versão da plataforma do observador. |
host.hostname |
principal.hostname |
O nome do host do host é usado como o nome principal. |
host.id |
principal.asset.asset_id |
O ID do host é precedido por Host Id: para criar o ID do recurso principal. |
host.ip |
principal.ip , observer.ip |
O endereço IP do host é usado para o principal e o observador. Se houver vários IPs, eles serão mesclados em uma matriz. |
host.mac |
principal.mac |
O endereço MAC do host é usado como o principal. Se houver vários MACs, eles serão mesclados em uma matriz. |
host.os.family |
principal.platform |
Se a família do SO host for rhel ou redhat , a plataforma principal será definida como LINUX . |
host.os.kernel |
principal.platform_patch_level |
A versão do kernel do SO host é usada como o nível principal de patch da plataforma. |
host.os.name |
additional.fields[os_name].value.string_value |
O nome do SO do host é adicionado como um par de chave-valor nos campos additional . |
host.os.version |
principal.platform_version |
A versão do SO do host é usada como a versão principal da plataforma. |
log.file.path |
principal.process.file.full_path |
O caminho do registro é usado como o caminho completo do arquivo do processo principal. |
log_level |
security_result.severity , security_result.severity_details , security_result.action |
O nível de registro é usado para determinar a gravidade, os detalhes e a ação do resultado de segurança. DEBUG, INFO e AUDIT são mapeados para a gravidade INFORMATIONAL e a ação ALLOW. ERROR é mapeado para a gravidade ERROR e a ação BLOCK. WARNING e WARN correspondem à gravidade MÉDIA e à ação BLOCK. O valor bruto de "log_level" também é mapeado para "severity_details". |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
O ambiente da Iron Mountain do Logstash é adicionado como um par de chave-valor nos campos additional . |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
A região "Iron Mountain" do Logstash é adicionada como um par de chave-valor nos campos additional . |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
O site da Iron Mountain do Logstash é adicionado como um par de chave-valor nos campos additional . |
logstash.process.host |
intermediary.hostname |
O host de processamento do Logstash é usado como o nome do host intermediário. |
logstash.process.timestamp |
metadata.collected_timestamp |
O carimbo de data/hora de processamento do Logstash é usado como o carimbo de data/hora coletado. |
logstash.xyz_environment |
additional.fields[xyz_environment].value.string_value |
O ambiente xyz do Logstash é adicionado como um par de chave-valor nos campos additional . |
logstash.xyz_region |
additional.fields[xyz_region].value.string_value |
A região xyz do Logstash é adicionada como um par de chave-valor nos campos additional . |
logstash.xyz_site |
additional.fields[xyz_site].value.string_value |
O site xyz do Logstash é adicionado como um par de chave-valor nos campos additional . |
message |
metadata.description |
O campo de mensagem é analisado como JSON, e o campo event_message é usado como a descrição dos metadados. O aplicativo intermediário está fixado no código como logstash . O tipo de evento de metadados está fixado no código como USER_UNCATEGORIZED . O tipo de registro de metadados é definido como TOMCAT do batch.type ou batch.log_type do registro bruto. O nome do produto de metadados está fixado no código como Tomcat . O nome do fornecedor de metadados está fixado em Tomcat . |
user |
principal.user.userid |
O campo de usuário do registro bruto é usado como o ID principal do usuário. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.