[Big Data] Solución de recopilación de registros de GLP (caso de entrada al sitio web oficial)


Este artículo presenta el GLP, los experimentos con GLP y el caso oficial de introducción . Es muy interesante y el proceso llevará varias horas. ¡Vengan a experimentarlo juntos!

La solución de recopilación de registros que he estado usando antes es ELK, que a menudo ocupa varios gigabytes de memoria. ¡Algunos servidores con malas configuraciones están un poco abrumados! Recientemente descubrí una solución liviana de recopilación de registros: Loki+Promtail+Grafana (LPG para abreviar). Unos cientos de MB de memoria son suficientes y la interfaz es bastante buena. ¡Se lo recomiendo a todos!

Prefacio: ¡El entorno es una máquina Linux, no una Mac o Windows!

1. Introducción al GLP

¡La solución de recopilación de registros de GLP ocupa muy poca memoria, es económica y eficiente! No indexa los registros como el sistema de registro ELK, sino que establece un conjunto de etiquetas para cada flujo de registros. A continuación se presentan sus componentes principales:

  • Promtail: el recopilador de registros, un poco como Filebeat, puede recopilar registros en archivos de registro y enviar los datos recopilados a Loki.

  • Loki: agrega y almacena datos de registro, que pueden usarse como fuente de datos para que Grafana proporcione datos visualizados para Grafana.

  • Grafana: obtenga información de registro de Loki y muéstrela visualmente.

Explicación de la imagen de arriba:

1. Cada servidor necesita implementar uno Promtail. La responsabilidad es monitorear y recopilar los registros de este servidor y enviarlos al servicio de almacenamiento de Loki. El valor predeterminado es el /var/logdirectorio de monitoreo y recopilación.

2. Loki es responsable del almacenamiento de registros.

3. Grafana es la visualización de datos, encargada de leer los logs en Loki

2. Instalar

Para implementar este conjunto de soluciones de recopilación de registros, debe instalar servicios como Loki, Promtail y Grafana, que son docker-composemuy convenientes de instalar directamente.

Adoptamos la solución Instalar con Docker Compose en el sitio web oficial . La siguiente es una breve introducción a la solución en el sitio web oficial.

1. Primero debe instalar Docker Compose (instálelo usted mismo)

2. Descargue el script docker-compose y ejecútelo

wget https://raw.githubusercontent.com/grafana/loki/v2.8.0/production/docker-compose.yaml -O docker-compose.yaml
docker-compose -f docker-compose.yaml up

Debido a que el sitio web es inaccesible de forma predeterminada en el extranjero, el autor proporcionó el script docker-compose.yaml que descargué para uso directo. Los lectores también pueden utilizar el blog de referencia para intentar resolver el problema de inaccesibilidad de raw.githubusercontent.com . El guión completo y las instrucciones también se proporcionan en el apéndice al final de este artículo.

3. Después de ejecutarlo correctamente, puede usar docker psel comando para ver 3 servicios.

[root@server123 ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                       NAMES
a519d567e6a4   grafana/promtail:2.8.0   "/usr/bin/promtail -…"   About an hour ago   Up About a minute                                               plg-promtail-1
c880ad914857   grafana/grafana:latest   "sh -euc 'mkdir -p /…"   About an hour ago   Up About a minute   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   plg-grafana-1
dcc6c716cd69   grafana/loki:2.8.0       "/usr/bin/loki -conf…"   About an hour ago   Up About a minute   0.0.0.0:3100->3100/tcp, :::3100->3100/tcp   plg-loki-1

3. Pruebe el efecto del esquema de registro.

3.1 Prueba 1: Promtail monitorea /var/loglos cambios de directorio

Propósito del experimento: probar si Promtail puede monitorear los cambios en el directorio /var/log

procedimiento del experimento:

1. Cree un nuevo archivo en el directorio /var/log

# 输出'hello lpg'到/var/log/lpg.log 文件
echo 'hello lpg' > /var/log/lpg.log

2. Supervise el archivo /var/log/lpg.log en la consola

Esto también confirma el papel de Promtail: monitorear el servidor /var/logen busca de cambios en un directorio específico (de forma predeterminada) y enviar el registro a Loki.

3. Continuar verificando

  • Si /var/log/test.sqlescribo algo, ¿se puede monitorear?
  • Si /var/log/fire/spring.logescribo algo, ¿se puede monitorear?

3.2 Prueba 2: ver registros visualmente con Grafana

Propósito del experimento: ver los registros monitoreados por Promtail a través de la plataforma de visualización Grafana

procedimiento del experimento:

  1. Inicie sesión en Grafana, la contraseña de la cuenta es admin:admin. Después de iniciar sesión correctamente, debe agregar Loki como fuente de datos. Dirección de acceso: http://192.168.56.123:3000/

  2. Se agrega una fuente de datos Loki de forma predeterminada después de ejecutar el script docker-compose.yml.

  3. Consulte las fuentes de datos agregadas de forma predeterminada. Luego, también puede configurar su dirección de acceso a Loki, hacer clic en Save&testGuardar y probar y aparecerá un mensaje verde para indicar que la configuración se realizó correctamente.

    http://loki:3100 en la imagen a continuación es la red instalada por el script loki. Puede obtener más información al respecto.docker network

  4. A continuación, Exploreseleccione Loki e ingrese la expresión de consulta (consulta de Loki) {filename="/var/log/lpg.log"}para ver 测试1los registros.

3.3 Prueba 3: es previsible que Grafana también pueda ver los registros del programa Spring Boot implementado

Propósito del experimento: monitoreo distribuido de registros de Spring Boot

procedimiento del experimento:

En el experimento, se creó una nueva aplicación Spring Boot. En el archivo de configuración Spring Boot application.yml, el logger.path=/var/logdirectorio de salida del registro se especificó como /var/log. El nombre de salida predeterminado del archivo de registro Spring Boot es spring.log , es decir, el archivo /var/log/spring.log se utiliza como archivo de registro de salida. Este archivo cumple con las reglas configuradas por Promtail /var/log/*.log, por lo que debe ser monitoreado y finalmente verificar si el registro se puede consultar en la plataforma de visualización Grafana.

Proceder de la siguiente:

1. Contenido de configuración parcial de application.yml de la aplicación Spring Boot

# 配置日志文件的输出目的地
logging:
  path: /var/log

2. Cargue el paquete jar preparado de la aplicación Spring Boot al servidor Promtail

3. Inicie la aplicación y observe si /var/log/spring.log tiene contenido

java -jar fire-tiny-loki-1.0-SNAPSHOT.jar
tail -f /var/log/spring.log

4. Buscar registros en la plataforma de visualización Grafana

Inicie sesión en http://loki:3100, luego Exploreseleccione Loki e ingrese la expresión de consulta (consulta de Loki) {filename="/var/log/spring.log"}para ver 测试1los registros.

**Resumen:** Cada servidor necesita implementar un servicio Promtail. El servicio monitorea un directorio de registro específico. Cuando el directorio cambia, el contenido se envía a Loki para el almacenamiento de registros. Finalmente, los registros de todos los microservicios se pueden ver en el Plataforma de visualización de información Grafana.

3.4 Registro de pisoteo

El autor fue realmente engañado y registró el proceso de engaño para ayudar con las consecuencias.

Como se mencionó en 实验1la introducción, Promtail monitorea el directorio /var/log de forma predeterminada, pero se produjeron algunos problemas extraños: no se pueden encontrar los archivos /var/log/fire/spring.log, /var/log/test.sql y otros del autor. a través de la plataforma de visualización Grafana, por qué, o(╯□╰)o

Proceso de análisis:

1. Algunos archivos se pueden monitorear, como /var/log/lpg.log mencionado anteriormente, pero algunos archivos no se pueden monitorear, se especula que puede ser un problema de configuración.

2. Ingrese al contenedor Promtail para ver el archivo de configuración.Parte /etc/promtail/config.ymldel contenido es el siguiente:

# ...
# 部分内容
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*.log

3. Observe el archivo de configuración __path__: /var/log/*log. De acuerdo con esta configuración, solo se monitorearán los archivos que terminen en .log en el directorio /var/log. Luego, /var/log/fire/spring.log y /var/log/test.sql Lo que configuramos, naturalmente, no será consultado. Ahora que se ha encontrado el problema, consulte el sitio web oficial y __path__úselo glob patterns. Luego modifique la configuración para /var/log/**/*.logprobar. Este estilo de configuración también es similar al estilo ant y también se usa comúnmente en Spring. No debería ser un gran problema. así que empieza a modificarlo.

4. Modifique directamente /etc/promtail/config.ymlel contenido de configuración del contenedor, pero el contenedor Promtail no tiene comandos de edición como vi instalados de forma predeterminada, pero está bien. Usamos los echocomandos más originales de Linux para sobrescribir /etc/promtail/config.ymlel archivo (principalmente por pereza, este es el más simple)

# 1、先进入容器
docker exec -it lpg-promtail-1 /bin/bash
# 2、cat查看内容
cat /etc/promtail/config.yml
# 3、把内容复制到编辑器进行编辑
# 只改动一行,把/var/log/*.log改为/var/log/**/*.log
# 4、把编辑后的内容输出了...处开始覆写
echo '...' > /etc/promtail/config.yml
# 5、最后退出promtail容器

Reiniciar 3 contenedores

docker-compose down
docker-compose up

5. Después de reiniciar, cree varios archivos nuevos y acceda a ellos a través de http://192.168.56.123:3100

⚠️⚠️⚠️Presta especial atención a ⚠️⚠️⚠️. El nombre de archivo en la imagen a continuación se refiere específicamente a la configuración de Promtail __path__: /var/log/**/*.log, por lo que /app/logs/fire/spring.logdefinitivamente no podrás acceder a él usando tales como. Después de todo, el anfitrión tiene una relación directa con la herramienta de visualización Grafana, ¡y solo Promtail tiene una relación con Grafana!

6. Modifique el archivo de configuración de Promtail montando el host y el contenedor (elija uno de los pasos 5 y 6)

Modifique el archivo de configuración en el host y modifique indirectamente el archivo de configuración de Promtail montando el host y el contenedor. Los pasos específicos son los siguientes:

  • Detenga Docker-Compose y elimine los 3 contenedores Docker originales

    # 停止容器
    docker-compose down
    # 删除容器
    docker rm lpg-grafana-1;
    docker rm lpg-loki-1;
    docker rm lpg-promtail-1;
    
  • /app/etc/promtail/config.ymlCree un nuevo archivo de configuración en el host

    Copie el archivo config.yml en el apéndice

    # 创建目录
    mkdir -p /app/etc/promtail
    # 复制附录内容填写到...位置
    echo '...' > /app/etc/promtail/config.yml
    

    __path__Simplemente ajuste el archivo

    # ...
    # 部分内容
    scrape_configs:
    - job_name: system
      static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/**/*.log
    
  • Modifique parte del script docker-compose.yml de la siguiente manera:

    # 创建目录
    mkdir -p /app/logs
    
      # 日志收集器
      promtail:
        image: grafana/promtail
        container_name: lpg-promtail
        volumes:
          # 把主机的/app/logs挂载到容器的/var/log
          - /app/logs/:/var/log/
          - /app/etc/promtail:/etc/promtail/
        # 这里指的是容器内部的/etc/promtail/promtail.yml文件
        command: -config.file=/etc/promtail/promtail.yml
    
  • algunos listos reinician docker-compose

    docker-compose up
    
  • Después de reiniciar, crear varios archivos nuevos y acceder a ellos a través de http://192.168.56.123:3100 no supone ningún problema.

4. Introducción al caso de entrada oficial

Prefacio: prepare el entorno de redacción de Docker para Linux

En la parte anterior de este artículo, la entrada simple de GLP no introdujo algunos otros componentes, pero en la introducción del caso de entrada oficial, el sistema es más grande y se introducen algunos otros componentes. ¡Experimémoslo juntos! Dirección oficial de inicio

Esta guía ayuda a los lectores a crear y utilizar un clúster Loki simple. Este clúster está destinado a pruebas, desarrollo y evaluación; no cumplirá con la mayoría de los requisitos de producción.

Introducción al proceso experimental:

1. El entorno de prueba ejecuta la aplicación flog para generar líneas de registro.

2. Promtail es el agente (o cliente) del entorno de prueba, que captura las líneas de registro y las envía al clúster Loki a través de la puerta de enlace.

En un entorno típico, la aplicación generadora de registros y el agente se ejecutan juntos,

3. Grafana proporciona una forma de consultar los registros almacenados en Loki y visualizar los resultados de la consulta.

Diagrama de arquitectura:

Aquí hay una breve explicación de la imagen de arriba:

  • flog es un generador de registros de prueba desarrollado que puede generar registros en algunos formatos comunes (como Apache, Nginx, RFC3164 o Json).

  • Promtail monitorea los registros generados y los envía a la interfaz de la puerta de enlace (es decir, nginx).

    flog y Promtail están enmarcados con líneas de puntos y se entienden como clientes.

  • La puerta de enlace es en realidad nginx para implementar el reenvío de solicitudes.

    1. Reenviar la solicitud de Promtail para enviar registros

    2. Reenviar la solicitud de Grafana para verificar los registros

  • El componente de escritura de Loki es responsable de escribir los registros enviados por la puerta de enlace.

  • El componente de lectura de Loki es responsable de leer los registros almacenados en MiniO

  • Grafana es una plataforma de visualización de registros de acceso al navegador.

Pasos oficiales del experimento de caso de nivel de entrada:

4.1 Obtener el entorno de prueba

1. Prepare un directorio separado

mkdir evaluate-loki
cd evaluate-loki

Nota: El registro generado por flog después de iniciar el contenedor existe en el directorio oculto de la carpeta actual (evaluate-loki) .data.

2. Descargue loki-config.yaml, promtail-local-config.yamly docker-compose.yaml3 scripts

wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/loki-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/promtail-local-config.yaml -O promtail-local-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/docker-compose.yaml -O docker-compose.yaml

Debido a que el sitio web es inaccesible de forma predeterminada en el extranjero, el autor proporcionó tres scripts que descargué para uso directo. Los lectores también pueden utilizar el blog de referencia para intentar resolver el problema de inaccesibilidad de raw.githubusercontent.com . El guión completo y las instrucciones también se proporcionan en el apéndice al final de este artículo.

4.2 Entorno de implementación

Ingrese al directorio actual de evalua-loki y use el siguiente comando para iniciarlo en segundo plano

docker-compose up

Después del inicio, puede ver la salida del registro a intervalos en la consola. Este es el registro de salida de flog en acción. Promtail envía cada registro json a la interfaz a través de la puerta de enlace /loki/api/v1/push.

Visite http://192.168.56.123:3101/ready para ver si loki read está listo.

Visite http://192.168.56.123:3102/ready para ver si loki write está listo.

Compruebe si todos los contenedores acoplables definidos en el script docker-compose.yaml están iniciados. Si están todos iniciados, no debería haber gran problema. Puede ver que se han iniciado un total de 7 servicios.

4.3 Pruebas con Grafana

Inicie sesión en http://192.168.56.123:3000, se ha configurado una fuente de datos de forma predeterminada, luego haga clic para Exploreseleccionar Loki e ingrese la expresión de consulta (consulta de Loki) como {container="evaluate-loki-flog-1"}, haga clic en Consulta.

Haga clic en Consultar repetidamente para ver los últimos registros generados por flog. Un registro por segundo es completamente consistente con la configuración de flog. El sitio web oficial también proporciona muchas otras expresiones de consulta que puedes probar por tu cuenta.

{container="evaluate-loki-flog-1"} |= "GET"
{container="evaluate-loki-flog-1"} |= "POST"
{container="evaluate-loki-flog-1"} | json | status="401"
{container="evaluate-loki-flog-1"} != "401"

4. Apéndice

4.1 archivo de script docker-compose

Hay tres servicios definidos en el archivo de script, a saber, loki, promtail y grafana. ¡Es necesario comprender el archivo de script!

El contenido del archivo docker-compose original es el siguiente (comentarios agregados):

version: "3"

# 创建docker容器的网络,方便互通
networks:
  loki:

services:
  loki:
    image: grafana/loki:2.8.0
    ports:
      - "3100:3100"
    # loki执行的命令是容器中的/etc/loki/local-config.yaml来启动loki
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.8.0
    # 执行主机与docker容器的文件挂载关系
    volumes:
      - /var/log:/var/log
    # promtail执行的命令是容器中的/etc/promtail/config.yml来启动promtail
    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
    # grafana启动所执行的脚本
    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"
    networks:
      - loki

4.2 Archivo local-config.yaml

Utilice el contenedor acoplable /etc/loki/local-config.yamlpara iniciar loki. El contenido del archivo original extraído del contenedor loki es el siguiente (notas agregadas):

auth_enabled: false

server:
  http_listen_port: 3100

common:
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093

# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
#  reporting_enabled: false

4.3 Archivo config.yml

Utilice el contenedor acoplable /etc/promtail/config.ymlpara iniciar Promtail. El contenido del archivo original extraído del contenedor promtail es el siguiente (comentarios agregados):

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*.log
  • erverLas propiedades configuran el comportamiento de Promtail como servidor HTTP.
  • positionsLa propiedad configura la ubicación donde Promtail guarda el archivo, indicando hasta qué punto ha leído el archivo. Esto es necesario cuando se reinicia Promtail, para permitirle continuar leyendo los registros desde donde lo dejó.
  • scrape_configsLas propiedades configuran cómo Promtail rastrea los registros de una variedad de objetivos utilizando el método de descubrimiento especificado.
    • static_configsObtener la configuración de destino estática del registro, la configuración estática permite especificar una lista de objetivos y un conjunto de etiquetas
    • labelDefine un archivo de registro para capturar y un conjunto opcional de etiquetas adicionales para aplicar al flujo de registro del archivo definido por __path__.

Referencia de configuración detallada:

  • Descripción del archivo de configuración de Promtail: https://cloud.tencent.com/developer/article/1824988

  • Documentación oficial de Promtail: https://grafana.com/docs/loki/latest/clients/promtail/configuration/

4.4 Guión oficial del caso de introducción

4.4.1. docker-compose.yaml

Este script es el script de compilación de docker-compose, una breve introducción:

1. Defina varios servicios en el diagrama de arquitectura (como: flog, nginx, promtail, loki read, loki write, minio, grafana)

2. El inicio de cada servicio se inicia básicamente mediante commandun shscript.

  • flog, loki read, loki write, promtail se realizan a través del método de comando
  • nginx, minio y grafana usan scripts sh

3. Existen dependencias entre servicios.

  • Por ejemplo, loki read y loki write dependen de minio, y minio es el último en proporcionar servicios de almacenamiento.

4. El archivo de configuración descargado se utiliza al montar el volumesservicio.loki-config.yamlpromtail-local-config.yaml

---
version: "3"

networks:
  loki:

services:
  read:
    image: grafana/loki:2.8.3
    command: "-config.file=/etc/loki/config.yaml -target=read"
    ports:
      - 3101:3100
      - 7946
      - 9095
    volumes:
      - ./loki-config.yaml:/etc/loki/config.yaml
    depends_on:
      - minio
    healthcheck:
      test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
    networks: &loki-dns
      loki:
        aliases:
          - loki

  write:
    image: grafana/loki:2.8.3
    command: "-config.file=/etc/loki/config.yaml -target=write"
    ports:
      - 3102:3100
      - 7946
      - 9095
    volumes:
      - ./loki-config.yaml:/etc/loki/config.yaml
    healthcheck:
      test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
    depends_on:
      - minio
    networks:
      <<: *loki-dns

  promtail:
    image: grafana/promtail:2.8.3
    volumes:
      - ./promtail-local-config.yaml:/etc/promtail/config.yaml:ro
      - /var/run/docker.sock:/var/run/docker.sock
    command: -config.file=/etc/promtail/config.yaml
    depends_on:
      - gateway
    networks:
      - loki

  minio:
    image: minio/minio
    entrypoint:
      - sh
      - -euc
      - |
        mkdir -p /data/loki-data && \
        mkdir -p /data/loki-ruler && \
        minio server /data
    environment:
      - MINIO_ROOT_USER=loki
      - MINIO_ROOT_PASSWORD=supersecret
      - MINIO_PROMETHEUS_AUTH_TYPE=public
      - MINIO_UPDATE=off
    ports:
      - 9000
    volumes:
      - ./.data/minio:/data
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]
      interval: 15s
      timeout: 20s
      retries: 5
    networks:
      - loki

  grafana:
    image: grafana/grafana:latest
    environment:
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
    depends_on:
      - gateway
    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
            url: http://gateway:3100
            jsonData:
              httpHeaderName1: "X-Scope-OrgID"
            secureJsonData:
              httpHeaderValue1: "tenant1"
        EOF
        /run.sh
    ports:
      - "3000:3000"
    healthcheck:
      test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - loki

  gateway:
    image: nginx:latest
    depends_on:
      - read
      - write
    entrypoint:
      - sh
      - -euc
      - |
        cat <<EOF > /etc/nginx/nginx.conf
        user  nginx;
        worker_processes  5;  ## Default: 1

        events {
    
    
          worker_connections   1000;
        }

        http {
    
    
          resolver 127.0.0.11;

          server {
    
    
            listen             3100;

            location = / {
    
    
              return 200 'OK';
              auth_basic off;
            }

            location = /api/prom/push {
    
    
              proxy_pass       http://write:3100\$$request_uri;
            }

            location = /api/prom/tail {
    
    
              proxy_pass       http://read:3100\$$request_uri;
              proxy_set_header Upgrade \$$http_upgrade;
              proxy_set_header Connection "upgrade";
            }

            location ~ /api/prom/.* {
    
    
              proxy_pass       http://read:3100\$$request_uri;
            }

            location = /loki/api/v1/push {
    
    
              proxy_pass       http://write:3100\$$request_uri;
            }

            location = /loki/api/v1/tail {
    
    
              proxy_pass       http://read:3100\$$request_uri;
              proxy_set_header Upgrade \$$http_upgrade;
              proxy_set_header Connection "upgrade";
            }

            location ~ /loki/api/.* {
    
    
              proxy_pass       http://read:3100\$$request_uri;
            }
          }
        }
        EOF
        /docker-entrypoint.sh nginx -g "daemon off;"
    ports:
      - "3100:3100"
    healthcheck:
      test: ["CMD", "service", "nginx", "status"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - loki

  flog:
    image: mingrammer/flog
    command: -f json -n 1000 -l
    networks:
      - loki

4.4.2. loki-config.yaml

---
server:
  http_listen_port: 3100
memberlist:
  join_members:
    - loki:7946
schema_config:
  configs:
    - from: 2021-08-01
      store: boltdb-shipper
      object_store: s3
      schema: v11
      index:
        prefix: index_
        period: 24h
common:
  path_prefix: /loki
  replication_factor: 1
  storage:
    s3:
      endpoint: minio:9000
      insecure: true
      bucketnames: loki-data
      access_key_id: loki
      secret_access_key: supersecret
      s3forcepathstyle: true
  ring:
    kvstore:
      store: memberlist
ruler:
  storage:
    s3:
      bucketnames: loki-ruler

4.4.3. Promtail-local-config.yaml

---
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://gateway:3100/loki/api/v1/push
    tenant_id: tenant1

scrape_configs:
  - job_name: flog_scrape 
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 5s
    relabel_configs:
      - source_labels: ['__meta_docker_container_name']
        regex: '/(.*)'
        target_label: 'container'

Supongo que te gusta

Origin blog.csdn.net/yuchangyuan5237/article/details/132112371
Recomendado
Clasificación