> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Superviser les logs Systemd avec ClickStack

> Superviser les logs Systemd et Journald avec ClickStack

export const TrackedLink = ({href, eventName, children, ...rest}) => {
  const handleClick = () => {
    try {
      if (typeof window !== "undefined" && window.galaxy && eventName) {
        window.galaxy.track(eventName, {
          interaction: "click"
        });
      }
    } catch (e) {}
  };
  return <a href={href} onClick={handleClick} {...rest}>
      {children}
    </a>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<Info>
  **En bref**

  Collectez et visualisez les logs du journal systemd dans ClickStack à l’aide du receiver journald de l’OpenTelemetry Collector. Comprend un jeu de données de démonstration et un tableau de bord préconfiguré.
</Info>

<div id="existing-systems">
  ## Intégration avec les systèmes existants
</div>

Surveillez les logs journald de votre système Linux actuel en exécutant l’OpenTelemetry Collector avec le journald receiver pour collecter les logs système et les envoyer à ClickStack via OTLP.

Si vous souhaitez d’abord tester cette intégration sans modifier votre configuration actuelle, passez à la [section sur le jeu de données de démonstration](#demo-dataset).

<div id="prerequisites">
  ##### Prérequis
</div>

* Une instance ClickStack en cours d’exécution
* Système Linux avec systemd (Ubuntu 16.04+, CentOS 7+, Debian 8+)
* Docker ou Docker Compose installé sur le système surveillé

<Steps>
  <Step title="Obtenir la clé API ClickStack" id="get-api-key">
    L'OpenTelemetry Collector envoie les données vers le point de terminaison OTLP de ClickStack, qui nécessite une authentification.

    1. Ouvrez HyperDX à l'URL de votre instance ClickStack (par ex. [http://localhost:8080](http://localhost:8080))
    2. Créez un compte ou connectez-vous si nécessaire
    3. Accédez à **Team Settings → API Keys**
    4. Copiez votre **Ingestion API Key**

    <Image img="https://mintcdn.com/private-7c7dfe99/Xl4dVm4Z5MHG1h5Z/images/clickstack/api-key.webp?fit=max&auto=format&n=Xl4dVm4Z5MHG1h5Z&q=85&s=2988f52ae02de449619fe59ca8c55a58" alt="Clé API ClickStack" width="3810" height="1924" data-path="images/clickstack/api-key.webp" />

    5. Définissez-la comme variable d'environnement :

    ```bash theme={null}
    export CLICKSTACK_API_KEY=your-api-key-here
    ```
  </Step>

  <Step title="Vérifier que le journal systemd est actif" id="verify-systemd">
    Assurez-vous que votre système utilise systemd et dispose de journaux journalctl :

    ```bash theme={null}
    # Vérifier la version de systemd
    systemctl --version

    # Afficher les entrées récentes du journal
    journalctl -n 20

    # Vérifier l'utilisation disque du journal
    journalctl --disk-usage
    ```

    Si le journal est stocké uniquement en mémoire, activez le stockage persistant :

    ```bash theme={null}
    sudo mkdir -p /var/log/journal
    sudo systemd-tmpfiles --create --prefix /var/log/journal
    sudo systemctl restart systemd-journald
    ```
  </Step>

  <Step title="Créer la configuration de l'OpenTelemetry Collector" id="create-otel-config">
    Créez un fichier de configuration pour l'OpenTelemetry Collector :

    ```yaml theme={null}
    cat > otel-config.yaml << 'EOF'
    receivers:
      journald:
        directory: /var/log/journal
        priority: info
        units:
          - sshd
          - nginx
          - docker
          - containerd
          - systemd

    processors:
      batch:
        timeout: 10s
        send_batch_size: 10000
      
      resource:
        attributes:
          - key: service.name
            value: systemd-logs
            action: insert
          - key: host.name
            from_attribute: _HOSTNAME
            action: upsert
      
      attributes:
        actions:
          - key: unit
            from_attribute: _SYSTEMD_UNIT
            action: upsert
          - key: priority
            from_attribute: PRIORITY
            action: upsert

    exporters:
      otlphttp:
        endpoint: ${CLICKSTACK_ENDPOINT}
        headers:
          authorization: ${CLICKSTACK_API_KEY}

    service:
      pipelines:
        logs:
          receivers: [journald]
          processors: [resource, attributes, batch]
          exporters: [otlphttp]
    EOF
    ```
  </Step>

  <Step title="Déployer avec Docker Compose" id="deploy-docker-compose">
    <Note>
      Le receiver `journald` nécessite le binaire `journalctl` pour lire les fichiers du journal. L'image officielle `otel/opentelemetry-collector-contrib` n'inclut pas `journalctl` par défaut.

      Pour les déploiements conteneurisés, vous pouvez soit installer le collector directement sur l'hôte, soit créer une image personnalisée avec les utilitaires systemd. Consultez la [section de dépannage](#journalctl-not-found) pour plus de détails.
    </Note>

    Cet exemple montre comment déployer l'OTel Collector aux côtés de ClickStack :

    ```yaml theme={null}
    services:
      clickstack:
        image: clickhouse/clickstack-all-in-one:latest
        ports:
          - "8080:8080"
          - "4317:4317"
          - "4318:4318"
        networks:
          - monitoring
      
      otel-collector:
        image: otel/opentelemetry-collector-contrib:0.115.1
        depends_on:
          - clickstack
        environment:
          - CLICKSTACK_API_KEY=${CLICKSTACK_API_KEY}
          - CLICKSTACK_ENDPOINT=http://clickstack:4318
        volumes:
          - ./otel-config.yaml:/etc/otelcol/config.yaml:ro
          - /var/log/journal:/var/log/journal:ro
          - /run/log/journal:/run/log/journal:ro
          - /etc/machine-id:/etc/machine-id:ro
        command: ["--config=/etc/otelcol/config.yaml"]
        networks:
          - monitoring

    networks:
      monitoring:
        driver: bridge
    ```

    Démarrez les services :

    ```bash theme={null}
    docker compose up -d
    ```
  </Step>

  <Step title="Vérifier les logs dans HyperDX" id="verifying-logs">
    Une fois la configuration en place, connectez-vous à HyperDX et vérifiez que les logs arrivent bien :

    1. Accédez à la vue Search
    2. Définissez la source sur Logs
    3. Filtrez sur `service.name:systemd-logs`
    4. Vous devriez voir des entrées de log structurées avec des champs comme `unit`, `priority`, `MESSAGE`, `_HOSTNAME`

    <Image img="https://mintcdn.com/private-7c7dfe99/A68-kVUDkVcT2W3b/images/clickstack/systemd/systemd-search-view.webp?fit=max&auto=format&n=A68-kVUDkVcT2W3b&q=85&s=2b119b4bfcfe58764a0b95d0bc8bea54" alt="Vue de recherche des logs" width="3838" height="1934" data-path="images/clickstack/systemd/systemd-search-view.webp" />

    <Image img="https://mintcdn.com/private-7c7dfe99/A68-kVUDkVcT2W3b/images/clickstack/systemd/systemd-log-view.webp?fit=max&auto=format&n=A68-kVUDkVcT2W3b&q=85&s=19d3074d17c523b4a0c1061422ac9749" alt="Vue des logs" width="3838" height="1934" data-path="images/clickstack/systemd/systemd-log-view.webp" />
  </Step>
</Steps>

<div id="demo-dataset">
  ## Jeu de données de démonstration
</div>

Pour les utilisateurs qui souhaitent tester l’intégration des logs systemd avant de configurer leurs systèmes de production, nous fournissons un jeu de données d’exemple contenant des logs systemd pré-générés avec des motifs réalistes.

<Steps>
  <Step title="Télécharger le jeu de données d’exemple" id="download-sample">
    Téléchargez le fichier de logs d’exemple :

    ```bash theme={null}
    curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/systemd/systemd-demo.log
    ```
  </Step>

  <Step title="Créer une configuration de collector de démonstration" id="demo-config">
    Créez un fichier de configuration pour la démonstration :

    ```bash theme={null}
    cat > systemd-demo.yaml << 'EOF'
    receivers:
      filelog:
        include:
          - /tmp/systemd-demo/systemd-demo.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: "systemd-demo"

    service:
      pipelines:
        logs/systemd-demo:
          receivers: [filelog]
          processors:
            - memory_limiter
            - transform
            - batch
          exporters:
            - clickhouse
    EOF
    ```
  </Step>

  <Step title="Exécuter ClickStack avec les données de démonstration" id="run-demo">
    Démarrez ClickStack avec les logs de démonstration :

    ```bash theme={null}
    docker run -d --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)/systemd-demo.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
      -v "$(pwd)/systemd-demo.log:/tmp/systemd-demo/systemd-demo.log:ro" \
      clickhouse/clickstack-all-in-one:latest
    ```

    <Note>
      La démonstration utilise le receiver `filelog` avec des logs texte au lieu de `journald`, afin d’éviter d’avoir à utiliser `journalctl` dans le conteneur.
    </Note>
  </Step>

  <Step title="Vérifier les logs dans HyperDX" id="verify-demo-logs">
    Une fois ClickStack démarré :

    1. Ouvrez [HyperDX](http://localhost:8080/) et connectez-vous à votre compte
    2. Accédez à la vue Search et définissez la source sur `Logs`
    3. Définissez l’intervalle de temps sur **2025-11-14 00:00:00 - 2025-11-17 00:00:00**

    <Image img="https://mintcdn.com/private-7c7dfe99/A68-kVUDkVcT2W3b/images/clickstack/systemd/systemd-search-view.webp?fit=max&auto=format&n=A68-kVUDkVcT2W3b&q=85&s=2b119b4bfcfe58764a0b95d0bc8bea54" alt="Vue de recherche des logs" width="3838" height="1934" data-path="images/clickstack/systemd/systemd-search-view.webp" />

    <Image img="https://mintcdn.com/private-7c7dfe99/A68-kVUDkVcT2W3b/images/clickstack/systemd/systemd-log-view.webp?fit=max&auto=format&n=A68-kVUDkVcT2W3b&q=85&s=19d3074d17c523b4a0c1061422ac9749" alt="Vue des logs" width="3838" height="1934" data-path="images/clickstack/systemd/systemd-log-view.webp" />

    <Info>
      **Affichage du fuseau horaire**

      HyperDX affiche les timestamps dans le fuseau horaire local de votre navigateur. Les données de démonstration couvrent la période **2025-11-15 00:00:00 - 2025-11-16 00:00:00 (UTC)**. Cet intervalle de temps élargi vous permet de voir les logs de démonstration où que vous soyez.
    </Info>
  </Step>
</Steps>

<div id="dashboards">
  ## Tableaux de bord et visualisations
</div>

Pour vous aider à démarrer la surveillance des logs systemd avec ClickStack, nous fournissons des visualisations essentielles pour les données du journal systemd.

<Steps>
  <Step title="Télécharger la configuration du tableau de bord" id="download">
    <TrackedLink href={'https://clickhouse-docs-assets.s3.us-east-1.amazonaws.com/examples/systemd-logs-dashboard.json'} download="systemd-logs-dashboard.json" eventName="docs.systemd_logs_monitoring.dashboard_download">Télécharger le fichier de configuration du tableau de bord</TrackedLink>.
  </Step>

  <Step title="Importer le tableau de bord préconfiguré" id="import-dashboard">
    1. Ouvrez HyperDX et accédez à la section Dashboards
    2. Cliquez sur **Import Dashboard** dans l’angle supérieur droit, sous les points de suspension

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/import-dashboard.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=ec4eae8ea8e1f77c9b5897b45339b08b" alt="Bouton d’import du tableau de bord" width="3024" height="556" data-path="images/clickstack/import-dashboard.webp" />

    3. Téléversez le fichier `systemd-logs-dashboard.json`, puis cliquez sur **Finish Import**

    <Image img="https://mintcdn.com/private-7c7dfe99/A68-kVUDkVcT2W3b/images/clickstack/systemd/finish-import-systemd.webp?fit=max&auto=format&n=A68-kVUDkVcT2W3b&q=85&s=6a481a38616ed009e0e514cce670b450" alt="Terminer l’importation" width="3350" height="1908" data-path="images/clickstack/systemd/finish-import-systemd.webp" />
  </Step>

  <Step title="Afficher le tableau de bord" id="created-dashboard">
    Le tableau de bord comprend des visualisations pour :

    * Le volume de logs au fil du temps
    * Les principales unités systemd par nombre de logs
    * Les événements d’authentification SSH
    * Les défaillances de service
    * Les taux d’erreur

    <Image img="https://mintcdn.com/private-7c7dfe99/A68-kVUDkVcT2W3b/images/clickstack/systemd/systemd-logs-dashboard.webp?fit=max&auto=format&n=A68-kVUDkVcT2W3b&q=85&s=4de3f61f8407777b7649d294554070e5" alt="Exemple de tableau de bord" width="3808" height="1908" data-path="images/clickstack/systemd/systemd-logs-dashboard.webp" />

    <Note>
      Pour le jeu de données de démonstration, définissez l’intervalle de temps sur **2025-11-15 00:00:00 - 2025-11-16 00:00:00 (UTC)** (à ajuster selon votre fuseau horaire local).
    </Note>
  </Step>
</Steps>

<div id="troubleshooting">
  ## Dépannage
</div>

<div id="no-logs">
  ### Aucun log n’apparaît dans HyperDX
</div>

Vérifiez si les logs parviennent à ClickHouse :

```bash theme={null}
docker exec clickstack clickhouse-client --query "
SELECT COUNT(*) as log_count
FROM otel_logs
WHERE ServiceName = 'systemd-logs'
"
```

Si aucun résultat n’est renvoyé, vérifiez les logs du collector :

```bash theme={null}
docker logs otel-collector | grep -i "error\|journald" | tail -20
```

<div id="journalctl-not-found">
  ### erreur « journalctl introuvable »
</div>

Si vous voyez `exec: "journalctl": executable file not found in $PATH` :

L’image `otel/opentelemetry-collector-contrib` n’inclut pas `journalctl`. Vous pouvez :

1. **Installer le collector sur l’hôte** :

```bash theme={null}
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.115.0/otelcol-contrib_0.115.0_linux_amd64.tar.gz
tar -xzf otelcol-contrib_0.115.0_linux_amd64.tar.gz
sudo mv otelcol-contrib /usr/local/bin/
otelcol-contrib --config=otel-config.yaml
```

2. **Utilisez l’approche par exportation de texte** (comme dans la démo) avec le receiver `filelog` qui lit les exports journald

<div id="next-steps">
  ## Étapes suivantes
</div>

* Configurez des [alertes](/docs/fr/clickstack/features/alerts) pour les événements système critiques (pannes de services, échecs d'authentification, arrêts OOM)
* Créez des [tableaux de bord](/docs/fr/clickstack/features/dashboards/overview) supplémentaires pour des cas d'utilisation spécifiques (surveillance de la sécurité SSH, état de santé des services)
* Filtrez sur des unités systemd spécifiques pour réduire le bruit et vous concentrer sur les services essentiels

<div id="going-to-production">
  ## Passage en production
</div>

Ce guide utilise un OpenTelemetry Collector distinct pour lire les logs systemd et les envoyer au point de terminaison OTLP de ClickStack, ce qui constitue l’approche recommandée en production.

Pour les environnements de production comportant plusieurs hôtes, envisagez :

* de déployer le collector sous forme de DaemonSet dans Kubernetes
* d’exécuter le collector en tant que service systemd sur chaque hôte
* d’utiliser l’OpenTelemetry Operator pour automatiser le déploiement

Consultez [Ingesting with OpenTelemetry](/docs/fr/clickstack/ingesting-data/opentelemetry) pour découvrir les approches de déploiement en production.
