Configuration du collecteur « Python »

Une fois le collecteur Instana Python installé, vous n'aurez pas besoin de le configurer manuellement pour la surveillance. Il commence automatiquement à collecter les indicateurs clés et les traces distribuées liés à vos processus d' Python. Vous pouvez toutefois configurer chaque composant en fonction de vos besoins spécifiques.

Configuration générale

Le package Instana Python vise à être une solution automatique entièrement sans intervention pour la surveillance Python, mais il est toujours entièrement configurable en cas de besoin. Les options suivantes sont disponibles pour configurer ce paquet.

Activer l' AutoProfile

AutoProfile génère et signale les profils de processus à Instana automatiquement et en continu. Pour en savoir plus sur les profils, consultez la section « Analyser les profils ».

Pour activer AutoProfile, définissez la variable d'environnement INSTANA_AUTOPROFILE=true. AutoProfile n'est pris en charge que pour une installation manuelle. Assurez-vous que le capteur « Instana » est initialisé dans le thread principal.

Établissement de la communication entre l'hôte et l'agent

Le package Instana Python tente de communiquer avec l'agent Instana via l' 127.0.0.1 IP et, à défaut, via la passerelle par défaut de l'hôte pour les environnements conteneurisés. Si l'agent n'est disponible à aucun de ces emplacements, vous pouvez utiliser des variables d'environnement pour configurer l'emplacement où rechercher l'agent hôte d' Instana.

Les variables d'environnement doivent être définies dans l'environnement du processus en cours d'exécution.

export INSTANA_AGENT_HOST = '127.0.0.1'
export INSTANA_AGENT_PORT = '42699'
 

Voir aussi :

Définition du nom de processus

Utilisez INSTANA_PROCESS_NAME pour définir un libellé personnalisée pour l'entité d'infrastructure qui représente le processus Python.

Configuration du package

Le package Instana comprend un module de configuration d'environnement exécution qui gère la configuration de différents composants.

Remarque : à mesure que le paquet évolue, de nouvelles options sont ajoutées.
from instana.configurator import config

# To enable tracing context propagation across Asyncio ensure_future and create_task calls
# Default is false
config['asyncio_task_context_propagation']['enabled'] = True
 

Désactivation de l'instrumentation automatique

Ce package Instana inclut l'instrumentation automatique initialisée lors du chargement du package. Cette instrumentation fournit des informations de traçage distribué à votre tableau de bord Instana. Pour consulter la liste complète des outils d'instrumentation automatique, consultez le document « Versions prises en charge ».

Vous pouvez désactiver l'instrumentation automatique (traçage) en définissant la variable d'environnement INSTANA_DISABLE_AUTO_INSTR , ce qui empêche le chargement de l'instrumentation intégrée au traceur.

export INSTANA_DISABLE_AUTO_INSTR="true"
 

Recherche de la section de sortie racine sans section d'entrée

Par défaut, l'outil Tracer de Instana Python ne capture que les segments de sortie pour lesquels il existe un segment d'entrée actif. Cependant, dans certains cas, il est nécessaire de suivre les segments de sortie qui se produisent sans segment d'entrée.

Pour configurer l'outil Tracer d' Python afin de tracer des segments de sortie autonomes, définissez la variable INSTANA_ALLOW_ROOT_EXIT_SPAN d'environnement sur 1 ou true comme suit :

export INSTANA_ALLOW_ROOT_EXIT_SPAN=1
 

Cette fonctionnalité est utile dans les cas suivants :

  • Messages entrants provenant de bibliothèques de messagerie non prises en charge.
  • Les requêtes effectuées via des protocoles non pris en charge, tels que le protocole « raw » Transmission Control Protocol ( TCP ) ou WebSocket.
  • Tâches planifiées lancées en interne par d'autres applications.
  • Exécution des scripts d' Python.

Infrastructures

Vous pouvez configurer le collecteur Instana Python pour surveiller et collecter des données à partir des frameworks suivants :

Django (Manuel)

Lorsque la variable AUTOWRAPT_BOOTSTRAP=instana d'environnement est définie, le framework Django doit être automatiquement détecté et configuré. Si, pour une raison quelconque, vous préférez ou nécessitez une instrumentation manuelle de Django, vous pouvez à la place ajouter instana.instrumentation.django.middleware.InstanaMiddleware à votre liste MIDDLEWARE dans settings.py :

import os
import instana

# ... <snip> ...

MIDDLEWARE = [
    'instana.instrumentation.django.middleware.InstanaMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
 

Pyramid

Remarque : à partir des versions Instana, Python et 3.0.0, l'instrumentation Pyramid est automatique.

À partir de la version 1.22.0 jusqu'à la version 2.5.3, le paquet Instana Python inclut une prise en charge manuelle de Pyramid. Pour ajouter de la visibilité à votre application Pyramide, suivez les étapes suivantes :

  1. Assurez-vous que le paquet instana est ajouté au requirements.txt et installé dans l'environnement virtuel ou le conteneur.
  2. Ajoutez import instana ceci au début de votre __init__.py fichier pour votre application Pyramid.
  3. Ajoutez l'instrumentation Tween « Instana » à votre configuration.
import instana

with Configurator(settings=settings) as config:
    # ...
    config.include('instana.instrumentation.pyramid.tweens')
    # ...
 

L'image suivante présente un exemple de l'instrumentation d' Instana s dans votre configuration Pyramid :

Pyramid

Si l'option pyramid.tweens est définie dans votre configuration production.ini, vérifiez que instana.instrumentation.pyramid.tweens.InstanaTweenFactory est la première entrée de cette liste :

pyramid.tweens =
    instana.instrumentation.pyramid.tweens.InstanaTweenFactory
    # other tweens
 

Piles WSGI et ASGI

Le package Instana Python comprend des intergiciels WSGI (Web Server Gateway Interface) et ASGI (Asynchronous Server Gateway Interface) pouvant être intégrés à n'importe quelle pile compatible. L'automatisation est disponible pour diverses piles, mais l'ajout manuel est également possible pour celles qui ne bénéficient pas encore d'une prise en charge automatique de la part d' Instana.

Une fois que vous avez installé le paquet Instana Python, utilisez les commandes suivantes :

import instana

from instana.middleware import InstanaWSGIMiddleware
# or
from instana.middleware import InstanaASGIMiddleware

# Wrap the wsgi app in Instana middleware (InstanaWSGIMiddleware)
wsgiapp = InstanaWSGIMiddleware(MyWSGIApplication())
 

Instana travaille actuellement à l'automatisation de l'instrumentation pour tous les principaux frameworks, mais en attendant, vous pouvez consulter des guides de démarrage rapide spécifiques pour les piles qui ne bénéficient pas encore d'une prise en charge automatique sur Instana.

Bottle WSGI

Utilisez les commandes suivantes pour instrumenter Bottle WSGI :

# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware

from bottle import Bottle, run

app = Bottle()

@app.route('/hello')
def hello():
    return "Hello World!"

# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)

# Alternative method for reference
# app = InstanaWSGIMiddleware(bottle.default_app())

run(app, host='localhost', port=8080)
 

CherryPy WSGI

Utilisez les commandes suivantes pour instrumenter le WSGI d' CherryPy :

import cherrypy

# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware

# My CherryPy application
class Root(object):
    @cherrypy.expose
    def index(self):
        return "hello world"

cherrypy.config.update({'engine.autoreload.on': False})
cherrypy.server.unsubscribe()
cherrypy.engine.start()

# Wrap the application with the Instana WSGI Middleware
wsgiapp = InstanaWSGIMiddleware(cherrypy.tree.mount(Root()))
 

Dans cet exemple, nous utilisons uwsgi comme serveur web et démarrons avec :

uwsgi --socket 127.0.0.1:8080 --enable-threads --protocol=http --wsgi-file mycherry.py --callable wsgiapp -H ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z
 

~/.local/share/virtualenvs/cherrypyapp-C1BUba0z est le chemin d'accès à mon environnement virtuel local à partir de l'environnement pip

Falcon WSGI

Le framework Falcon peut également être instrumenté via le wrapper WSGI de la manière suivante :

import falcon

# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware

app = falcon.API()

# ...

# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)
 

Ensuite, lancez votre pile avec uwsgi --http :9000 --enable-threads --module=myfalcon.app à titre d'exemple

Applications basées sur Gevent

Instana prend en charge les applications basées sur gevent1.4 et les versions ultérieures.

Si vous importez manuellement le package Instana Python, assurez-vous que l'importation de gevent et l'application du correctif Monkey ont lieu en premier.

    from gevent import monkey
    monkey.patch_all()
    import instana # <--- after the gevent monkey patching of stdlib
 
Remarque : avant l' Instana, Python Tracer 2.5.0, les geventapplications basées sur ne doivent pas utiliser la méthode d'activation de paquets « Activation sans modification du code » (qui utilise la variable AUTOWRAPT_BOOTSTRAP d'environnement). Cette méthode ne fonctionne pas en raison des geventexigences de « monkey patching » de premier ordre de, comme décrit précédemment. Dans ce cas, utilisez la méthode « Activation par modification du code ».

À partir de la version Instana Python Tracer 2.5.0, le traceur s'exécute monkey.patch_all() automatiquement lorsque le webhook AutoTrace est utilisé ou que la méthode d'activation sans modification du code est employée. Vous pouvez affiner ce « monkey patching » en définissant la variable INSTANA_GEVENT_MONKEY_OPTIONS d'environnement. Grâce à cette liste séparée par des virgules, vous pouvez indiquer les modules à inclure ou à exclure du « monkey patching », à MONKEY OPTIONS l'instar de la fonction ` gevent.monkey.main ` de gevent.

Les exemples suivants présentent les options disponibles pour personnaliser les modules en vue du « monkey patching » :

export INSTANA_GEVENT_MONKEY_OPTIONS='--no-socket, --dns, --no-time, --select, --no-ssl'
 
export INSTANA_GEVENT_MONKEY_OPTIONS='no-socket, dns, no-time, select, no-ssl'
 
export INSTANA_GEVENT_MONKEY_OPTIONS='no-socket,dns,no-time,select,no-ssl'
 

Si vous utilisez Django avec gevent et la fonctionnalité d'autotracing de Instana, veillez à définir la variable DJANGO_SETTINGS_MODULE d'environnement avant le démarrage de l'autotracing. Pour plus d'informations sur la variable DJANGO_SETTINGS_MODULE d'environnement, consultez la documentation de Django.

Si ce niveau de personnalisation est encore insuffisant, utilisez la méthode d'activation des paquets Activation par modification du code.

Outils

Vous pouvez configurer le collecteur Instana Python pour surveiller et collecter des données provenant de différents outils.

Serveurs Web

Les configurations suivantes peuvent être utilisées pour surveiller différents serveurs Web :

uWSGI serveur web

Assurez-vous que enable-threads cette option est activée pour uwsgi.

Unités d'exécution

Cet outil d' Python, « instrumentation », crée un thread d'arrière-plan léger chargé de collecter et de transmettre périodiquement les métriques du processus. Par défaut, le GIL et le multithreading sont désactivés sous uWSGI. Si vous souhaitez instrumenter votre application exécutée sous uWSGI,, assurez-vous d'activer les threads en passant la --enable-threads commande (ou enable-threads = true dans le fichier INI). Pour plus d'informations, consultez la documentation de uWSGI.

uWSGI Exemple : ligne de commande

uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi -p 4 --enable-threads
 

Exemple uWSGI : fichier ini

[uwsgi]
http = :5000
master = true
processes = 4
enable-threads = true # required
 

Serveur web Gunicorn

Pour instrumenter votre application exécutée sous Gunicorn, veillez à lui passer --preload en argument.

Précharger

Cet outil d' Python, « instrumentation », crée un thread d'arrière-plan léger chargé de collecter et de transmettre périodiquement les métriques du processus. Par défaut, les processus du code de l'application après les travailleurs sont forkés dans Gunicorn. Si vous souhaitez instrumenter votre application exécutée sous Gunicorn, veillez à activer le préchargement en passant la --preload commande. Pour plus d'informations, voir la documentation Gunicorn.

Exemple Gunicorn : ligne de commande

Pour exécuter Gunicorn avec le préchargement, utilisez la commande suivante, illustrée dans cet exemple :

gunicorn -w 4 --preload "file:app"
 

Exemple Gunicorn : fichier de configuration

Pour utiliser Gunicorn avec un fichier de configuration, utilisez un fichier Python avec les variables suivantes. Ajouter '-c file_name.py à la commande Gunicorn.

bind = "0.0.0.0:8000"
workers = 4
preload_app = true  # required
 

Surveillance de l'expérience utilisateur (EUM)

Instana offre une surveillance approfondie des utilisateurs finaux qui relie les traces côté serveur aux événements du navigateur, vous offrant ainsi une vue d'ensemble complète, du serveur au navigateur.

Pour plus d'informations, consultez la page consacrée à la surveillance des utilisateurs finaux.

Portées de filtrage

Avec Tracer 3.11.0 d' Python, et les versions ultérieures, vous pouvez réduire le volume des données de trace en filtrant les segments en fonction de leurs attributs. Cette fonctionnalité permet d'optimiser les coûts liés à l'ingestion des données et de concentrer la surveillance sur les traces les plus pertinentes pour votre application.

Vous pouvez configurer des règles de filtrage pour exclure ou inclure des segments en fonction des critères suivants :

  • Attributs de portée : valeurs d'attribut spécifiques (par exemple, kafka.topic ou redis.command)
  • Catégories : Types de technologies, tels que databases, messaging, ou protocols
  • Types : identifiants de bibliothèque ou de framework (par exemple, httpou kafka)
  • Types : types de portées, tels que entry, exit, ou intermediate

Configuration du filtrage par intervalle

Vous pouvez configurer le filtrage des segments en utilisant l'une des méthodes suivantes. Lorsque plusieurs méthodes sont utilisées, le filtrage s'applique selon l'ordre de priorité suivant :

Filtrage à l'aide de variables d'environnement

Configurez les règles de filtrage des intervalles à l'aide des variables d'environnement suivantes :

  • INSTANA_CONFIG_PATH
    INSTANA_CONFIG_PATH=/path/to/your/configuration.yaml
     

    Indiquez le chemin d'accès au agent configuration.yaml fichier. Le fichier doit respecter les consignes décrites dans la section « Utilisation de la configuration de l'agent ».

  • INSTANA_TRACING_FILTER_<policy>_<rule-name>_ATTRIBUTES
    INSTANA_TRACING_FILTER_<policy>_<rule-name>_ATTRIBUTES="rule-key;rule-value;match-type"

Le tableau suivant répertorie les paramètres, accompagnés de leurs descriptions et des valeurs prises en charge :

Paramètre Description Valeurs
<policy> Filtrer le type de politique
  • EXCLUDE: Exclut les segments correspondant à la règle
  • INCLUDE: N'inclure que les segments correspondant à la règle
<rule-name> Identifiant unique de la règle (permet d'éviter les conflits avec d'autres règles)
rule-key Attribut à utiliser pour le filtrage
  • category: Groupes technologiques (databases, messaging, ou protocols)
  • kind: Type de plage (entry, exit, ou intermediate) - type: Bibliothèque ou framework (http, kafka, ou redis)
  • attribute: Attribut « span » spécifique (kafka.access, redis.command, ou dynamodb.op)
rule-value Liste de valeurs séparées par des virgules à faire correspondre
  • Pour kafka.access: consume, send, produce
  • Pour redis.command: SET, GET
match-type Stratégie d'appariement
  • strict: Correspondance exacte
  • startswith: Correspondance de préfixe
  • endswith: Correspondance de suffixe
  • contains: Correspondance de sous-chaîne
Exemples
# Exclude all HTTP spans
INSTANA_TRACING_FILTER_EXCLUDE_HTTP_ATTRIBUTES="type;http"

# Include only health check endpoints
INSTANA_TRACING_FILTER_INCLUDE_HEALTH_ATTRIBUTES="http.url;/health"

# Exclude all messaging spans
INSTANA_TRACING_FILTER_EXCLUDE_CATEGORY_ATTRIBUTES="category;messaging"

# Include only specific Kafka topic and operations
INSTANA_TRACING_FILTER_INCLUDE_KAFKA_ATTRIBUTES="kafka.topic;topic1;strict|kafka.access;consume,send"

# Exclude all exit spans
INSTANA_TRACING_FILTER_EXCLUDE_KIND_ATTRIBUTES="kind;exit"

Filtrage à l'aide de la configuration de l'agent

Définissez les règles de filtrage dans la tracing.filter section du fichier de configuration.yaml l'agent. La configuration utilise une structure de type « YAML » pour définir des règles de filtrage en fonction des attributs de la portée :

tracing:
  filter:
    deactivate: <boolean>
    <policy>: # exclude | include
      - name: <string>
        suppression: <boolean>
        attributes:
          - key: <string> # category | kind | type | span attribute (e.g., kafka.access, http.host)
            values: <list of strings>
            match_type: <string> # strict | startswith | endswith | contains
Important : vous pouvez définir plusieurs règles de filtrage au sein d'une même politique. Chaque règle peut définir plusieurs attributs, et tous ces attributs doivent correspondre pour que la règle s'applique.
Zone Obligatoire Description Par défaut
filter Oui Nœud racine pour toutes les règles de filtrage.
deactivate Non Commutateur de fonctionnalité permettant de désactiver le filtrage sans supprimer les règles configurées. Lorsquetrue le filtrage est désactivé. false
policy Oui Type de règle de filtrage :exclude « ou include».
name Oui Nom lisible décrivant la règle de filtrage.
suppression Non Détermine si les éléments « span » enfants sont masqués. Dans ce castrue, tous les éléments enfants sont masqués. Lorsquefalse les intervalles de dates sont autorisés. S'applique uniquement à la politique d'exclusion true
attributes Oui Liste des attributs de balise `span` qui doivent tous correspondre pour que la règle s'applique.
key Oui Clé d'attribut Span (par exemple, category, kind, type, ou des attributs spécifiques, tels quekafka.access ouhttp.host).
values Oui Liste des valeurs à rechercher. Un attribut est considéré comme correspondant si l'une de ses valeurs correspond. À utiliser'*' comme caractère générique pour trouver n'importe quelle valeur (utile pour filtrer en fonction de la présence d'un attribut).
match_type Non Stratégie de correspondance :strict,startswith,endswith, oucontains

Évaluation des règles

Les règles de filtrage sont évaluées dans l'ordre où elles apparaissent. Lorsqu'un segment correspond à une règle, celle-ci est appliquée et les règles suivantes ne sont pas évaluées. Classez les règles de la plus spécifique à la plus générale afin de garantir un filtrage correct.

Exemple de configuration

tracing:
  filter:
    exclude:
      - name: Exclude all health check endpoints
        attributes:
          - key: http.url
            values: [/health]
            match_type: contains
      - name: Exclude all messaging spans
        attributes:
          - key: category
            values: [messaging]
            match_type: strict
    include:
      - name: Include specific internal health endpoint
        attributes:
          - key: http.url
            values: [/internal/health]
            match_type: strict

Dans l'exemple précédent, la configuration de filtrage applique les règles suivantes :

  • Comprend les segments correspondants /internal/health (première règle de correspondance)
  • Exclut les intervalles qui correspondent à /health (mais pas à /internal/health)
  • Exclut toutes les balises de catégorie de messagerie
  • Filtre tous /health les points de terminaison sauf /internal/health

Ignorer les points de terminaison (obsolète)

Remarque : cette fonctionnalité est obsolète depuis la version Python Tracer 3.11.0. Utilisez plutôt des segments de filtrage.

À partir de Python Tracer 3.3.0, vous pouvez utiliser cette fonctionnalité pour filtrer les traces ou les appels inutiles afin de réduire l'ingestion globale de données. Par exemple, vous pouvez exclure le traçage de certains points de terminaison, tels que redis.get.

Cette fonctionnalité est disponible pour les bibliothèques prises en charge suivantes :

Bibliothèque Instana Python version du paquet
Redis >= 3.3.0
DynamoDB >= 3.3.0
Kafka >= 3.5.0

Règles de filtrage

Les règles de filtrage des segments sont les suivantes :

  • Lorsqu'une section est ignorée, toutes les sections suivantes en aval sont également ignorées.
  • Utilisez le caractère générique * pour ignorer tous les points de terminaison ou toutes les méthodes.
  • Les valeurs des points de terminaison (telles que les noms de sujets d' Kafka ) restent cohérentes d'un service à l'autre.
  • Les noms des méthodes peuvent varier en fonction du langage de programmation et de la technologie utilisés. Consultez l'interface utilisateur d' Instana pour déterminer la méthode et le point de terminaison appropriés pour votre service.

La capture d'écran suivante de l'interface utilisateur d' Instana fournit une référence visuelle permettant d'identifier la méthode et le point de terminaison appropriés pour la configuration :

Méthodes et paramètres d'évaluation dans l'interface utilisateur

Remarque : la fonctionnalité permettant d'ignorer des points de terminaison ne fonctionne qu'avec des noms de méthode exacts. Assurez-vous d'utiliser le nom de méthode correct à filtrer. Cette documentation utilise la send méthode du Kafka-Python package.

Configuration de l'exclusion des terminaux

Vous pouvez activer l'exclusion des points de terminaison en utilisant l'une des options suivantes :

Remarque : si plusieurs méthodes sont utilisées simultanément, Python Tracer établit un ordre de priorité comme suit : variable d'environnement, configuration intégrée au code et configuration de l'agent.

Variables d'environnement

Vous pouvez configurer les points de terminaison à ignorer en utilisant les variables d'environnement suivantes pour filtrer les points de terminaison par service :

  • INSTANA_IGNORE_ENDPOINTS_PATH : Configurer le filtrage via un fichier d' YAML s externe.
  • INSTANA_IGNORE_ENDPOINTS : Exclure les intervalles en se basant uniquement sur les noms des méthodes.
Utilisation INSTANA_IGNORE_ENDPOINTS_PATH

Grâce à cette variable d'environnement, vous pouvez configurer le filtrage via un fichier d' YAML s externe, comme le montre l'exemple suivant :

INSTANA_IGNORE_ENDPOINTS_PATH=/absolute/path/to/config.yaml
 

Dans l'exemple précédent, le config.yaml fichier doit comporter un chemin d'accès absolu et respecter la structure de configuration indiquée.

Filtrer par méthode

Pour spécifier les points de terminaison que vous souhaitez exclure, définissez la variable INSTANA_IGNORE_ENDPOINTS d'environnement comme indiqué dans l'exemple suivant :

tracing:
  ignore-endpoints:
    redis:
      - get
      - type
    dynamodb:
      - query
    kafka:
      - send
 

Cette configuration filtre les segments suivants :

  • GET et TYPE les commandes pour l' Redis
  • QUERY commande pour DynamoDB
  • SEND méthode pour l' Kafka, ainsi que pour toutes les portées en aval

Filtrage par méthode et par paramètre d'évaluation

Pour spécifier les points de terminaison que vous souhaitez exclure, définissez la variable INSTANA_IGNORE_ENDPOINTS d'environnement comme indiqué dans l'exemple suivant :

tracing:
  ignore-endpoints:
    kafka:
      - methods: ["consume"]
        endpoints: ["topic1", "topic2"]

      - methods: ["consume", "send"]
        endpoints: ["topic3"]

      - methods: ["*"] # Applied to all methods
        endpoints: ["topic4"]

      - methods: ["consume"]
        endpoints: ["*"] # Applied to all endpoints
 

Cette configuration filtre les segments suivants :

  • CONSUME méthode pour topic1 et topic2 dans l' Kafka e et toutes les travées en aval
  • CONSUME et SEND méthodes pour topic3 l' Kafka et toutes les portées en aval
  • Toutes les méthodes (*) pour topic4 dans l' Kafka e et tous les segments en aval
  • CONSUME méthode pour tous les éléments «* topics » de l' Kafka et tous les segments en aval

Vous pouvez combiner les deux options de filtrage (méthode uniquement et méthode et point de terminaison) dans le même fichier de configuration.

Cette configuration est compatible avec la structure d' configuration.yaml de l'agent.

Utilisation INSTANA_IGNORE_ENDPOINTS

Grâce à cette variable d'environnement, vous pouvez exclure des segments en vous basant uniquement sur les noms de méthode, comme le montre l'exemple suivant :

INSTANA_IGNORE_ENDPOINTS=redis:get,type
 

Cette configuration filtre les segments suivants :

  • GET et TYPE les commandes pour l' Redis

Pour filtrer complètement Redis, vous pouvez utiliser la configuration suivante :

INSTANA_IGNORE_ENDPOINTS=redis
 

Pour filtrer plusieurs services, vous pouvez utiliser la configuration suivante :

INSTANA_IGNORE_ENDPOINTS=redis:get,type;dynamodb:query,scan;kafka:send
 

Cette configuration filtre les segments suivants :

  • GET et TYPE les commandes dans Redis
  • QUERY et SCAN les commandes dans DynamoDB
  • SEND commande dans l' Kafka

Configuration en code

Pour ignorer les points de terminaison en utilisant la méthode de configuration intégrée au code, ajoutez la configuration suivante au src/instana/configurator.py fichier :

config["tracing"]["ignore_endpoints"] = { "redis": ["get", "type"] }
 

Cette configuration exclut les GET commandes TYPE et du paquet Redis du traçage.

Pour ignorer tous les points de terminaison du paquet « Redis », ajoutez la configuration suivante au src/instana/configurator.py fichier :

config["tracing"]["ignore_endpoints"] = { "redis": [] }
 

Pour filtrer plusieurs services, vous pouvez utiliser la configuration suivante :

config["tracing"]["ignore_endpoints"] = {
    "redis": ["get", "type"],
    "dynamodb": ["query", "scan"],
    "kafka": ["send"]
}
 

Cette configuration filtre les segments suivants :

  • GET et TYPE les commandes dans Redis
  • QUERY et SCAN les commandes dans DynamoDB
  • SEND méthode dans ` Kafka ` et tous les segments en aval

L'exemple suivant illustre le filtrage par méthode et par point de terminaison :

config["tracing"]["ignore_endpoints"] = {
    "kafka": [
        { methods: ["consume"], endpoints: ["topic1", "topic2"] },
        { methods: ["send"], endpoints: ["topic3"] }
    ]
}
 

Cette configuration filtre les segments suivants :

  • CONSUME méthode pour topic1 et topic2 dans l' Kafka e et toutes les travées en aval
  • SEND méthode pour topic3 l' Kafka et toutes les portées en aval

Vous pouvez utiliser les deux options de filtrage (méthode uniquement et méthode et point de terminaison) dans la même configuration.

Configuration de l'agent

Pour exclure les points de terminaison à l'aide de la méthode de configuration de l'agent, ajoutez la ignore-endpoints configuration au fichier de configuration.yaml l'agent. Pour plus d'informations, consultez la section « Ignorer les points de terminaison ».

Configuration de la désactivation des segments

Avec Python Tracer 3.7.0 et les versions ultérieures, vous pouvez désactiver les segments à l'aide de la fonctionnalité de désactivation des segments du capteur Instana Python. Grâce à la fonctionnalité de désactivation des balises span, vous pouvez désactiver complètement la génération de balises span dans votre application. Cette fonctionnalité peut s'avérer utile dans les cas suivants :

  • Vous souhaitez réduire le nombre de segments générés par votre application.
  • Certaines de vos opérations ne sont pas concernées par la surveillance.
  • Vous souhaitez vous concentrer sur d'autres aspects des performances de votre application.

Catégories prises en charge

Les catégories sont des ensembles de bibliothèques regroupées selon un type commun de technologie ou de protocole. Pour l'instant, vous ne pouvez désactiver les balises span que pour la logging catégorie.

Options de configuration

Vous pouvez désactiver les balises span en utilisant l'une des options suivantes :

Option 1 : Utilisation de la configuration d' YAML

Définissez la variable INSTANA_CONFIG_PATH d'environnement sur un fichier de configuration local d' YAML, en utilisant la spécification suivante :

tracing:
  disable:
    - <category_or_type>: <boolean>

La disable clé peut contenir une liste de catégories ou de type noms. Un type nom désigne toute référence à un framework, une bibliothèque ou un outil d'instrumentation pris en charge par l'outil de traçage Instana Python. Les configurations type individuelles prévalent sur les paramètres de category leur niveau supérieur, quel que soit l'ordre dans lequel elles sont définies. Cette approche permet un contrôle précis, grâce auquel certaines instrumentations spécifiques peuvent rester activées même lorsque leur catégorie générale est désactivée. L'exemple de configuration suivant désactive toutes les étendues de base de données, à l'exception de celles destinées à Redis :

com.instana.tracing:
  disable:
    - databases: true
    - redis: false

Option 2 : Utilisation des variables d'environnement

Vous pouvez utiliser la variable INSTANA_TRACING_DISABLE d'environnement pour désactiver les balises `span`, comme le montre l'exemple suivant :

# Disable Redis spans
INSTANA_TRACING_DISABLE=redis

# Disable all logging spans
INSTANA_TRACING_DISABLE=logging

# Disable multiple technologies
INSTANA_TRACING_DISABLE=redis,logging

Option 3 : Configuration de l'agent

Pour désactiver les balises « span » d' Redis s à l'aide de la configuration de l'agent, ajoutez la disable configuration suivante au fichier de configuration.yaml l'agent :

com.instana.tracing:
  disable:
    - redis: true

Pour désactiver les logging intervalles de catégorie à l'aide de la configuration de l'agent, ajoutez la disable configuration suivante au fichier de configuration.yaml l'agent :

com.instana.tracing:
  disable:
    - logging: true

Configuration des traces de pile

Par défaut, l'outil Tracer de l' Instana Python enregistre les 30 dernières trames de trace de pile pour chaque intervalle EXIT capturé. Cette valeur peut être augmentée ou diminuée selon vos besoins.

Remarque : les traces de pile ne sont pas collectées pour ENTRY les intervalles, car elles ne contiennent généralement aucune information utile au niveau de l'application.

Avec Python Tracer 3.10.0 et les versions ultérieures, vous pouvez configurer deux aspects de la capture de la trace de pile :

  • Longueur de la trace de pile : nombre de trames de trace de pile à capturer.
    • Valeurs prises en charge : 1 à 40
    • Valeur par défaut : 30
  • Niveau de trace de pile : comment les traces de pile sont enregistrées.
    • Valeurs prises en charge :
      • all: Récupère la trace de pile pour tous les segments de sortie (par défaut).
      • error: Ne recueille la trace de la pile que pour les segments présentant des erreurs.
      • none: Ne recueille pas la trace de la pile.
Remarque : en cas d'erreurs, la trace complète de la pile est enregistrée, quelle que soit sa longueur, afin de garantir que la cause première soit entièrement identifiée.

Vous pouvez configurer la capture de la trace de pile en utilisant l'une des options suivantes :

Pour configurer la capture de traces de pile spécifiques à une technologie via l'agent et les méthodes de configuration d' YAML, consultez la section « Configuration spécifique à une technologie ».

Utilisation des variables d'environnement

Vous pouvez utiliser les variables d'environnement INSTANA_STACK_TRACEINSTANA_STACK_TRACE_LENGTH et pour filtrer les traces de pile, comme le montre l'exemple suivant :

  • Enregistrer les traces de pile uniquement pour les segments présentant des erreurs : utilisez ce paramètre pour enregistrer les traces de pile uniquement lorsqu'une erreur se produit.
    # Captures stack trace only for erroneous spans.
    INSTANA_STACK_TRACE=error
  • Désactiver la collecte des traces de pile : utilisez ce paramètre pour désactiver complètement la collecte des traces de pile.
    # Disable collection of stack trace.
    INSTANA_STACK_TRACE=none
  • Enregistrer les traces de pile pour tous les segments : utilisez ce paramètre pour collecter les traces de pile de tous les segments.
    # Captures stack trace for all spans.
    INSTANA_STACK_TRACE=all
  • Limiter le nombre d'étapes de la trace de pile : utilisez ce paramètre pour limiter le nombre d'étapes de la trace de pile capturées.
    # Limits capture of stack trace frames to 25.
    INSTANA_STACK_TRACE_LENGTH=25
     

Utilisation de la configuration d' YAML

Définissez la variable INSTANA_CONFIG_PATH d'environnement sur un fichier de configuration local d' YAML, en utilisant la spécification suivante :

tracing:
  global:
    stack-trace: <string>
    stack-trace-length: <int>

Utilisation de la configuration de l'agent

Pour configurer la capture de la trace de pile à l'aide de la méthode de configuration de l'agent, définissez les paramètres dans la com.instana.tracing.global section de votre fichier de configuration d'agent, comme le montre l'exemple suivant :

com.instana.tracing:
  global:
    stack-trace-length: 15
    stack-trace: 'error' 

Configuration spécifique à la technologie

Le Tracer de l' Instana Python propose une configuration spécifique à la technologie qui prévaut sur les configurations globales. Vous pouvez affiner la configuration et contrôler la capture de la trace de pile à l'aide des paramètres suivants :

com.instana.tracing:
  global:
    stack-trace: <string>
    stack-trace-length: <int>

  <technology>:
    stack-trace: <string>
    stack-trace-length: <int>

Dans cette configuration, les valeurs suivantes sont prises en charge pour la <technology> clé :

  • kafka
  • rabbitmq
  • aioamqp
  • aiohttp
  • urllib3 (pour les intervalles urllib3requests et )
  • httpx
  • log
  • redis
  • mysql
  • postgres
  • mongo
  • pymongo
  • cassandra
  • couchbase
  • dynamodb
  • sqlalchemy
  • boto3
  • s3
  • rpc

L'exemple suivant capture les traces de pile pour tous les segments et limite le nombre de trames à 25 dans le cadre d'une configuration globale; toutefois, pour l'option « Kafka », il ne capture la trace de pile complète que pour les segments présentant des erreurs :

com.instana.tracing:
  global:
    stack-trace: all
    stack-trace-length: 25

  kafka:
    stack-trace: error

Configuration des en-têtes de corrélation de trace d' Kafka

Grâce à la corrélation des traces, les segments conservent le lien entre les créations de segments répartis. Par exemple, lorsque la corrélation des traces est activée, l'identifiant de trace est le même pour la plage du producteur et celle du consommateur. Lorsque la corrélation des traces est désactivée, les segments du producteur et du consommateur possèdent des identifiants de trace différents, ce qui empêche toute corrélation entre eux.

Pour désactiver complètement la corrélation des traces d' Kafka, vous pouvez utiliser l'une des options de configuration suivantes :

  • Variable d'environnement : définissez la variable d'environnement INSTANA_KAFKA_TRACE_CORRELATION sur false.

  • Propriété du système : utilisez la configuration suivante :

    config["tracing"]["kafka"] = { "trace_correlation": False }
     
  • Configuration de l'agent : configurez les options de corrélation des traces d' Kafka au niveau de l 'agent hôte Instana.

Pour plus d'informations, consultez la section « Migration des en-têtes » sur Kafka.

Suivi de processus spécifiques

Instana surveille automatiquement les processus dont la ligne de commande gunicorncontient les noms python , uwsgi, ou. Vous pouvez indiquer un nom de processus spécifique dans le fichier de configuration de l'agent afin de surveiller une application Python en cours d'exécution dont le nom diffère de celui utilisé en ligne de commande. Pour plus d'informations, consultez la section consacrée à la configuration des agents hôtes à l'aide du fichier de configuration des agents.