Directorio de artículos
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/log
directorio 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-compose
muy 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 ps
el 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/log
los 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/log
en busca de cambios en un directorio específico (de forma predeterminada) y enviar el registro a Loki.
3. Continuar verificando
- Si
/var/log/test.sql
escribo algo, ¿se puede monitorear? - Si
/var/log/fire/spring.log
escribo 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:
-
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/ -
Se agrega una fuente de datos Loki de forma predeterminada después de ejecutar el script docker-compose.yml.
-
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&test
Guardar 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
-
A continuación,
Explore
seleccione Loki e ingrese la expresión de consulta (consulta de Loki){filename="/var/log/lpg.log"}
para ver测试1
los 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/log
directorio 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 Explore
seleccione Loki e ingrese la expresión de consulta (consulta de Loki) {filename="/var/log/spring.log"}
para ver 测试1
los 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 实验1
la 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.yml
del 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/**/*.log
probar. 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.yml
el 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 echo
comandos más originales de Linux para sobrescribir /etc/promtail/config.yml
el 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.log
definitivamente 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.yml
Cree un nuevo archivo de configuración en el hostCopie 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.yaml
y docker-compose.yaml
3 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 Explore
seleccionar 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.yaml
para 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.yml
para 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
erver
Las propiedades configuran el comportamiento de Promtail como servidor HTTP.positions
La 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_configs
Las propiedades configuran cómo Promtail rastrea los registros de una variedad de objetivos utilizando el método de descubrimiento especificado.static_configs
Obtener la configuración de destino estática del registro, la configuración estática permite especificar una lista de objetivos y un conjunto de etiquetaslabel
Define 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 command
un sh
script.
- 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 volumes
servicio.loki-config.yaml
promtail-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'