使用 Loki + Promtail + Grafana搭建日志系统
环境,服务器ip:192.168.140.2
工程目录如下:
第一步:搭建loki
1)创建目录:
mkdir -p /data/lai/Loki_Grafana_Promtail/loki
1)在loki文件夹内创建一个docker-compose.yaml文件
version: "3.8"services:loki:image: grafana/loki:2.9.0container_name: lokiuser: "0:0"ports:- "3100:3100"volumes:- ./loki_config.yaml:/etc/loki/loki_config.yaml:ro- /data/loki:/data/lokicommand: -config.file=/etc/loki/loki_config.yamlrestart: unless-stopped
2)创建一个loki_config.yaml文件
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /data/loki
storage:
filesystem:
chunks_directory: /data/loki/chunks
rules_directory: /data/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
3)创建loki所需的目录,并且启动
# 创建所需目录并设置正确权限
sudo mkdir -p /data/loki/{chunks,rules,rules-temp}
sudo chown -R 10001:10001 /data/loki
sudo chmod -R 775 /data/loki
# 启动
docker-compose down && docker-compose up -d
第二步:搭建promtail
1)创建一个promtail文件夹,在创建docker-compose.yaml文件
version: "3"services:promtail:user: "0:0"image: grafana/promtail:2.9.0container_name: promtailports:- "9080:9080"volumes:- /data/lai/Loki_Grafana_Promtail/promtail/promtail_config.yaml:/etc/promtail/config.yml:ro- /data/shao_jun/ziyuanku_data/aishare/logs:/var/log/app:ro- /data/lai/Loki_Grafana_Promtail/promtail/:/promtail_data/command: -config.file=/etc/promtail/config.ymlrestart: unless-stopped
2)创建一个promtail_config.yaml配置文件
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /promtail_data/positions.yaml #容器内的positions.yaml文件路径
clients:
- url: http://192.168.140.2:3100/loki/api/v1/push #推送日志流到Loki中的api
scrape_configs:
- job_name: inferservice
static_configs:
- targets:
- localhost
labels:
job: inferservice
__path__: /var/log/app/*.log #容器内的日志文件路径
3)启动
docker-compose up -d
第三步:创建一个grafana文件夹,在grafana文件夹中创建docker-compose.yaml文件
version: "3.8"
services:
grafana:
image: grafana/grafana:9.2.10
container_name: grafana
ports:
- "3000:3000"
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- /data/grafana:/var/lib/grafana
user: "0:0"
2)创建grafana所需要的目录
# 创建grafana数据目录
sudo mkdir -p /data/grafana
# 设置目录权限
sudo chmod -R 775 /data/grafana
# 设置目录所有者
sudo chown -R 10001:10001 /data/grafana
3)启动
# 启动
docker-compose down && docker-compose up -d
附录:
1、对promtail的解读
Promtail 启动说明
Promtail 是 Grafana Loki 的日志收集代理,负责从日志文件中收集日志并发送到 Loki 服务器。
配置文件说明
promtail_config.yaml
- 日志文件路径:
/var/log/app/*.log
(容器内路径)- 目标服务器:Loki 服务器
http://192.168.140.2:3100/loki/api/v1/push
- 端口监控:9080(用于健康检查和指标)
docker-compose.yml
- 镜像版本:grafana/promtail:2.9.0
- 容器名称:promtail
- 端口映射:9080:9080
- 挂载卷:
- 配置文件:
promtail_config.yaml
→/etc/promtail/config.yml
- 日志目录:
/data/shao_jun/ziyuanku_data/aishare/logs
→/var/log/app
- 数据目录:
./
→/promtail_data/
启动步骤
1. 启动 Promtail 服务
cd /data/lai/Loki_Grafana_Promtail/promtail docker-compose up -d
2. 检查服务状态
# 检查容器状态 docker ps | grep promtail# 查看容器日志 docker logs promtail --tail 20# 检查目标状态 curl http://192.168.140.2:9080/targets
3. 验证日志收集
# 检查日志文件是否被正确监控 docker exec promtail ls -la /var/log/app/# 查看 Promtail 监控的目标文件 docker logs promtail | grep "Adding target"
服务管理
停止服务
cd /data/lai/Loki_Grafana_Promtail/promtail docker-compose down
重启服务
cd /data/lai/Loki_Grafana_Promtail/promtail docker-compose restart
查看实时日志
docker logs promtail -f
故障排除
常见问题
目标状态显示 0/1 ready
- 检查日志文件路径是否正确
- 确认日志文件存在且有读取权限
- 查看 Promtail 日志获取详细信息
无法连接到 Loki 服务器
- 确认 Loki 服务正在运行
- 检查网络连接和防火墙设置
日志文件未被监控
- 确认日志文件路径配置正确
- 检查文件通配符模式是否匹配
健康检查
- 健康检查地址:http://192.168.140.2:9080/ready
- 指标地址:http://192.168.140.2:9080/metrics
相关服务
- Loki 服务器:http://192.168.140.2:3100
- Grafana 界面:http://192.168.140.2:3000
注意事项
- 确保日志目录
/data/shao_jun/ziyuanku_data/aishare/logs
存在且有读取权限- Promtail 会自动监控该目录下所有
.log
文件- 配置文件修改后需要重启服务生效
- 使用
docker-compose down && docker-compose up -d
完全重启服务