Mise en place de la surveillance des performances réseau
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Mise en place de la surveillance des performances réseau

La surveillance des performances réseau nécessite la version 6.14+ de l’Agent Datadog. Cette fonctionnalité étant basée sur eBPF, la plateforme doit également utiliser une version 4.4.0+ du kernel Linux.

Les plates-formes suivantes sont prises en charge :

  • Ubuntu 16.04+
  • Debian 9+
  • Fedora 26 et versions ultérieures
  • SUSE 15+
  • Amazon AMI 2016.03+
  • Amazon Linux 2

L’exigence de version pour le kernel Linux (4.4.0+) ne s’applique pas à CentOS/RHEL 7.6+. La fonction Résolution DNS n’est pas prise en charge par CentOS/RHEL 7.6.

Remarque : la surveillance des performances réseau n’est pas disponible sur Windows et macOS pour le moment.

Les systèmes de provisionnement suivants sont pris en charge :

Implémentation

Pour activer la solution Network Performance Monitoring, configurez-la dans le fichier de configuration principal de votre Agent en fonction de la configuration de votre système.

Cet outil a été conçu dans l’optique d’analyser le trafic entre des endpoints réseau et de mapper des dépendances réseau. Il est donc conseillé de l’installer sur un sous-ensemble pertinent de votre infrastructure ainsi que sur deux hosts au minimum pour en tirer pleinement profit.

Pour activer la surveillance des performances réseau avec l’Agent Datadog, utilisez les configurations suivantes :

  1. Si vous utilisez une version de l’Agent antérieure à la v6.14, activez d’abord la collecte de live processes. Si ce n’est pas le cas, passez à l’étape suivante.

  2. Copiez l’exemple de configuration system-probe :

    sudo -u dd-agent cp /etc/datadog-agent/system-probe.yaml.example /etc/datadog-agent/system-probe.yaml
  3. Modifiez /etc/datadog-agent/system-probe.yaml en définissant le flag enable sur true :

    system_probe_config:
        ## @param enabled - boolean - optional - default: false
        ## Set to true to enable the System Probe.
        #
        enabled: true
  4. Si vous exécutez un Agent antérieur à la version 6.18 ou 7.18, démarrez manuellement le system-probe et configurez-le de façon à ce qu’il se lance au démarrage. Pour les versions 6.18 et 7.18 , le system-probe se lance automatiquement en même temps que l’Agent :

    sudo systemctl start datadog-agent-sysprobe
    sudo systemctl enable datadog-agent-sysprobe

    Remarque : si vous ne pouvez pas utiliser la commande systemctl sur votre système, effectuez le démarrage à l’aide de la commande suivante : sudo service datadog-agent-sysprobe start. Configurez ensuite le system-probe de façon à ce qu’il se lance au démarrage, avant le démarrage de datadog-agent.

  5. Redémarrez l’Agent.

    sudo systemctl restart datadog-agent

    Remarque : si vous ne pouvez pas utiliser la commande systemctl sur votre système, exécutez la commande suivante : sudo service datadog-agent restart.

Systèmes avec SELinux

Sur les systèmes disposant de SELinux, le binaire system-probe requiert des autorisations spéciales pour utiliser les fonctionnalités eBPF.

Le package RPM de l’Agent Datadog pour les systèmes basés sur CentOS comprend une stratégie SELinux permettant d’accorder ces autorisation au binaire system-probe.

Si vous devez utiliser la solution Network Performance Monitoring sur d’autres systèmes disposant de SELinux, effectuez ce qui suit :

  1. Modifiez la stratégie SELinux de base afin de l’adapter à votre configuration SELinux. Selon votre système, il est possible que certains types ou attributs n’existent pas ou qu’ils possèdent d’autres noms.

  2. Compilez la stratégie au sein d’un module. Si vous avez nommé votre fichier de stratégie system_probe_policy.te, utilisez la commande suivante :

    checkmodule -M -m -o system_probe_policy.mod system_probe_policy.te
    semodule_package -o system_probe_policy.pp -m system_probe_policy.mod
  3. Appliquez le module à votre système SELinux :

    semodule -v -i system_probe_policy.pp
  4. Modifiez le type de binaire system-probe afin d’utiliser celui défini dans la stratégie. Si votre répertoire d’installation de l’Agent est system_probe_policy.te, utilisez la commande suivante :

    semanage fcontext -a -t system_probe_t /opt/datadog-agent/embedded/bin/system-probe
    restorecon -v /opt/datadog-agent/embedded/bin/system-probe
  5. Redémarrez l’Agent.

Remarque : pour suivre ces instructions, vous devez avoir installer certains utilitaires SELinux (checkmodule, semodule, semodule_package, semanage et restorecon), disponibles sur la plupart des distributions standard comme Ubuntu, Debian, RHEL, CentOS et SUSE. Consultez la documentation de votre distribution pour découvrir comment les installer.

Si ces utilitaires ne sont pas disponibles pour votre distribution, suivez les mêmes instructions, mais utilisez à la place les utilitaires dont vous disposez.

Pour activer de A à Z la solution Network Performance Monitoring avec Kubernetes :

  1. Téléchargez le modèle de manifeste datadog-agent.yaml.
  2. Remplacez <DATADOG_API_KEY> par votre clé d’API Datadog.
  3. Définissez votre site Datadog (facultatif). Si vous utilisez le site européen de Datadog, définissez la variable d’environnement DD_SITE sur datadoghq.eu dans le manifeste datadog-agent.yaml.
  4. Déployez le DaemonSet avec cette commande :

    kubectl apply -f datadog-agent.yaml

Si l’Agent est déjà exécuté avec un manifeste :

  1. Ajoutez l’annotation container.apparmor.security.beta.kubernetes.io/system-probe: unconfined au modèle datadog-agent :

    spec:
        selector:
            matchLabels:
                app: datadog-agent
        template:
            metadata:
                labels:
                    app: datadog-agent
                name: datadog-agent
                annotations:
                    container.apparmor.security.beta.kubernetes.io/system-probe: unconfined
  2. Activez la collecte de processus et le system-probe pour le conteneur de l’Agent avec les variables d’environnement suivantes. Si tous les Agents s’exécutent dans un même conteneur, utilisez :

      # (...)
                      env:
                      # (...)
                          - name: DD_PROCESS_AGENT_ENABLED
                            value: 'true'
                          - name: DD_SYSTEM_PROBE_ENABLED
                            value: 'true'
                          - name: DD_SYSTEM_PROBE_EXTERNAL
                            value: 'true'
                          - name: DD_SYSPROBE_SOCKET
                            value: /var/run/s6/sysprobe.sock

    Si l’Agent de processus s’exécute dans un conteneur distinct, les variables d’environnement ci-dessus doivent être définies dans ce conteneur.

  3. Montez les volumes supplémentaires suivants dans votre conteneur datadog-agent :

     # (...)
            spec:
                serviceAccountName: datadog-agent
                containers:
                    - name: datadog-agent
                      image: 'datadog/agent:latest'
                      # (...)
                  volumeMounts:
                      - name: procdir
                        mountPath: /host/proc
                        readOnly: true
                      - name: cgroups
                        mountPath: /host/sys/fs/cgroup
                        readOnly: true
                      - name: debugfs
                        mountPath: /sys/kernel/debug
                      - name: s6-run
                        mountPath: /var/run/s6
  4. Ajoutez un nouveau system-probe en tant que sidecar de l’Agent :

     # (...)
            spec:
                serviceAccountName: datadog-agent
                containers:
                    - name: datadog-agent
                      image: 'datadog/agent:latest'
                    # (...)
                    - name: system-probe
                      image: 'datadog/agent:latest'
                      imagePullPolicy: Always
                      securityContext:
                          capabilities:
                              add:
                                  - SYS_ADMIN
                                  - SYS_RESOURCE
                                  - SYS_PTRACE
                                  - NET_ADMIN
                                  - IPC_LOCK
                      command:
                          - /opt/datadog-agent/embedded/bin/system-probe
                      env:
                          - name: DD_SYSPROBE_SOCKET
                            value: /var/run/s6/sysprobe.sock
                      resources:
                          requests:
                              memory: 150Mi
                              cpu: 200m
                          limits:
                              memory: 150Mi
                              cpu: 200m
                      volumeMounts:
                          - name: procdir
                            mountPath: /host/proc
                            readOnly: true
                          - name: cgroups
                            mountPath: /host/sys/fs/cgroup
                            readOnly: true
                          - name: debugfs
                            mountPath: /sys/kernel/debug
                          - name: s6-run
                            mountPath: /var/run/s6
  5. Enfin, ajoutez les volumes suivants à votre manifeste :

                volumes:
                    - name: s6-run
                      emptyDir: {}
                    - name: debugfs
                      hostPath:
                          path: /sys/kernel/debug

Pour activer la surveillance des performances réseau dans Docker, utilisez la configuration suivante au lancement de l’Agent de conteneur :

$ docker run -e DD_API_KEY="<CLÉ_API_DATADOG>" \
-e DD_SYSTEM_PROBE_ENABLED=true \
-e DD_PROCESS_AGENT_ENABLED=true \
      -v /var/run/docker.sock:/var/run/docker.sock:ro \
      -v /proc/:/host/proc/:ro \
      -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
-v /sys/kernel/debug:/sys/kernel/debug \
--security-opt apparmor:unconfined \
--cap-add=SYS_ADMIN \
--cap-add=SYS_RESOURCE \
--cap-add=SYS_PTRACE \
--cap-add=NET_ADMIN \
--cap-add=IPC_LOCK \
datadog/agent:latest

Remplacez <CLÉ_API_DATADOG> par votre clé d’API Datadog.

Si vous utilisez docker-compose, faites les ajouts suivants au service de l’Agent Datadog.

version: '3'
services:
  ..
  datadog:
    image: "datadog/agent:latest"
    environment:
       DD_SYSTEM_PROBE_ENABLED: 'true'
       DD_PROCESS_AGENT_ENABLED: 'true'
       DD_API_KEY: '<CLÉ_API_DATADOG>'
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro
    - /proc/:/host/proc/:ro
    - /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
    - /sys/kernel/debug:/sys/kernel/debug
    cap_add:
    - SYS_ADMIN
    - SYS_RESOURCE
    - SYS_PTRACE
    - NET_ADMIN
    - IPC_LOCK
    security_opt:
    - apparmor:unconfined

Pour une configuration sur AWS ECS, consultez la page de documentation relative à AWS ECS.

Pour aller plus loin