https://youtu.be/LHgBvTdAJME?si=aVI5knuEIYY6e-BG
En este post vamos a instalar Grafana MIMIR, una solución de almacenamiento de series temporales que permite gestionar y escalar métricas de manera eficiente. Nosotros lo vamos a instalar usando Docker Compose, aunque su potencia y escalabilidad van mucho más allá. Sin embargo, para el sistema de métricas que queremos montar y el volumen que manejaremos, no nos hará falta una escalabilidad horizontal.
MEMCACHED_VERSION=1.6.29-alpine
MINIO_VERSION=RELEASE.2024-08-29T01-40-52Z
MINIO_ROOT_USER=lgtmp
MINIO_ROOT_PASSWORD=76UECVjHkolnClreG6lAKHx3R6vzl
MINIO_PROMETHEUS_AUTH_TYPE=public
MINIO_UPDATE=off
MIMIR_VERSION=2.13.0
MIMIR_S3_ENDPOINT=minio:9000
MIMIR_S3_ACCESS_KEY_ID=lgtmp
MIMIR_S3_SECRET_ACCESS_KEY=76UECVjHkolnClreG6lAKHx3R6vzl
MIMIR_S3_INSECURE=true
LOKI_VERSION=3.0.1
LOKI_S3_ENDPOINT=minio:9000
LOKI_S3_ACCESS_KEY_ID=lgtmp
LOKI_S3_SECRET_ACCESS_KEY=76UECVjHkolnClreG6lAKHx3R6vzl
LOKI_S3_INSECURE=true
services:
minio:
image: minio/minio:${MINIO_VERSION:-latest}
# <https://github.com/qclaogui/codelab-monitoring/blob/main/docker-compose/common/config/agent-flow/modules/docker/README.md>
entrypoint:
- sh
- -euc
- |
mkdir -p /data/mimir-blocks /data/mimir-ruler /data/mimir-alertmanager && \\
mkdir -p /data/loki-data /data/loki-ruler && \\
mkdir -p /data/tempo-data && \\
mkdir -p /data/pyroscope-data && \\
minio server /data --console-address ':9001'
env_file:
- .env
volumes:
- ${PWD}/minio:/data
healthcheck:
test: ["CMD-SHELL", "mc ready local"]
interval: 5s
timeout: 5s
retries: 5
networks:
- observability
services:
memcached:
labels:
- metrics.agent.grafana.com/scrape=false
image: memcached:${MEMCACHED_VERSION:-latest}
networks:
observability:
include:
- ./compose-minio.yml
- ./compose-memcached.yml
services:
mimir:
image: grafana/mimir-alpine:${MIMIR_VERSION:-latest}
volumes:
- ${PWD}/config/mimir:/etc/mimir
depends_on:
minio:
condition: service_healthy
env_file:
- .env
command:
- -config.file=/etc/mimir/monolithic-mode-metrics.yaml
- -target=all
- -config.expand-env=true
- -validation.max-length-label-value=4096000
# <https://grafana.com/docs/mimir/latest/configure/about-versioning/>
- -alertmanager.grafana-alertmanager-compatibility-enabled
- -alertmanager.utf8-strict-mode-enabled
healthcheck:
test: [ "CMD", "/usr/bin/wget", "--no-verbose", "--tries=1", "--spider", "<http://localhost:80/ready>" ]
interval: 10s
timeout: 5s
retries: 5
networks:
proxy-network:
observability:
aliases:
- mimir-memberlist
name: observability
include:
- ./compose-mimir.yml
networks:
proxy-network:
name: services
external: true
observability:
name: observability
# This file can be used to set overrides or other runtime config.
ingester_limits: # limits that each ingester replica enforces
max_ingestion_rate: 20000
max_series: 1500000
max_tenants: 1000
max_inflight_push_requests: 30000
distributor_limits: # limits that each distributor replica enforces
max_ingestion_rate: 20000
max_inflight_push_requests: 30000
max_inflight_push_requests_bytes: 50000000
overrides:
anonymous: # limits for anonymous that the whole cluster enforces
# ingestion_tenant_shard_size: 9
max_global_series_per_user: 1500000
max_fetched_series_per_query: 100000
native_histograms_ingestion_enabled: true
ruler_max_rules_per_rule_group: 50