Intégration avec une instance EC2 existante
Cette section explique comment installer OpenTelemetry Collector sur vos instances EC2 pour collecter les logs système et les envoyer à ClickStack avec un enrichissement automatique des métadonnées EC2. Cette architecture distribuée est adaptée à la production et passe à l’échelle sur plusieurs instances.
Si vous souhaitez tester l’intégration des logs d’hôte EC2 avant de configurer votre instance de production, vous pouvez utiliser notre configuration préconfigurée et nos données d’exemple dans la section « Jeu de données de démonstration ».
Prérequis
- Instance ClickStack en cours d’exécution (peut être sur site, dans le Cloud ou en local)
- Instance EC2 en cours d’exécution (Ubuntu, Amazon Linux ou autre distribution Linux)
- Connectivité réseau entre l’instance EC2 et l’endpoint OTLP de ClickStack (port 4318 pour HTTP ou 4317 pour gRPC)
- Service de métadonnées de l’instance EC2 accessible (activé par défaut)
Vérifiez que les métadonnées EC2 sont accessibles
Depuis votre instance EC2, vérifiez que le service de métadonnées est accessible :
# Get metadata token (IMDSv2)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
# Verify instance metadata
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/placement/region
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-typeVous devriez voir votre ID d’instance, la région et le type d’instance. Si ces commandes échouent, vérifiez :
- Que le service de métadonnées d’instance est activé
- Qu’IMDSv2 n’est pas bloqué par des groupes de sécurité ou des ACL réseau
- Que vous exécutez ces commandes depuis l’instance EC2 elle-même
Vérifiez que les fichiers syslog existent
Vérifiez que votre instance EC2 génère des fichiers syslog :
# Ubuntu instances
ls -la /var/log/syslog
# Amazon Linux / RHEL instances
ls -la /var/log/messages
# View recent entries
tail -20 /var/log/syslog
# or
tail -20 /var/log/messagesInstaller l’OpenTelemetry Collector
Installez la distribution Contrib de l’OpenTelemetry Collector sur votre instance EC2 :
# Download the latest release
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.114.0/otelcol-contrib_0.114.0_linux_amd64.tar.gz
# Extract and install
tar -xvf otelcol-contrib_0.114.0_linux_amd64.tar.gz
sudo mv otelcol-contrib /usr/local/bin/
# Verify installation
otelcol-contrib --versionCréer la configuration du collector
Créez un fichier de configuration pour l'OpenTelemetry Collector dans /etc/otelcol-contrib/config.yaml :
sudo mkdir -p /etc/otelcol-contribChoisissez la configuration en fonction de votre distribution Linux :
sudo tee /etc/otelcol-contrib/config.yaml > /dev/null << 'EOF'
receivers:
filelog/syslog:
include:
- /var/log/syslog
- /var/log/**/*.log
start_at: end
operators:
- type: regex_parser
regex: '^(?P<timestamp>\S+) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
parse_from: body
parse_to: attributes
- type: time_parser
parse_from: attributes.timestamp
layout_type: gotime
layout: '2006-01-02T15:04:05.999999-07:00'
- type: add
field: attributes.source
value: "ec2-host-logs"
processors:
resourcedetection:
detectors: [ec2, system]
timeout: 5s
override: false
ec2:
tags:
- ^Name
- ^Environment
- ^Team
batch:
timeout: 10s
send_batch_size: 10000
exporters:
otlphttp:
endpoint: "http://YOUR_CLICKSTACK_HOST:4318"
headers:
authorization: "${env:CLICKSTACK_API_KEY}"
service:
pipelines:
logs:
receivers: [filelog/syslog]
processors: [resourcedetection, batch]
exporters: [otlphttp]
EOFsudo tee /etc/otelcol-contrib/config.yaml > /dev/null << 'EOF'
receivers:
filelog/syslog:
include:
- /var/log/messages
- /var/log/**/*.log
start_at: end
operators:
- type: regex_parser
regex: '^(?P<timestamp>\w+ \d+ \d{2}:\d{2}:\d{2}) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
parse_from: body
parse_to: attributes
- type: time_parser
parse_from: attributes.timestamp
layout: '%b %d %H:%M:%S'
- type: add
field: attributes.source
value: "ec2-host-logs"
processors:
resourcedetection:
detectors: [ec2, system]
timeout: 5s
override: false
ec2:
tags:
- ^Name
- ^Environment
- ^Team
batch:
timeout: 10s
send_batch_size: 10000
exporters:
otlphttp:
endpoint: "http://YOUR_CLICKSTACK_HOST:4318"
headers:
authorization: "${env:CLICKSTACK_API_KEY}"
service:
pipelines:
logs:
receivers: [filelog/syslog]
processors: [resourcedetection, batch]
exporters: [otlphttp]
EOFRemplacez les éléments suivants dans la configuration :
YOUR_CLICKSTACK_HOST: le nom d’hôte ou l’adresse IP sur lequel ClickStack s’exécute- Pour les tests en local, vous pouvez utiliser un tunnel SSH (voir la section Dépannage)
Cette configuration :
- Lit les fichiers de log système aux emplacements standard (
/var/log/syslogpour Ubuntu,/var/log/messagespour Amazon Linux/RHEL) - Analyse le format syslog pour en extraire des champs structurés (horodatage, nom d’hôte, unité/service, PID, message)
- Détecte et ajoute automatiquement les métadonnées EC2 à l’aide du processeur
resourcedetection - Peut inclure les tags EC2 (Name, Environment, Team) s’ils sont présents
- Envoie les logs à ClickStack via OTLP HTTP
Définir la clé API ClickStack
Exportez votre clé API ClickStack comme variable d’environnement :
export CLICKSTACK_API_KEY="your-api-key-here"Pour que cela soit conservé après les redémarrages, ajoutez-le au profil de votre shell :
echo 'export CLICKSTACK_API_KEY="your-api-key-here"' >> ~/.bashrc
source ~/.bashrcDémarrer le collector
Démarrez l’OpenTelemetry Collector :
CLICKSTACK_API_KEY="your-api-key-here" /usr/local/bin/otelcol-contrib --config /etc/otelcol-contrib/config.yamlVérifier les logs dans HyperDX
Une fois le collector en cours d’exécution, connectez-vous à HyperDX et vérifiez que les logs remontent avec les métadonnées EC2 :
- Accédez à la vue Search
- Définissez la source sur
Logs - Filtrez sur
source:ec2-host-logs - Cliquez sur un log pour l’ouvrir
- Vérifiez que les métadonnées EC2 apparaissent dans les resource attributes :
cloud.providercloud.regionhost.id(ID d’instance)host.type(type d’instance)cloud.availability_zone


Jeu de données de démonstration
Pour les utilisateurs qui souhaitent tester l’intégration des logs d’hôte EC2 avant de configurer leurs instances de production, nous mettons à disposition un jeu de données d’exemple contenant des métadonnées EC2 simulées.
Télécharger le jeu de données d’exemple
Téléchargez le fichier de logs d’exemple :
curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/host-logs/journal.logLe jeu de données comprend :
- Séquence de démarrage du système
- Activité de connexion SSH (tentatives réussies et échouées)
- Incident de sécurité (attaque par force brute avec intervention de fail2ban)
- Maintenance planifiée (tâches cron, anacron)
- Redémarrages de services (rsyslog)
- Messages du noyau et activité du pare-feu
- Mélange d'opérations normales et d'événements marquants
Créer la configuration du collector de test
Créez un fichier nommé ec2-host-logs-demo.yaml contenant la configuration suivante :
cat > ec2-host-logs-demo.yaml << 'EOF'
receivers:
filelog/journal:
include:
- /tmp/host-demo/journal.log
start_at: beginning
operators:
- type: regex_parser
regex: '^(?P<timestamp>\S+) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
parse_from: body
parse_to: attributes
- type: time_parser
parse_from: attributes.timestamp
layout: '%Y-%m-%dT%H:%M:%S%z'
- type: add
field: attributes.source
value: "ec2-demo"
processors:
# Simulate EC2 metadata for demo (no real EC2 instance required)
resource:
attributes:
- key: service.name
value: "ec2-demo"
action: insert
- key: cloud.provider
value: "aws"
action: insert
- key: cloud.platform
value: "aws_ec2"
action: insert
- key: cloud.region
value: "us-east-1"
action: insert
- key: cloud.availability_zone
value: "us-east-1a"
action: insert
- key: host.id
value: "i-0abc123def456789"
action: insert
- key: host.type
value: "t3.medium"
action: insert
- key: host.name
value: "prod-web-01"
action: insert
service:
pipelines:
logs/ec2-demo:
receivers: [filelog/journal]
processors:
- resource
- memory_limiter
- transform
- batch
exporters:
- clickhouse
EOFExécuter ClickStack avec la configuration de démonstration
Exécutez ClickStack avec les logs et la configuration de démonstration :
docker run --name clickstack-demo \
-p 8080:8080 -p 4317:4317 -p 4318:4318 \
-e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
-v "$(pwd)/ec2-host-logs-demo.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
-v "$(pwd)/journal.log:/tmp/host-demo/journal.log:ro" \
docker.hyperdx.io/hyperdx/hyperdx-all-in-one:latestVérifier les logs dans HyperDX
Une fois le collector démarré :
- Ouvrez HyperDX et connectez-vous à votre compte (vous devrez peut-être d’abord en créer un)
- Accédez à la vue de recherche et définissez la source sur
Logs - Définissez l’intervalle de temps sur 2025-11-10 00:00:00 - 2025-11-13 00:00:00
- Filtrez sur
source:ec2-demo - Développez une entrée de log pour afficher les métadonnées EC2 dans les attributs de ressource


Vous devriez voir des logs avec un contexte EC2 simulé, notamment :
- ID d’instance :
i-0abc123def456789 - Région :
us-east-1 - Zone de disponibilité :
us-east-1a - Type d’instance :
t3.medium
Tableaux de bord et visualisations
Pour vous aider à commencer à surveiller les logs d’hôte EC2 avec ClickStack, nous fournissons des visualisations essentielles avec le contexte cloud.
Télécharger la configuration du tableau de bord
Importer le tableau de bord préconfiguré
- Ouvrez HyperDX et accédez à la section Tableaux de bord
- Cliquez sur Importer le tableau de bord dans le coin supérieur droit, sous le menu à trois points

- Téléversez le fichier
host-logs-dashboard.jsonet cliquez sur Terminer l’import

Afficher le tableau de bord
Le tableau de bord sera créé avec toutes les visualisations préconfigurées :

Vous pouvez filtrer les visualisations du tableau de bord en fonction du contexte EC2 :
cloud.region:us-east-1- Afficher les logs d’une région spécifiquehost.type:t3.medium- Filtrer par type d’instancehost.id:i-0abc123def456- Logs d’une instance spécifique
Dépannage
Les métadonnées EC2 n’apparaissent pas dans les logs
Vérifiez que le service de métadonnées EC2 est accessible :
# Get metadata token
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
# Test metadata endpoint
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-idEn cas d’échec, vérifiez :
- Le service de métadonnées d’instance est activé
- IMDSv2 n'est pas bloqué par des groupes de sécurité
- Le collector s’exécute sur l’instance EC2 elle-même
Vérifiez les logs du collector pour repérer les erreurs liées aux métadonnées :
# If running as systemd service
sudo journalctl -u otelcol-contrib -f | grep -i "ec2\|metadata\|resourcedetection"
# If running in foreground, check stdoutAucun log ne s’affiche dans HyperDX
Vérifiez que les fichiers syslog existent et qu’ils sont bien alimentés :
ls -la /var/log/syslog /var/log/messages
tail -f /var/log/syslogVérifiez que le collector peut lire les fichiers de log :
cat /var/log/syslog | head -20Vérifiez la connectivité réseau avec ClickStack :
# Test OTLP endpoint
curl -v http://YOUR_CLICKSTACK_HOST:4318/v1/logs
# Should get a response (even if error, means endpoint is reachable)Consultez les logs du collector pour repérer d’éventuelles erreurs :
# If running in foreground
# Look for error messages in stdout
# If running as systemd service
sudo journalctl -u otelcol-contrib -f | grep -i "error\|failed"Les logs sont mal analysés
Vérifiez le format de votre syslog :
Pour Ubuntu 24.04+ :
# Should show ISO8601 format: 2025-11-17T20:55:44.826796+00:00
tail -5 /var/log/syslogPour Amazon Linux 2 / Ubuntu 20.04 :
# Should show traditional format: Nov 17 14:16:16
tail -5 /var/log/messagesSi votre format ne correspond pas, utilisez l’onglet de configuration approprié dans la section Créer une configuration du collecteur, selon votre distribution.
Le collecteur ne démarre pas comme service systemd
Vérifiez l’état du service :
sudo systemctl status otelcol-contribConsultez les logs détaillés :
sudo journalctl -u otelcol-contrib -n 50Problèmes courants :
- API key incorrectement définie dans l’environnement
- Erreurs de syntaxe dans le fichier de configuration
- Problèmes d’autorisation lors de la lecture des fichiers de log
Étapes suivantes
- Configurez des alertes pour les événements système critiques (pannes de service, échecs d’authentification, alertes liées au disque)
- Filtrez selon les attributs des métadonnées EC2 (région, type d’instance, ID d’instance) afin de surveiller des ressources spécifiques
- Corrélez les logs d’hôte EC2 avec les logs d’application pour un dépannage plus complet
- Créez des tableaux de bord personnalisés pour la surveillance de la sécurité (tentatives SSH, utilisation de sudo, blocages du pare-feu)
Mise en production
Ce guide installe l'OpenTelemetry Collector directement sur des instances EC2, ce qui constitue le modèle recommandé en production pour la supervision au niveau de l'hôte. Pour gérer des collecteurs sur un grand nombre d'instances, envisagez d'utiliser des outils de gestion de configuration (Ansible, Chef, Puppet) ou l'OpenTelemetry Operator dans des environnements Kubernetes. Consultez Envoi de données OpenTelemetry pour la configuration de production.