1. Loki简介与版本说明
Loki是Grafana Labs开源的日志聚合系统,设计灵感来自Prometheus。Loki采用标签索引方式存储日志,具有轻量级、高性能、低成本的特点,与Grafana完美集成。更多学习教程www.fgedu.net.cn
Loki最新版本:
Loki 3.4.2(2026年3月发布)- 最新稳定版
Loki 3.3.4(2026年2月发布)- 稳定版
Loki 3.2.3(2026年1月发布)- 稳定版
Loki 2.9.10(2025年12月发布)- LTS长期支持版
Loki核心组件:
Loki:日志存储和查询服务
Promtail:日志采集Agent,类似Prometheus的node_exporter
LogCLI:命令行查询工具
Loki-canary:监控Loki健康状态的工具
2. Loki下载地址
Loki支持多种操作系统和部署方式,可以从官方发布页面获取。学习交流加群风哥微信: itpux-com
官方下载地址:
Loki官方文档:https://grafana.com/docs/loki/latest/
Loki GitHub发布页面:https://github.com/grafana/loki/releases
Loki源码仓库:https://github.com/grafana/loki
$ curl -s “https://api.github.com/repos/grafana/loki/releases/latest” | grep -E ‘”tag_name”|”name”|”browser_download_url”‘ | head -20
输出示例如下:
“tag_name”: “v3.4.2”,
“name”: “v3.4.2”,
“browser_download_url”: “https://github.com/grafana/loki/releases/download/v3.4.2/loki-linux-amd64.zip”,
“browser_download_url”: “https://github.com/grafana/loki/releases/download/v3.4.2/loki-linux-arm64.zip”,
“browser_download_url”: “https://github.com/grafana/loki/releases/download/v3.4.2/promtail-linux-amd64.zip”,
“browser_download_url”: “https://github.com/grafana/loki/releases/download/v3.4.2/promtail-linux-arm64.zip”,
“browser_download_url”: “https://github.com/grafana/loki/releases/download/v3.4.2/logcli-linux-amd64.zip”
各平台下载链接:
Linux AMD64:https://github.com/grafana/loki/releases/download/v3.4.2/loki-linux-amd64.zip
Linux ARM64:https://github.com/grafana/loki/releases/download/v3.4.2/loki-linux-arm64.zip
Promtail Linux AMD64:https://github.com/grafana/loki/releases/download/v3.4.2/promtail-linux-amd64.zip
LogCLI Linux:https://github.com/grafana/loki/releases/download/v3.4.2/logcli-linux-amd64.zip
Docker镜像:docker pull grafana/loki:3.4.2
3. 二进制方式安装Loki
二进制安装方式适合快速部署和测试环境。风哥提示:生产环境建议使用Docker或Kubernetes部署,便于管理和扩展。
步骤1:下载并安装Loki
# mkdir -p /fgedudb/loki/{bin,config,data}
# 下载Loki二进制文件
# cd /fgedudb/loki/bin
# curl -LO https://github.com/grafana/loki/releases/download/v3.4.2/loki-linux-amd64.zip
输出示例如下:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 85.2M 100 85.2M 0 0 15.8M 0 0:00:05 0:00:05 –:–:– 18.2M
# 解压文件
# unzip loki-linux-amd64.zip
输出示例如下:
Archive: loki-linux-amd64.zip
inflating: loki-linux-amd64
# 添加执行权限
# chmod +x loki-linux-amd64
# mv loki-linux-amd64 loki
# 验证安装
# ./loki –version
输出示例如下:
loki, version 3.4.2 (branch: HEAD, revision: abc123def)
build user: root@build
build date: 2026-03-15T10:00:00Z
go version: go1.21.8
platform: linux/amd64
步骤2:创建Loki配置文件
# cat > /fgedudb/loki/config/loki-config.yaml << 'EOF' auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9096 log_level: info common: instance_addr: 192.168.1.51 path_prefix: /fgedudb/loki/data storage: filesystem: chunks_directory: /fgedudb/loki/data/chunks rules_directory: /fgedudb/loki/data/rules replication_factor: 1 ring: kvstore: store: inmemory query_range: results_cache: cache: embedded_cache: enabled: true max_size_mb: 100 schema_config: configs: - from: 2020-10-24 store: tsdb object_store: filesystem schema: v13 index: prefix: index_ period: 24h ruler: alertmanager_url: http://192.168.1.51:9093 limits_config: reject_old_samples: true reject_old_samples_max_age: 168h retention_period: 744h ingestion_rate_mb: 20 ingestion_burst_size_mb: 30 per_stream_rate_limit: 10MB per_stream_rate_limit_burst: 20MB compactor: working_directory: /fgedudb/loki/data/compactor compaction_interval: 10m retention_enabled: true retention_delete_delay: 2h retention_delete_worker_count: 150 delete_request_store: filesystem EOF
步骤3:创建Systemd服务
# useradd -r -s /sbin/nologin loki
# 设置目录权限
# chown -R loki:loki /fgedudb/loki
# 创建Systemd服务文件
# cat > /etc/systemd/system/loki.service << 'EOF'
[Unit]
Description=Loki Log Aggregation System
Documentation=https://grafana.com/docs/loki/latest/
After=network.target
[Service]
User=loki
Group=loki
ExecStart=/fgedudb/loki/bin/loki -config.file=/fgedudb/loki/config/loki-config.yaml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
# 启动Loki服务
# systemctl daemon-reload
# systemctl start loki
# systemctl enable loki
输出示例如下:
Created symlink /etc/systemd/system/multi-user.target.wants/loki.service → /etc/systemd/system/loki.service.
# 查看服务状态
# systemctl status loki
输出示例如下:
● loki.service - Loki Log Aggregation System
Loaded: loaded (/etc/systemd/system/loki.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2026-04-04 10:00:00 CST; 10s ago
Docs: https://grafana.com/docs/loki/latest/
Main PID: 12345 (loki)
Tasks: 15 (limit: 49143)
Memory: 256.0M
CGroup: /system.slice/loki.service
└─12345 /fgedudb/loki/bin/loki -config.file=/fgedudb/loki/config/loki-config.yaml
# 验证Loki运行状态
# curl http://localhost:3100/ready
输出示例如下:
ready
# curl http://localhost:3100/metrics | head -20
输出示例如下:
# HELP loki_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which loki was built.
# TYPE loki_build_info gauge
loki_build_info{branch="HEAD",goversion="go1.21.8",revision="abc123def",version="3.4.2"} 1
4. Docker方式部署Loki
使用Docker部署Loki是生产环境常用的方式,便于管理和升级。学习交流加群风哥QQ113257174
步骤1:拉取Loki镜像
# docker pull grafana/loki:latest
输出示例如下:
latest: Pulling from grafana/loki
Digest: sha256:abc123def456…
Status: Downloaded newer image for grafana/loki:latest
docker.io/grafana/loki:latest
# 拉取指定版本镜像
# docker pull grafana/loki:3.4.2
输出示例如下:
3.4.2: Pulling from grafana/loki
7a9868e23051: Pull complete
…
Digest: sha256:abc123def456…
Status: Downloaded newer image for grafana/loki:3.4.2
docker.io/grafana/loki:3.4.2
步骤2:创建Loki容器
# mkdir -p /fgedudb/loki/{config,data}
# 创建配置文件
# cat > /fgedudb/loki/config/loki-config.yaml << 'EOF'
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
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: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 168h
EOF
# 启动Loki容器
# docker run -d --name loki \
--restart always \
-p 3100:3100 \
-p 9096:9096 \
-v /fgedudb/loki/config:/etc/loki \
-v /fgedudb/loki/data:/loki \
grafana/loki:3.4.2 -config.file=/etc/loki/loki-config.yaml
输出示例如下:
f8e7d8a9c0b1a2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7
# 查看容器状态
# docker ps | grep loki
输出示例如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8e7d8a9c0b1 grafana/loki:3.4.2 "/usr/bin/loki -conf…" 10 seconds ago Up 9 seconds 0.0.0.0:3100->3100/tcp, 0.0.0.0:9096->9096/tcp loki
步骤3:使用Docker Compose部署
# cat > /fgedudb/loki/docker-compose.yml << 'EOF' version: '3.8' services: loki: image: grafana/loki:3.4.2 container_name: loki restart: always ports: - "3100:3100" - "9096:9096" volumes: - ./config:/etc/loki - ./data:/loki command: -config.file=/etc/loki/loki-config.yaml environment: - TZ=Asia/Shanghai logging: driver: "json-file" options: max-size: "100m" max-file: "3" promtail: image: grafana/promtail:3.4.2 container_name: promtail restart: always volumes: - ./promtail-config.yaml:/etc/promtail/config.yml - /var/log:/var/log:ro command: -config.file=/etc/promtail/config.yml depends_on: - loki EOF # 启动服务 # cd /fgedudb/loki # docker-compose up -d 输出示例如下: Creating network "loki_default" with the default driver Creating loki ... done Creating promtail ... done
5. Kubernetes部署Loki
使用Helm在Kubernetes中部署Loki是云原生环境的标准方式。更多学习教程公众号风哥教程itpux_com
步骤1:添加Loki Helm仓库
# helm repo add grafana https://grafana.github.io/helm-charts
输出示例如下:
“grafana” has been added to your repositories
# 更新仓库
# helm repo update
输出示例如下:
Hang tight while we grab the latest from your chart repositories…
…Successfully got an update from the “grafana” chart repository
Update Complete. ⎈Happy Helming!⎈
# 搜索Loki Chart
# helm search repo grafana/loki
输出示例如下:
NAME CHART VERSION APP VERSION DESCRIPTION
grafana/loki 6.8.0 3.4.2 Helm chart for Grafana Loki in simple, scalable mode
grafana/loki-simple-scalable 1.8.0 2.6.1 Helm chart for Grafana Loki in simple, scalable mode
步骤2:安装Loki Stack
# kubectl create namespace loki
输出示例如下:
namespace/loki created
# 创建自定义配置文件
# cat > loki-values.yaml << 'EOF'
loki:
auth_enabled: false
commonConfig:
replication_factor: 1
storage:
type: filesystem
schemaConfig:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
singleBinary:
replicas: 1
gateway:
service:
type: ClusterIP
monitoring:
selfMonitoring:
enabled: false
grafanaAgent:
installOperator: false
test:
enabled: false
EOF
# 安装Loki
# helm install loki grafana/loki -n loki -f loki-values.yaml
输出示例如下:
NAME: loki
LAST DEPLOYED: Sat Apr 4 10:00:00 2026
NAMESPACE: loki
STATUS: deployed
REVISION: 1
NOTES:
***********************************************************************
Welcome to Grafana Loki.
Chart version: 6.8.0
Loki version: 3.4.2
***********************************************************************
# 查看部署状态
# kubectl get pods -n loki
输出示例如下:
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 2m
loki-gateway-6b8c9d5f4d-abc12 1/1 Running 0 2m
# 查看服务
# kubectl get svc -n loki
输出示例如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loki ClusterIP 10.96.100.1
loki-gateway ClusterIP 10.96.100.2
步骤3:安装Promtail
# cat > promtail-values.yaml << 'EOF' config: clients: - url: http://loki-gateway.loki.svc.cluster.local/loki/api/v1/push daemonset: enabled: true serviceMonitor: enabled: true tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule EOF # 安装Promtail # helm install promtail grafana/promtail -n loki -f promtail-values.yaml 输出示例如下: NAME: promtail LAST DEPLOYED: Sat Apr 4 10:00:00 2026 NAMESPACE: loki STATUS: deployed REVISION: 1 # 查看部署状态 # kubectl get pods -n loki | grep promtail 输出示例如下: promtail-abc12 1/1 Running 0 1m promtail-def34 1/1 Running 0 1m promtail-ghi56 1/1 Running 0 1m
6. Loki生产环境配置
生产环境需要对Loki进行优化配置,确保稳定性和性能。from:www.itpux.com
步骤1:配置对象存储
# cat > /fgedudb/loki/config/loki-config-s3.yaml << 'EOF' auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9096 common: path_prefix: /loki storage: s3: endpoint: s3.fgedu.net.cn region: cn-north-1 bucketnames: loki-storage access_key_id: YOUR_ACCESS_KEY secret_access_key: YOUR_SECRET_KEY s3forcepathstyle: true replication_factor: 3 ring: kvstore: store: memberlist schema_config: configs: - from: 2020-10-24 store: tsdb object_store: s3 schema: v13 index: prefix: index_ period: 24h compactor: working_directory: /loki/compactor shared_store: s3 retention_enabled: true retention_delete_delay: 2h EOF
步骤2:配置日志保留策略
# vi /fgedudb/loki/config/loki-config.yaml
limits_config:
# 日志保留时间(31天)
retention_period: 744h
# 拒绝旧样本
reject_old_samples: true
reject_old_samples_max_age: 168h
# 摄入速率限制
ingestion_rate_mb: 20
ingestion_burst_size_mb: 30
# 单流速率限制
per_stream_rate_limit: 10MB
per_stream_rate_limit_burst: 20MB
# 最大查询长度
max_query_length: 721h
# 最大查询并行度
max_query_parallelism: 32
compactor:
working_directory: /fgedudb/loki/data/compactor
compaction_interval: 10m
retention_enabled: true
retention_delete_delay: 2h
retention_delete_worker_count: 150
delete_request_store: filesystem
# 重启Loki服务
# systemctl restart loki
步骤3:配置Grafana数据源
$ curl -X POST “http://admin:Admin@2026@192.168.1.51:3000/api/datasources” \
-H “Content-Type: application/json” \
-d ‘{
“name”: “Loki”,
“type”: “loki”,
“url”: “http://192.168.1.51:3100”,
“access”: “proxy”,
“isDefault”: false
}’
输出示例如下:
{
“id”: 4,
“uid”: “LKXXXXXXXX”,
“orgId”: 1,
“name”: “Loki”,
“type”: “loki”,
“typeLogoUrl”: “public/app/plugins/datasource/loki/img/loki_icon.svg”,
“access”: “proxy”,
“url”: “http://192.168.1.51:3100”,
“isDefault”: false
}
# 使用LogCLI查询日志
# logcli query ‘{job=”varlogs”}’ –limit=10 –since=1h –addr=http://192.168.1.51:3100
输出示例如下:
2026-04-04T10:00:00+08:00 {} This is a log message from fgedu server
2026-04-04T10:00:01+08:00 {} Another log entry for testing
2026-04-04T10:00:02+08:00 {} Application started successfully
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
