[Ubuntu] De Graylog a Grafana Loki: cree un sistema de monitoreo y administración de dispositivos de red más potente

Al implementar Graylog en el entorno de producción, encontramos algunos problemas, el más importante de los cuales fue la imposibilidad de instalar MongoDB y la imposibilidad de reiniciar la máquina en cualquier momento para modificar la configuración del BIOS para solucionar el problema [ ] WARNING: MongoDB 5.0+ requires a CPU with AVX support, and your current system does not appear to have that! . En busca de una solución más viable, decidimos centrar nuestra atención en otro potente sistema de gestión de registros: Grafana Loki. Al mismo tiempo, también utilizamos nfcolector para recopilar información de Netflow de los dispositivos de red y guardarla en InfluxDB. Finalmente, utilizamos Grafana para mostrar de forma centralizada todos estos registros y datos recopilados, proporcionando una interfaz más hermosa e intuitiva para la gestión diaria de los dispositivos de red. Esta combinación de arquitectura y herramientas nos permite lograr mejores resultados en la gestión y monitoreo de dispositivos de red.

Arquitectura

Insertar descripción de la imagen aquí

Grafana Loki

Grafana Loki es un sistema de agregación de registros de código abierto. Le permite recopilar, almacenar, explorar y consultar datos de registros distribuidos a gran escala. En comparación con los sistemas tradicionales de gestión de registros, el concepto de diseño de Grafana Loki es más ligero y eficiente.

Con Grafana Loki, implementas la gestión de registros a través de dos componentes principales: Loki y Promtail.

  1. Loki: Loki es el núcleo del sistema Grafana Loki, que es un sistema de almacenamiento de registros distribuido. Loki se diferencia del almacenamiento de registros tradicional en que utiliza canalizaciones para procesar e indexar datos de modo que se pueda acceder rápidamente a los datos de registro necesarios cuando se realicen consultas. Loki utiliza un modelo de almacenamiento basado en etiquetas y admite escalamiento horizontal, lo que le permite manejar grandes cantidades de datos de registro.

  2. Promtail: Promtail es un agente de recopilación de registros que se encarga de recopilar datos de registro de diversas fuentes (como archivos, registros del sistema, registros de contenedores, etc.) y enviarlos a Loki para su almacenamiento. Promtail se puede integrar con una variedad de fuentes de registro y admite formatos de registro estándar, como JSON, GELF, etc.

Ir a Netflow Collector(goNfCollector)

goNfCollector le ayuda a recopilar datos de Netflow desde dispositivos de red. Almacena toda la información necesaria en InfluxDB para su posterior análisis y visualización utilizando Grafana.

Grafana

Grafana es una popular plataforma de visualización de datos de código abierto. Proporciona potentes capacidades de visualización de datos y un rico ecosistema de complementos, que permite a los usuarios crear paneles, informes y alertas, y realizar análisis en profundidad de los datos. Grafana se puede utilizar junto con Grafana Loki, InfluxDB, etc. A través de fuentes de datos, puede crear fácilmente consultas de registro y paneles en Grafana, y mostrar y analizar datos de registro y datos de monitoreo de manera unificada.

desplegar

Declaración Ambiental

  • ubuntu 22.04
  • Versión acoplable 24.0.5
  • Docker Compose versión v2.20.2

1. Implementación de rsyslog

De forma predeterminada, Rsyslog está instalado en los servidores Ubuntu. Si no está instalado, puede instalarlo ejecutando el siguiente comando:

apt install rsyslog -y

Modificar archivo de configuración/etc/rsyslog.conf

vim /etc/rsyslog.conf 

Aquí están los resultados finales y las explicaciones aproximadas:

# /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"): imudpMódulo de carga, que proporciona la función de recepción de syslog del protocolo UDP. UDP es un protocolo sin conexión que se utiliza para recibir mensajes syslog enviados por hosts remotos.

  2. input(type="imudp" port="514"): Configure la entrada de syslog UDP. Especifica que rsyslogd escucha en el puerto local 514 para recibir mensajes de syslog UDP.

  3. module(load="imtcp"): imtcpMódulo de carga, que proporciona la función de recepción syslog del protocolo TCP. A diferencia de UDP, TCP es un protocolo orientado a la conexión que proporciona mensajería confiable.

  4. input(type="imtcp" port="514"): Configure la entrada de TCP syslog. Especifica que rsyslogd escuche en el puerto local 514 para recibir mensajes de syslog TCP.

  5. module(load="imklog" permitnonkernelfacility="on"): Carga imklogun módulo que proporciona soporte de registro del kernel y permite recibir mensajes klog que no son del kernel. klog es un dispositivo especial para registros del kernel.

  6. $template RemoteLogs,"/var/log/network/%FROMHOST-IP%.log" *: Define una plantilla de registro denominada RemoteLogs. Especifica la ubicación de salida y el formato del registro. Lo que significa aquí es guardar el registro del host remoto en el /var/log/network/directorio con la dirección IP como nombre de archivo.

  7. *.* ?RemoteLogs: Esta es una regla de registro que especifica que todos los tipos de mensajes de registro se envían a la ubicación de salida definida en la plantilla RemoteLogs.

  8. & ~: Esta es otra regla de registro que especifica descartar todos los mensajes de registro coincidentes. El objetivo aquí es evitar que los mensajes se procesen repetidamente.
    El propósito de estas líneas de configuración es configurar rsyslogd para recibir mensajes syslog de diferentes fuentes y guardarlos en los archivos de registro apropiados.
    Después de guardar la configuración, reinicie el servicio rsyslog y verifique el estado

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

2. Implementación de goNfCollector

Requisitos ambientales: es necesario instalar las herramientas Docker, Docker-Compose y Wget. Es necesario durante el proceso de instalación 魔法, de lo contrario puede fallar.
Descargue la última versión: descargue la última versión del archivo de script al local mediante el siguiente comando:

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

Haga que el archivo de script sea ejecutable: otorgue permisos de ejecución al archivo de script descargado mediante el siguiente comando:

chmod +x latest.sh

Ejecute el script descargado: Ejecute el archivo de script descargado con el siguiente comando:

./latest.sh

Durante la ejecución, es posible que se le solicite que ingrese su contraseña de usuario.

Después de la ejecución, el script le indicará cómo ejecutar el contenedor. Pero no necesitamos esto para ejecutar el contenedor.

3. Implementación de Grafana Loki

Debido a que se implementa utilizando un entorno Docker, es relativamente conveniente: solo necesita editar el archivo de redacción de Docker, fusionar influxdb y nfcolector en el paso anterior y modificar la configuración de red.

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:

Después de editar, use la línea de comando para verificar la configuración de yaml e iniciar Docker

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

Visita Grafana

Acceda a la plataforma Grafana accediendo a http://hostip:3000.La contraseña inicial es admin/admin.
Insertar descripción de la imagen aquí

Hacer un seguimiento

  1. Vuelque los registros del dispositivo de red y el flujo de red al servicio correspondiente.
  2. Filtrar y mostrar datos en Grafana.

Referencia

[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

Supongo que te gusta

Origin blog.csdn.net/u012153104/article/details/132366033
Recomendado
Clasificación