Collecter les journaux Apache Tomcat
Ce document explique comment ingérer des journaux Apache Tomcat dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des journaux au format JSON et les transforme en Unified Data Model (UDM). Il initialise les valeurs par défaut, analyse la charge utile JSON, gère les éventuelles erreurs d'analyse JSON et mappe différents champs du journal brut dans les champs UDM correspondants, y compris les informations sur les métadonnées, le principal, l'observateur et les résultats de sécurité, tout en ajoutant des libellés personnalisés pour le contexte de l'environnement.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Un hôte Windows 2016 ou version ultérieure, ou un hôte Linux avec
systemd
- Si vous exécutez le programme derrière un proxy, les ports du pare-feu sont ouverts.
- Apache Tomcat version 9.0.70 ou ultérieure
- Accès en écriture à
$CATALINA_BASE/conf
et$CATALINA_BASE/logs
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installez l'agent BindPlane sur le serveur Tomcat pour collecter les fichiers journaux.
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de fenêtres
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Ressources d'installation supplémentaires
Pour plus d'options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml
. En règle générale, il se trouve dans le répertoire/etc/bindplane-agent/
sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano
,vi
ou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yaml
comme suit :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
- Remplacez le
/path/to/tomcat/logs
. - Remplacez
<customer_id>
par le numéro client réel. - Mettez à jour
/path/to/ingestion-authentication-file.json
avec le chemin d'accès à l'emplacement où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
- Remplacez le
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart bindplane-agent
Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
Configurer les journaux d'accès JSON dans Tomcat
- Ouvrez le fichier Tomcat à l'emplacement
$CATALINA_BASE/conf/server.xml
. Recherchez la balise <Host> et ajoutez-y ce qui suit :
<Valve className="org.apache.catalina.valves.JsonAccessLogValve" directory="logs" prefix="access-log" suffix=".json" rotatable="true" maxDays="7"/>
Redémarrez Tomcat pour appliquer les modifications :
cd /path/to/tomcat bin/catalina.sh stop bin/catalina.sh start
Un nouveau fichier journal JSON s'affiche chaque jour (par exemple,
logs/access-log.2025-07-02.json
).
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
@timestamp |
metadata.event_timestamp |
La valeur de @timestamp du journal brut est directement mappée sur ce champ UDM. Elle représente l'heure à laquelle l'événement s'est produit. |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
L'ID éphémère de l'agent est ajouté en tant que paire clé-valeur dans les champs additional . |
agent.hostname |
observer.hostname |
Le nom d'hôte de l'agent est utilisé comme nom d'hôte de l'observateur. |
agent.id |
observer.asset_id |
L'ID de l'agent est associé au type d'agent pour créer l'ID de l'élément observateur (par exemple, filebeat: <agent_id> ). |
agent.type |
observer.application |
Le type d'agent est utilisé comme application d'observation. |
agent.version |
observer.platform_version |
La version de l'agent est utilisée comme version de la plate-forme de l'observateur. |
host.hostname |
principal.hostname |
Le nom d'hôte de l'hôte est utilisé comme nom d'hôte principal. |
host.id |
principal.asset.asset_id |
L'ID de l'hôte est précédé de Host Id: pour créer l'ID de l'asset principal. |
host.ip |
principal.ip , observer.ip |
L'adresse IP de l'hôte est utilisée pour l'adresse IP du principal et de l'observateur. Si plusieurs adresses IP sont présentes, elles sont fusionnées dans un tableau. |
host.mac |
principal.mac |
L'adresse MAC de l'hôte est utilisée comme adresse MAC principale. Si plusieurs adresses MAC sont présentes, elles sont fusionnées dans un tableau. |
host.os.family |
principal.platform |
Si la famille de l'OS hôte est rhel ou redhat , la plate-forme principale est définie sur LINUX . |
host.os.kernel |
principal.platform_patch_level |
La version du noyau de l'OS hôte est utilisée comme niveau de correctif principal de la plate-forme. |
host.os.name |
additional.fields[os_name].value.string_value |
Le nom de l'OS hôte est ajouté en tant que paire clé-valeur dans les champs additional . |
host.os.version |
principal.platform_version |
La version de l'OS hôte est utilisée comme version principale de la plate-forme. |
log.file.path |
principal.process.file.full_path |
Le chemin du journal est utilisé comme chemin d'accès complet au fichier du processus principal. |
log_level |
security_result.severity , security_result.severity_details , security_result.action |
Le niveau de journalisation permet de déterminer la gravité, les détails de gravité et l'action du résultat de sécurité. DEBUG, INFO et AUDIT correspondent à la gravité INFORMATIONAL et à l'action ALLOW. ERROR correspond à la gravité ERROR et à l'action BLOCK. WARNING et WARN correspondent à une gravité MOYENNE et à une action BLOCK. La valeur brute de log_level est également mappée à severity_details. |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
L'environnement Iron Mountain de Logstash est ajouté en tant que paire clé-valeur dans les champs additional . |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
La région Iron Mountain de Logstash est ajoutée en tant que paire clé/valeur dans les champs additional . |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
Le site Iron Mountain de Logstash est ajouté en tant que paire clé-valeur dans les champs additional . |
logstash.process.host |
intermediary.hostname |
L'hôte de traitement Logstash est utilisé comme nom d'hôte intermédiaire. |
logstash.process.timestamp |
metadata.collected_timestamp |
L'horodatage de traitement Logstash est utilisé comme horodatage de collecte. |
logstash.xyz_environment |
additional.fields[xyz_environment].value.string_value |
L'environnement xyz de Logstash est ajouté en tant que paire clé-valeur dans les champs additional . |
logstash.xyz_region |
additional.fields[xyz_region].value.string_value |
La région xyz de Logstash est ajoutée en tant que paire clé-valeur dans les champs additional . |
logstash.xyz_site |
additional.fields[xyz_site].value.string_value |
Le site xyz de Logstash est ajouté en tant que paire clé-valeur dans les champs additional . |
message |
metadata.description |
Le champ de message est analysé en tant que JSON et son champ event_message est utilisé comme description des métadonnées. L'application intermédiaire est codée en dur sur logstash . Le type d'événement de métadonnées est codé en dur sur USER_UNCATEGORIZED . Le type de journal des métadonnées est défini sur TOMCAT à partir de batch.type ou batch.log_type du journal brut. Le nom du produit de métadonnées est codé en dur sur Tomcat . Le nom du fournisseur de métadonnées est codé en dur sur Tomcat . |
user |
principal.user.userid |
Le champ utilisateur du journal brut est utilisé comme ID utilisateur principal. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.