# deploy-loki **Repository Path**: attacker/deploy-loki ## Basic Information - **Project Name**: deploy-loki - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-08 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Loki + Promtail 日志系统部署文档 ### @author Loganli ## 项目介绍 本项目提供了使用 Docker Compose 和 Kubernetes 快速部署 Grafana Loki 和 Promtail 的配置文件。Loki 是一个水平可扩展、高可用性、多租户的日志聚合系统,而 Promtail 是一个专为 Loki 设计的日志收集客户端。 ## 组件版本 - Loki: `grafana/loki:2.8.11` - Promtail: `docker.io/grafana/promtail:3.0.0` ## 目录结构 ``` deploy-loki/ ├── docker/ # Docker 部署目录 │ ├── loki/ # Loki服务目录 │ │ ├── docker-compose.yml # Loki的Docker Compose配置 │ │ ├── conf/ # Loki配置文件目录 │ │ │ └── config.yaml # Loki配置文件 │ │ ├── data/ # Loki数据存储目录(自动创建) │ │ └── start.sh # Loki启动脚本 │ ├── promtail/ # Promtail服务目录 │ │ ├── docker-compose.yml # Promtail的Docker Compose配置 │ │ ├── conf/ # Promtail配置文件目录 │ │ │ └── config.yaml # Promtail配置文件 │ │ └── start.sh # Promtail启动脚本 │ └── README.md # Docker部署说明 ├── kubernetes/ # Kubernetes 部署目录(EC2 Node 模式) │ ├── loki/ # Loki Kubernetes 部署配置 │ ├── promtail/ # Promtail DaemonSet 配置 │ ├── grafana/ # Grafana 部署配置 │ ├── iam/ # IAM 策略配置 │ ├── deploy.sh # 一键部署脚本 │ └── README.md # Kubernetes部署说明 ├── kubernetes-serverless/ # Kubernetes Serverless 部署目录(Fargate 模式) │ ├── loki/ # Loki Kubernetes 部署配置 │ ├── fluent-bit/ # Fluent Bit Sidecar 配置 │ ├── grafana/ # Grafana 部署配置 │ ├── iam/ # IAM 策略配置 │ ├── deploy.sh # 一键部署脚本 │ └── README.md # Kubernetes Serverless部署说明 └── README.md # 部署文档 ``` ## 部署步骤 ### 1. 环境准备 确保已安装 Docker 和 Docker Compose: ```bash docker --version docker-compose --version ``` 如未安装 Docker Compose,可执行: ```bash curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/sbin/docker-compose chmod +x /usr/local/sbin/docker-compose docker-compose version ``` 对于 Kubernetes 部署,还需要: ```bash kubectl version helm version ``` ### 2. Docker 部署方式 分别部署 Loki 和 Promtail 服务: ```bash # 先启动 Loki 服务 cd docker/loki chmod +x start.sh ./start.sh # 或者直接使用 # docker-compose up -d # 再启动 Promtail 服务 cd ../promtail chmod +x start.sh ./start.sh # 或者直接使用 # docker-compose up -d ``` 注意:必须先启动 Loki 服务,再启动 Promtail 服务,因为 Promtail 需要连接到 Loki。 ### 3. Kubernetes 部署方式 根据你的集群类型选择对应的部署方式: #### 选项 1:EC2 Node 模式(使用 Promtail DaemonSet) 适用于有 EC2 节点的 Kubernetes 集群: ```bash cd kubernetes ./deploy.sh ``` 详细说明:[kubernetes/README.md](kubernetes/README.md) #### 选项 2:Fargate Serverless 模式(使用 Fluent Bit Sidecar) 适用于 AWS EKS Fargate 环境: ```bash cd kubernetes-serverless ./deploy.sh ``` 详细说明:[kubernetes-serverless/README.md](kubernetes-serverless/README.md) ### 4. 配置 AWS 凭证(如果使用 S3 存储) 在启动 Loki 服务前,在 `docker/loki` 目录下创建 `.env` 文件并设置 AWS 凭证: ```bash cd docker/loki echo "AWS_ACCESS_KEY_ID=your-access-key-id" > .env echo "AWS_SECRET_ACCESS_KEY=your-secret-access-key" >> .env ``` 或者直接在 `docker/loki/docker-compose.yml` 中修改环境变量。 对于 Kubernetes 部署,请参考 [kubernetes/iam/](kubernetes/iam/) 目录中的 IAM 策略配置。 ### 5. 验证服务状态 ```bash # 检查 Loki 容器状态 cd docker/loki docker-compose ps # 查看 Loki 日志 docker-compose logs loki # 检查 Promtail 容器状态 cd ../promtail docker-compose ps # 查看 Promtail 日志 docker-compose logs promtail ``` 对于 Kubernetes 部署: ```bash # 检查 Loki 状态 kubectl get pods -n monitor -l app.kubernetes.io/name=loki # 查看 Loki 日志 kubectl logs -n monitor -l app.kubernetes.io/name=loki ``` ### 6. 访问 Loki API Loki API 默认在 3100 端口提供服务: ```bash # 测试 Loki 是否正常运行 curl http://localhost:3100/ready ``` ## 与 Grafana 集成 要在 Grafana 中查看收集的日志,请按照以下步骤操作: 1. 在 Grafana 中添加 Loki 数据源: - 访问 Grafana 界面 (通常是 http://your-grafana-host:3000) - 导航到 Configuration > Data Sources > Add data source - 选择 Loki - 设置 URL 为 `http://loki:3100` (如果 Grafana 与 Loki 在同一网络) 或 `http://your-host-ip:3100` (如果 Grafana 在外部) 2. 创建日志查询: - 创建新的 Dashboard - 添加新的 Panel - 选择 Loki 数据源 - 使用 LogQL 查询语言查询日志,例如: `{job="varlogs"}` ## 常见问题排查 ### Loki 无法启动 检查配置文件和存储权限: ```bash cd docker/loki docker-compose logs loki ``` ### Promtail 无法连接到 Loki 确保网络配置正确,并且 Loki 服务已经启动: ```bash cd docker/promtail docker-compose logs promtail ``` ### 日志未被收集 检查 Promtail 配置中的路径是否正确,以及是否有足够的权限访问这些路径。 ## 维护操作 ### 更新服务 ```bash # 更新 Loki 服务 cd docker/loki docker-compose pull docker-compose up -d # 更新 Promtail 服务 cd ../promtail docker-compose pull docker-compose up -d ``` 对于 Kubernetes 部署: ```bash # 更新 Loki 服务 helm upgrade loki grafana/loki -n monitor # 更新 Promtail 服务 helm upgrade promtail grafana/promtail -n monitor ``` ### 备份数据 Loki 数据存储在 `docker/loki/data` 目录中,可以按需备份此目录。 对于 Kubernetes 部署,数据存储在 S3 中,可以通过 AWS 控制台或 CLI 进行备份。 ### 清理数据 ```bash # 停止 Loki 服务 cd docker/loki docker-compose down # 清理数据目录 rm -rf data # 重新启动服务 docker-compose up -d ``` ## 安全注意事项 - 生产环境中应启用认证 (`auth_enabled: true`) - 避免将 AWS 凭证直接硬编码在配置文件中 - 限制 Loki API 的访问范围,避免暴露到公网 ## Docker 容器日志配置 要让其他 Docker 容器将日志发送到 Loki,可以在容器的 docker-compose.yml 中添加以下配置: ```yaml logging: driver: loki options: loki-url: "http://localhost:3100/loki/api/v1/push" max-size: "50m" max-file: "4" loki-external-labels: "client=demo,job=servername-docker" ``` 配置完成后,重启容器即可。 ## Kubernetes 部署说明 Kubernetes 部署配置位于 `kubernetes/` 目录中,支持以下两种模式: 1. **EC2 Node 模式**:使用 Promtail DaemonSet 收集节点上的容器日志 2. **Fargate Sidecar 模式**:使用 Fluent Bit Sidecar 容器收集日志 详细部署说明请参考 [kubernetes/README.md](kubernetes/README.md) ## 参考资料 - [Grafana Loki 官方文档](https://grafana.com/docs/loki/latest/) - [Promtail 官方文档](https://grafana.com/docs/loki/latest/clients/promtail/) - [LogQL 查询语言](https://grafana.com/docs/loki/latest/logql/)