一、简介
1、简介
Loki 是 Grafana Labs 团队最新的开源项⽬,是⼀个⽔平可扩展,⾼可⽤
性,多租户的⽇志聚合系统。它的设计⾮常经济⾼效且易于操作,因为它
不会为⽇志内容编制索引,⽽是为每个⽇志流编制⼀组标签,专⻔为
Prometheus 和 Kubernetes ⽤户做了相关优化。该项⽬受 Prometheus 启
发,官⽅的介绍就是: Like Prometheus,But For Logs.,类似于
Prometheus 的⽇志系统;
项⽬地址:https://github.com/grafana/loki/
官⽅⽂档地址:https://grafana.com/docs/loki/latest/
与其他⽇志聚合系统相⽐, Loki 具有下⾯的⼀些特性:
- 不对⽇志进⾏全⽂索引。通过存储压缩⾮结构化⽇志和仅索引元数
据,Loki 操作起来会更简单,更省成本。 - 通过使⽤与 Prometheus 相同的标签记录流对⽇志进⾏索引和分组,
这使得⽇志的扩展和操作效率更⾼,能对接alertmanager; - 特别适合储存 Kubernetes Pod ⽇志; 诸如 Pod 标签之类的元数据会
被⾃动删除和编⼊索引; - 受 Grafana 原⽣⽀持,避免kibana和grafana来回切换;
2、架构
1、组件说明
-
Grafana ⽤于 UI 展示。
-
Promtail:Promtail 是 Loki 的代理,它负责收集日志并将它们发送到 Loki。Promtail 通常在产生日志的机器上运行,可以直接读取日志文件,也可以接收由其他进程(如 Fluentd 或 Fluent Bit)转发的日志。
-
Loki:Loki 是主要的日志聚合和查询组件,它接收并存储日志,同时提供了一个查询接口。Loki 通过索引日志流(而不是每一行日志)来提供高效的存储和查询。
-
Distributor:Distributor 是 Loki 的组件,它负责接收来自 Promtail 的日志数据,然后将这些数据分发到多个 Ingester。
-
Ingester:Ingester 是 Loki 的组件,它负责接收日志数据,将数据压缩后存储在内存中,然后定期将这些数据刷新到长期存储(如 Amazon S3 或 Google Cloud Storage)。
-
Querier:Querier 是 Loki 的组件,它负责处理来自用户的查询请求。Querier 会从 Ingester 和长期存储中获取数据,然后返回查询结果。
-
Query Frontend:Query Frontend 是 Loki 的组件,它负责优化和加速查询。Query Frontend 会将大查询分解为多个小查询,然后并行执行这些小查询。
-
Compactor:Compactor 是 Loki 的组件,它负责压缩和优化在长期存储中的数据。
-
Ruler:Ruler 是 Loki 的组件,它负责执行预定义的规则和警报。-
2、工作流程
二、安装(二进制)、
0、环境介绍:
centos7.8虚拟机一台
1、安装loki
本地安装⽅式官⽅⽂档地址:https://grafana.com/docs/loki/latest/installation/local/
1、安装loki
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
wget https://github.com/grafana/loki/releases/download/v2.9.6/loki-linux-amd64.zip
mkdir -p /data/loki/{chunks,index}
unzip loki-linux-amd64.zip
cp loki-linux-amd64 /usr/local/bin/loki
2、配置loki通过systemctl管理
cat /etc/systemd/system/loki.service
[Unit]
Description=Loki Log Aggregator Service
After=network.target
[Service]
ExecStart=/usr/local/bin/loki -config.file=/data/loki/loki-local-config.yaml
Restart=always
RestartSec=5s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
3、修改配置文件
cat /data/loki/loki-local-config.yaml
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /data/loki #endpoint路径前缀
storage:
filesystem:
chunks_directory: /data/loki/chunks #块存放路径
rules_directory: /data/loki/rules #规则存放路径
replication_factor: 1
ring:
instance_addr: 192.168.86.14 #loki实例地址
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-03-30
store: boltdb-shipper
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093 #告警服务管理地址
chunk_store_config:
max_look_back_period: 2160h #最大可查询历史日期 90天
table_manager:
retention_deletes_enabled: true
retention_period: 2160h #表的保留日期 90天
4、启动loki
systemctl start loki
systemctl enable loki
2、安装promtail
1、安装
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
wget https://github.com/grafana/loki/releases/download/v2.9.6/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
cp promtail-linux-amd64 /usr/local/bin/promtail
mkdir /data/promtail
2、配置promtail通过systemctl管理
cat /etc/systemd/system/promtail.service
[Unit]
Description=Promtail Log Shipper Service
After=network.target
[Service]
ExecStart=/usr/local/bin/promtail -config.file=/data/promtail/promtail-local-config.yaml
Restart=always
RestartSec=5s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
3、修改配置文件
cat /data/promtail/promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /data/positions.yaml
clients:
- url: http://192.168.86.14:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- 192.168.86.14
labels:
job: varlogs
__path__: /var/log/*log
4、启动promtail
systemctl start promtail
systemctl enable promtail
3、安装grafana
1、下载安装包
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.4.1.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-10.4.1.linux-amd64.tar.gz -C/opt
2、配置systemctl启动
vi /etc/systemd/system/grafana-server.service
[Unit]
Description=Grafana Server
After=network.target
[Service]
Type=simple
ExecStart=/opt/grafana-v10.4.1/bin/grafana-server \
--config=/opt/grafana-v10.4.1/conf/defaults.ini \
--homepath=/opt/grafana-v10.4.1
Restart=on-failure
Environment="GF_LOG_LEVEL=info"
[Install]
WantedBy=multi-user.target
3、启动grafana-server
systemctl start grafana-server
systemctl enable grafana-server
4、配置数据源
5、修改配置,使用minio存储
# Loki 主配置文件,用于连接 MinIO
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /data/loki
replication_factor: 1
ring:
instance_addr: 192.168.86.14
kvstore:
store: inmemory
storage_config:
aws:
s3: http://QeytJ4j0u6Kodh4ki6Ra:ctrCLm0XRWmhZuv2flt5Wgf9QaGpNGFOXoMBCFxT@192.168.86.21:31388 # 替换为您的 MinIO 访问凭证和 IP/域名
bucketnames: loki-bucket
s3forcepathstyle: true
boltdb_shipper:
shared_store: aws
schema_config:
configs:
- from: 2024-03-30
store: boltdb-shipper
object_store: aws
schema: v13 # 根据 Loki 当前版本使用合适的 schema 版本
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
chunk_store_config:
max_look_back_period: 2160h
table_manager:
retention_deletes_enabled: true
retention_period: 2160h