1、Loki是什么?
Loki是一个开源的日志聚合系统,由Grafana Labs开发和维护。它旨在帮助用户收集、存储和查询大规模的日志数据,帮助用户更好地理解和监控他们的应用程序和系统。
Loki的设计灵感来自于Prometheus,它采用了类似的标签和度量方式来组织和查询日志数据。与传统的日志聚合系统相比,Loki具有以下特点:
- 分布式架构:Loki使用分布式架构,可以水平扩展以处理大量的日志数据。
- 索引-free:Loki不使用传统的索引结构来存储日志数据,而是使用标签和度量方式来组织数据,从而减少了存储和查询的复杂性。
- 高效存储:Loki使用压缩和切片技术来存储日志数据,以减少存储空间的占用。
- 实时查询:Loki支持实时查询,可以快速检索和过滤日志数据。
- 简化部署:Loki可以与Prometheus和Grafana无缝集成,使得部署和管理变得更加简单。
2、Loki架构及概念
Loki 由以下3个部分组成:
loki是主服务器,负责存储日志和处理查询。
promtail是代理,负责收集日志并将其发送给 loki 。
Grafana用于 UI 展示。
3、安装部署
方式一: 官网安装指导
方式二:基于官网配置文件改动
核心配置文件:loki-config.yaml/promtail-config.yaml/docker-compose.yaml
# 目录结构
|-config/
|-loki-config.yaml
|-promtail-local-config.yaml
|-docker-compose.yaml
|-loki/
|-index/
|-chunks/
|-grafana/
3.1 promtail安装配置
1)安装
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.4/promtail-linux-arm64.zip"
# extract the binary
$ unzip "promtail-linux-arm64.zip"
# make sure it is executable
$ chmod a+x "promtail-linux-arm64"
# 启动 promtail
cd /data/promtail
nohup ./promtail-linux-amd64 --config.file=promtail-local-config.yaml &
2)配置文件:promtail-local-config.yaml
# Promtail 配置文件
server:
http_listen_port: 9080 # 监听端口
positions:
filename: /tmp/positions.yaml # 位置文件路径
clients:
- url: http://loki:3100/loki/api/v1/push # Loki 服务器的地址
scrape_configs:
- job_name: app-log # 作业名称
static_configs:
- targets:
- localhost # 目标地址,可以是主机名或IP地址
labels:
job: {application}-logs # 标签,用于过滤和标识日志来源
project: oa
host: xxx.xx.xx.xx
__path__: /data/app/{application}/logs/*.log # 日志文件路径,支持通配符
- job_name: {job-task} # 作业名称
static_configs:
- targets:
- localhost # 目标地址,可以是主机名或IP地址
labels:
job: {application}-logs # 标签,用于过滤和标识日志来源
host: xxx.xx.xx.xx
__path__: /data/{job-task}/*.log # 日志文件路径,支持通配符
3.2 Docker-compose安装Loki&Grafana
1)docker-compose.yaml
# 适用于loki + grafana部署,排除掉promtail
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.8.3
container_name: loki
# no,默认策略,在容器退出时不重启容器
# always,在容器退出时总是重启容器
# unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
# restart: unless-stopped
ports:
- "3100:3100"
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml # 将主机上的loki-config.yaml文件挂载到容器的/etc/loki/local-config.yaml文件
- ./loki/index:/opt/loki/index # 将主机上的index目录挂载到容器的/opt/loki/index目录,用于存储Loki的数据
- ./loki/chunks:/opt/loki/chunks # 将主机上的chunks目录挂载到容器的/opt/loki/chunks目录,用于存储Loki的数据
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
grafana:
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_SECURITY_ADMIN_PASSWORD=xxxx
- GF_USERS_ALLOW_SIGN_UP=false
# - GF_AUTH_ANONYMOUS_ENABLED=true
# - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
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
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./grafana:/var/lib/grafana
networks:
- loki
2)loki-config.yaml
#loki-config.yaml
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 # 索引周期
table_manager:
retention_deletes_enabled: false #日志保留周期开关,默认为false
retention_period: 0s #日志保留周期
ruler:
alertmanager_url: http://localhost:9093
3)使用docker-compose启动
$ docker-compose up -d
官网地址:https://grafana.com/docs/loki/v2.8.x/installation/local/