Mise en corrélation simple des logs et des traces APM pour une observabilité améliorée grâce à la Suite Elastic | Elastic Blog
Technique

Mise en corrélation simple des logs et des traces APM pour une observabilité améliorée

Le monitoring des performances applicatives (APM) et le logging fournissent des informations cruciales sur votre écosystème. Pour en tirer pleinement parti, ajoutez-y du contexte. Vous obtiendrez alors des indices qui vous permettront de résoudre les problèmes rencontrés avec vos applications.

Cependant, les choses se corsent à mesure que les données de logs que vous analysez se complexifient. Il devient alors difficile d'accéder à des informations réellement pertinentes à l'aide d'outils traditionnels. La solution ? Elastic Observability (optimisée par la Suite Elastic). Finies, les prises de tête ! En quelques clics dans Kibana, vous pouvez mettre les logs en corrélation avec APM. Rien de plus simple ! Ainsi, vous pouvez facilement consulter les logs associés à la requête d'un utilisateur pour une transaction dans votre application Web.

Affichage des logs de trace dans Elastic APM

Voici une capture d'écran d'Elastic APM, qui présente une belle répartition des différentes opérations impliquées dans une transaction spécifique. Cliquez sur Actions :

Cliquez sur "Actions" en haut à droite de votre exemple de trace dans Elastic APM

Puis sélectionnez Show trace logs (Afficher les logs de trace) :

Cliquez sur "Show trace logs" (Afficher les logs de trace).

Le tour est joué :

Vous pouvez désormais consulter les logs associés à la trace dans Elastic APM.

Ces messages donnent des détails supplémentaires sur la transaction. Pour en obtenir, APM ou toute autre forme de monitoring ne suffisent pas. Seul un log peut véritablement fournir ce type de détails. Grâce à la Suite Elastic, qui intègre les différentes facettes du monitoring, nous avons désormais la possibilité d'ajouter des détails supplémentaires sur nos transactions. En ayant toutes ces informations dans un seul datastore, nous pouvons donc rapidement orienter nos recherches.

Installation et configuration de l'agent Python d'Elastic APM

Tout cela est bien beau, mais concrètement, comment atteindre des résultats similaires dans votre système ? C'est ce que nous allons voir.

Prenons un exemple et expliquons comment intégrer logs et traces APM. Nous avons ci-dessous le code pertinent de l'application Python de la capture précédente. Ce qu'il nous faut, c'est un moyen d'ajouter des informations à chaque requête qu'un utilisateur envoie à notre application.

Commençons par la base : installer l'agent Python d'Elastic APM. Ajoutons-le en tant que dépendance. Il s'agit d'une application Flask. C'est pour cette raison qu'il y a le suffixe [flask] entre crochets après le nom de la dépendance. Pour en savoir plus sur les frameworks pris en charge, consultez les documentations sur l'agent Python.

# dans requirements.txt 
elastic-apm[flask]==5.3.3

Tout d'abord, vérifions que nous disposons des bonnes importations :

# dans app.py 
import logging 
from elasticapm.contrib.flask import ElasticAPM 
from elasticapm.handlers.logging import Formatter

Ensuite, configurons l'agent Python pour qu'il envoie des informations au serveur APM :

# dans app.py 
app = Flask(__name__)  # initialisez l'application comme d'habitude 
app.config['ELASTIC_APM'] = { 
  'SERVICE_NAME': 'foodbankhero', 

  # Définissez l'URL personnalisée du serveur APM (par défaut : http://localhost:8200) 
  'SERVER_URL': 'http://localhost:8200' 

  # À utiliser si le serveur APM demande un token 
  # Il est possible de configurer le serveur APM de sorte qu'il demande un token pour des raisons de sécurité, afin qu'il ne soit pas submergé de données aléatoires venant d'un tiers. 
  # 'SECRET_TOKEN' : '' 
} 
apm = ElasticAPM(app)  # la ligne magique qui instrumente notre application Flask avec APM

Configuration de vos logs

Maintenant, configurons les logs pour pouvoir les mettre en corrélation avec les traces APM, comme indiqué dans les captures ci-dessus :

# dans app.py 
fh = logging.FileHandler('foodbankhero.log') 

# nous avons préalablement importé un outil de mise en forme (Formatter) de l'agent Python 
formatter = Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") 
fh.setFormatter(formatter) 
logging.getLogger().addHandler(fh) 

#... quelque part dans les profondeurs de l'application... 
logging.getLogger().info(‘Foodbank {} needs {} items’.format(id, len(items))) 
logging.getLogger().info(‘Returning {} foodbank records’.format(len(results)))

Voici à quoi devraient ressembler vos logs maintenant :

2020-05-12 01:57:14,029 - flask.app - INFO - 172.22.0.1 - - [12/May/2020 01:57:15] "GET / HTTP/1.1" 200 - | elasticapm transaction.id=f31f884b961a6089 trace.id=02bd57be0eff9979c94951d0d53e80c0 span.id=None

Grâce à cette configuration, chaque ligne de log de chaque requête sera renforcée avec des informations de traçage, même les requêtes concernant des ressources statiques (si votre application est configurée pour les prendre en charge). Par exemple :

2020-05-12 01:57:14,029 - werkzeug - INFO - 172.22.0.1 - - [12/May/2020 01:57:14] "GET /favicon.ico HTTP/1.1" 404 - | elasticapm transaction.id=f31f884b961a6089  
trace.id=02bd57be0eff9979c94951d0d53e80c0 span.id=None

Testez Elastic APM et jugez-en par vous-même

Prêt à décloisonner vos données et à résoudre les problèmes plus rapidement grâce au contexte ? Avec Elastic Observability, mettez les données en corrélation et accédez à ce dont vous avez besoin en une fraction de seconde.

Pour prendre en main Elastic APM, c'est simple, vraiment simple. Ajoutez quelques lignes de code à votre projet et commencez à envoyer des données à Elasticsearch. Envie de mettre vos logs et vos traces APM en corrélation ? Profitez d'un essai gratuit sur Elastic Cloud pour vous exercer.