Le besoin#

Promtail, c’est quoi ?#

Dans le domaine de la gestion des logs, Promtail est devenu un outil incontournable. Conçu par Grafana, Promtail est un agent de collecte de journaux (logs) open-source. Sa principale fonction est de simplifier et d’améliorer considérablement le processus de collecte, de filtrage et d’acheminement des journaux depuis diverses sources vers des systèmes de gestion centralisée des journaux. Cette centralisation facilite grandement la surveillance et le débogage des applications et des infrastructures informatiques.

Pourquoi Promtail ?#

Pour mieux comprendre l’importance de Promtail, explorons une utilisation courante : la collecte des logs des serveurs web Apache utilisés comme reverse proxies. Les serveurs web jouent un rôle essentiel dans de nombreuses infrastructures, permettant de gérer le trafic entrant et sortant. Cependant, la gestion des logs de ces serveurs peut être un défi. C’est là qu’intervient Promtail.

J’ai personnellement opté pour Promtail pour accomplir cette tâche cruciale. En utilisant Promtail en tandem avec un serveur Loki, je peux centraliser efficacement les logs de mes serveurs Apache. Cela signifie que chaque demande, chaque erreur et chaque événement sont capturés et stockés de manière organisée, ce qui simplifie le processus de recherche et de débogage ultérieur.

Pourquoi GeoIP ?#

Un aspect souvent négligé dans la gestion des logs est la localisation géographique des adresses IP. C’est là qu’intervient GeoIP. GeoIP est une base de données qui associe des données de localisation géographiques à chaque adresse IP. Cela signifie que vous pouvez enrichir vos logs avec des informations de localisation telles que le pays, la région, la ville, voire les coordonnées géographiques précises.

Maintenant, pourquoi cela est-il si important ? Imaginez que vous gérez un site web ou une application à grande échelle. Vous voulez savoir d’où proviennent vos utilisateurs, quels pays génèrent le plus de trafic, ou si vous observez des activités suspectes en provenance de certaines régions.

GeoIP peut vous aider à mieux visualiser l’origine des requêtes réalisées sur vos serveurs web, ce qui peut être essentiel pour la sécurité, la prise de décision et l’optimisation de vos services.

Configuration de la Base de Données GeoIP MaxMind#

Installation en quelques étapes#

Passons maintenant à la mise en place pratique de GeoIP. Pour commencer, suivez les instructions d’installation depuis le dépôt officiel de GeoIP : GitHub MaxMind GeoIP Update. Bien entendu, il existe plusieurs options d’installation en fonction de votre système d’exploitation.

Dans mon cas, j’ai choisi de récupérer le paquet deb de la dernière release et de procéder à l’installation. Cela peut varier en fonction de votre propre serveur.

Qu’est-ce que la base de données GeoIP de MaxMind ?

Conrêtement, il s’agit d’un ensemble de fichiers au format mmdb qui se trouvent dans le dossier /usr/share/GeoIP. Ces fichiers contiennent les informations de localisation essentielles.

Configuration#

Après avoir installé GeoIP, il est temps de le configurer pour votre propre utilisation. Suivez ces étapes :

  1. Créez votre compte MaxMind pour obtenir une clé de licence. Cette clé est nécessaire pour télécharger les fichiers de base de données. MaxMind - Mise à jour des bases de données

  2. Complétez le fichier /etc/GeoIP.conf en suivant ces étapes :

    • Renseignez l’identifiant de compte AccountID.
    • Renseignez votre clé de licence LicenseKey.
  3. Vous pouvez choisir les types de bases de données que vous souhaitez utiliser parmi les options suivantes :

    • GeoLite 2 ASN (valeur GeoLite2-ASN) : Informations sur les numéros autonomes.
    • GeoLite 2 City (valeur GeoLite2-City) : Informations sur la localisation géographique au niveau de la ville.
    • GeoLite2 Country (valeur GeoLite2-Country) : Informations sur les pays.
  4. Une fois la configuration terminée, effectuez la première mise à jour en exécutant la commande suivante :

sudo /usr/bin/geoipupdate

Vérifiez que cette commande est exécutée de manière récurrente. Assurez-vous que le fichier CRON existe à cet emplacement /etc/cron.d/geoipupdate. Voici un exemple du contenue :

47 6    * * 3   root    test -x /usr/bin/geoipupdate && grep -q '^AccountID .*[^0]\+' /etc/GeoIP.conf && test ! -d /run/systemd/system && /usr/bin/geoipupdate

Vérifiez Votre Configuration#

Assurez-vous que GeoIP fonctionne correctement en vérifiant que les données de localisation sont associées à vos adresses IP. Cela vous donnera la certitude que GeoIP est prêt à être intégré dans votre solution de gestion des logs.

Exemple de commande :

apt install mmdb-bin
mmdblookup --file /var/share/GeoIP/GeoLite2-City.mmdb --ip <MY_PUBLIC_IP>

Utilisation de la base dans Promtail#

Maintenant que GeoIP est correctement configuré, voyons comment l’intégrer à Promtail. Voici un exemple de configuration pour Promtail qui va lire tous les fichiers de logs produits par Apache au format JSON. Il ajoutera automatiquement des champs de localisation en fonction de l’adresse IP du client disponible dans le log, grâce à la base de données GeoIP.

Si vous souhaitez en savoir plus sur le formatage des logs Apache en JSON, je vous invite à consulter mon tutoriel : Tutoriel sur le formatage des logs Apache en JSON.

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /var/lib/promtail/positions.yaml # This location needs to be writeable by Promtail.

clients:
  - url: <LOKI SERVER ENDPOINT>

scrape_configs:

- job_name: log_apache2_access
  pipeline_stages:
  - json:
      expressions:
        time: time
        remote_ip: remote_ip
        domain: domain
        request_path: request_path
        method: method
        status: status
  - geoip:
      db: /usr/share/GeoIP/GeoLite2-City.mmdb
      source: remote_ip
      db_type: city
  - labelallow:
      - geoip_city_name
      - geoip_country_name
      - geoip_location_latitude
      - geoip_location_longitude
  - labels:
      remote_ip:
      domain:
      request_path:
      status:
      geoip_city_name:
      geoip_country_name:
      geoip_location_latitude:
      geoip_location_longitude:
      job:
  static_configs:
  - labels:
      __path__: /var/log/apache2/*access.log
      job: log_apache2_access

*Cette configuration est donnée à titre d’exemple.

Conclusion#

En résumé, l’utilisation conjointe de Promtail et de GeoIP représente une stratégie puissante pour la gestion des logs. Promtail simplifie la collecte, la filtration et la centralisation des logs, tandis que GeoIP enrichit ces logs en ajoutant des données de localisation géographique. Cette combinaison offre des avantages significatifs en termes de surveillance, de sécurité et de prise de décision.

Sources#