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: oahost: 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.3container_name: loki# no,默认策略,在容器退出时不重启容器# always,在容器退出时总是重启容器# unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器# restart: unless-stoppedports:- "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.yamlnetworks:- lokigrafana: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=Adminentrypoint:- sh- -euc- |mkdir -p /etc/grafana/provisioning/datasourcescat <<EOF > /etc/grafana/provisioning/datasources/ds.yamlapiVersion: 1datasources:- name: Lokitype: lokiaccess: proxy orgId: 1url: http://loki:3100basicAuth: falseisDefault: trueversion: 1editable: falseEOF/run.shimage: grafana/grafana:latestcontainer_name: grafanarestart: unless-stoppedports:- "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: /lokistorage:filesystem:chunks_directory: /loki/chunksrules_directory: /loki/rulesreplication_factor: 1 # 复制因子ring:kvstore:store: inmemory # 键值存储方式schema_config:configs:- from: 2020-10-24store: boltdb-shipper # 存储方式object_store: filesystemschema: v11index:prefix: index_ # 索引前缀period: 24h # 索引周期
table_manager:retention_deletes_enabled: false #日志保留周期开关,默认为falseretention_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/