[Ubuntu] De Graylog à Grafana Loki : créez un système de gestion et de surveillance des périphériques réseau plus puissant

Lors du déploiement de Graylog dans l'environnement de production, nous avons rencontré quelques problèmes, dont le plus important était l'impossibilité d'installer MongoDB et l'impossibilité de redémarrer la machine à tout moment pour modifier les paramètres du BIOS afin de résoudre le problème [ ] WARNING: MongoDB 5.0+ requires a CPU with AVX support, and your current system does not appear to have that! . À la recherche d'une solution plus réalisable, nous avons décidé de porter notre attention sur un autre système de gestion de journaux puissant : Grafana Loki. Dans le même temps, nous avons également utilisé nfcolector pour collecter les informations Netflow des périphériques réseau et les enregistrer dans InfluxDB. Enfin, nous avons utilisé Grafana pour afficher de manière centralisée tous ces journaux et données collectés, offrant ainsi une interface plus belle et plus intuitive pour la gestion quotidienne des périphériques réseau. Cette combinaison d'architecture et d'outils nous permet d'obtenir de meilleurs résultats en matière de gestion et de surveillance des périphériques réseau.

Architecture

Insérer la description de l'image ici

Grafana Loki

Grafana Loki est un système d'agrégation de journaux open source. Il vous permet de collecter, stocker, parcourir et interroger des données de journaux distribuées à grande échelle. Comparé aux systèmes traditionnels de gestion des bûches, le concept de conception de Grafana Loki est plus léger et efficace.

Avec Grafana Loki, vous implémentez la gestion des journaux via deux composants principaux : Loki et Promtail.

  1. Loki : Loki est le cœur du système Grafana Loki, qui est un système de stockage de journaux distribué. Loki diffère du stockage de journaux traditionnel dans la mesure où il utilise des pipelines pour traiter et indexer les données afin que les données de journaux requises soient rapidement accessibles lorsqu'elles sont interrogées. Loki utilise un modèle de stockage basé sur des balises et prend en charge la mise à l'échelle horizontale, vous permettant de gérer de grandes quantités de données de journal.

  2. Promtail : Promtail est un agent de collecte de journaux chargé de collecter les données de journaux provenant de diverses sources (telles que les fichiers, les journaux système, les journaux de conteneurs, etc.) et de les envoyer à Loki pour stockage. Promtail peut être intégré à diverses sources de journaux et prend en charge les formats de journaux standard, tels que JSON, GELF, etc.

Aller au collecteur Netflow(goNfCollector)

goNfCollector vous aide à collecter des données Netflow à partir de périphériques réseau. Il stocke toutes les informations nécessaires dans InfluxDB pour une analyse et une visualisation plus approfondies à l'aide de Grafana.

Grafana

Grafana est une plateforme de visualisation de données open source populaire. Il offre de puissantes capacités de visualisation de données et un riche écosystème de plug-ins, permettant aux utilisateurs de créer des tableaux de bord, des rapports et des alertes, et d'effectuer une analyse approfondie des données. Grafana peut être utilisé conjointement avec Grafana Loki, InfluxDB, etc. Grâce aux sources de données, vous pouvez facilement créer des requêtes de journaux et des tableaux de bord dans Grafana, ainsi qu'afficher et analyser les données de journaux et les données de surveillance de manière unifiée.

déployer

Déclaration environnementale

  • Ubuntu 22.04
  • Docker version 24.0.5
  • Docker Compose version v2.20.2

1. Déploiement de rsyslog

Par défaut, Rsyslog est installé sur les serveurs Ubuntu. S'il n'est pas installé, vous pouvez l'installer en exécutant la commande suivante :

apt install rsyslog -y

Modifier le fichier de configuration/etc/rsyslog.conf

vim /etc/rsyslog.conf 

Voici les résultats finaux et les explications approximatives :

# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf


#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")


$template RemoteLogs,"/var/log/network/%FROMHOST-IP%.log" *
*.*  ?RemoteLogs
& ~


###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Filter duplicated messages
$RepeatedMsgReduction on

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

  1. module(load="imudp"): imudpmodule de chargement, qui fournit la fonction de réception Syslog du protocole UDP. UDP est un protocole sans connexion utilisé pour recevoir les messages Syslog envoyés par des hôtes distants.

  2. input(type="imudp" port="514"): Configurez l'entrée Syslog UDP. Il spécifie que rsyslogd écoute sur le port local 514 pour recevoir les messages Syslog UDP.

  3. module(load="imtcp"): imtcpmodule de chargement, qui fournit la fonction de réception Syslog du protocole TCP. Contrairement à UDP, TCP est un protocole orienté connexion qui fournit une messagerie fiable.

  4. input(type="imtcp" port="514"): Configurez l'entrée du syslog TCP. Il spécifie que rsyslogd écoute sur le port local 514 pour recevoir les messages syslog TCP.

  5. module(load="imklog" permitnonkernelfacility="on"): Charge imklogun module qui fournit la prise en charge de la journalisation du noyau et permet de recevoir des messages klog non-noyau. klog est un périphérique spécial pour les journaux du noyau.

  6. $template RemoteLogs,"/var/log/network/%FROMHOST-IP%.log" *: définit un modèle de journal nommé RemoteLogs. Il spécifie l'emplacement de sortie et le format du journal. Cela signifie ici de sauvegarder le journal de l'hôte distant dans le /var/log/network/répertoire avec l'adresse IP comme nom de fichier.

  7. *.* ?RemoteLogs: Il s'agit d'une règle de journal qui spécifie que tous les types de messages de journal sont envoyés à l'emplacement de sortie défini dans le modèle RemoteLogs.

  8. & ~: Il s'agit d'une autre règle de journal qui spécifie d'ignorer tous les messages de journal correspondants. Le but ici est d'éviter que les messages soient traités de manière répétée.
    Le but de ces lignes de configuration est de configurer rsyslogd pour recevoir des messages syslog de différentes sources et les enregistrer dans les fichiers journaux appropriés.
    Après avoir enregistré la configuration, redémarrez le service rsyslog et vérifiez l'état

systemctl restart rsyslog
systemctl status rsyslog
netstat -nltup | grep 514

2. Déploiement de goNfCollector

Exigences environnementales : les outils docker, docker-compose et wget doivent être installés. Il est requis pendant le processus d'installation 魔法, sinon il risque d'échouer.Télécharger
la dernière version : Téléchargez la dernière version du fichier de script en local via la commande suivante :

wget -O latest.sh https://raw.githubusercontent.com/javadmohebbi/goNfCollector/main/dockerize/build-up-from-github.sh

Rendre le fichier de script exécutable : accordez les autorisations d'exécution au fichier de script téléchargé via la commande suivante :

chmod +x latest.sh

Exécutez le script téléchargé : Exécutez le fichier de script téléchargé avec la commande suivante :

./latest.sh

Lors de l'exécution, il peut vous être demandé de saisir votre mot de passe utilisateur.

Après exécution, le script vous indiquera comment exécuter le conteneur. Mais nous n’en avons pas besoin pour exécuter le conteneur.

3. Déploiement de Grafana Loki

Parce qu'il est déployé à l'aide d'un environnement docker, il est relativement pratique. Il vous suffit de modifier le fichier de composition docker, de fusionner influxdb et nfcolector à l'étape précédente et de modifier les paramètres réseau.

version: "3"

networks:
  loki:
    external: true

services:
  loki:
    image: grafana/loki:2.8.0
    ports:
      - "3100:3100"
    volumes:
      - loki-config:/etc/loki
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.8.0
    volumes:
      - promtail-config:/etc/promtail
      - /var/log:/var/log
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    environment:
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,agenty-flowcharting-panel
    entrypoint:
      - sh
      - -euc
      - |
        mkdir -p /etc/grafana/provisioning/datasources
        cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
        apiVersion: 1
        datasources:
        - name: Loki
          type: loki
          access: proxy
          orgId: 1
          url: http://loki:3100
          basicAuth: false
          isDefault: true
          version: 1
          editable: false
        EOF
        /run.sh
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana-storage:/var/lib/grafana
    networks:
      - loki

  # Influx DB
  influxdb:
        image: influxdb:2.0.7
        restart: always
        volumes:
            - /docker/nfcollector/vendors/influxdb:/var/lib/influxdb2
        ports:
            - "8086:8086"
              # - "8082:8082"
              #- "8089:8089"
        networks:
            - loki

  nfcolector:
        image: javadmohebbi/gonfcollector
        restart: always
        # network_mode: host
        ports:
            - "6859:6859/udp"
        volumes:
            - /docker/nfcollector/bin:/opt/nfcollector/bin
            - /docker/nfcollector/etc:/opt/nfcollector/etc
            - /docker/nfcollector/var:/opt/nfcollector/var
            - /docker/nfcollector/vendors:/opt/nfcollector/vendors
        networks:
            - loki
        environment:
           - NFC_DEBUG=true
           # total number of cpu nfcollector could use
           - NFC_CPU_NUM=0
           - NFC_LISTEN_ADDRESS=0.0.0.0
           - NFC_LISTEN_PORT=6859
           - NFC_INFLUXDB_HOST=influxdb
           - NFC_INFLUXDB_PORT=8086
           - NFC_INFLUXDB_TOKEN=5vqt0q0b4g_lZwNgp7-8GgPq5Nxf3YY37xbVZP_ypeK_G3dwdNlTrAkcKN_Q6QzbmG-Th96lT_65Kp0j2UD1HA==
           - NFC_INFLUXDB_BUCKET=nfCollector
           - NFC_INFLUXDB_ORG=OPENINTELLIGENCE
           - NFC_IP_REPTATION_IPSUM=/opt/nfcollector/vendors/ipsum/ipsum.txt
           - NFC_IP2L_ASN=/opt/nfcollector/vendors/ip2location/db/IP2LOCATION-LITE-ASN.IPV6.CSV/IP2LOCATION-LITE-ASN.IPV6.CSV
           - NFC_IP2L_IP=/opt/nfcollector/vendors/ip2location/db/IP2LOCATION-LITE-DB11.IPV6.BIN/IP2LOCATION-LITE-DB11.IPV6.BIN
           - NFC_IP2L_PROXY=/opt/nfcollector/vendors/ip2location/db/IP2PROXY-LITE-PX10.IPV6.CSV/IP2PROXY-LITE-PX10.IPV6.CSV
           - NFC_IP2L_LOCAL=/opt/nfcollector/vendors/ip2location/local-db/local.csv
           - NFC_SOCK_PATH=/opt/nfcollector/var/socket/fw.socket

volumes:
  loki-config:
  promtail-config:
  grafana-storage:

Après l'édition, utilisez la ligne de commande pour vérifier les paramètres yaml et démarrer Docker

docker compose config #命令用于验证和查看`docker-compose.yaml`文件的配置。
docker compose up -d #命令用于在后台启动并运行基于`docker-compose.yaml`文件定义的容器组。其中,`-d`标志表示以后台(守护)模式运行容器。

Visitez Grafana

Accédez à la plateforme Grafana en accédant à http://hostip:3000. Le mot de passe initial est admin/admin.
Insérer la description de l'image ici

Suivi

  1. Videz les journaux des périphériques réseau et Netflow vers le service correspondant.
  2. Filtrer et afficher les données sur Grafana.

Référence

[1] https://github.com/javadmohebbi/goNfCollector
[2] https://grafana.com/docs/loki/latest/installation/docker/
[3] https://github.com/grafana/loki
[ 4] https://github.com/grafana/grafana

Je suppose que tu aimes

Origine blog.csdn.net/u012153104/article/details/132366033
conseillé
Classement