一、Loki 简介
二、Loki 架构
三、安装使用教程
不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高,能对接 alertmanager。
特别适合储存 Kubernetes Pod 日志;诸如 Pod 标签之类的元数据会被自动删除和编入索引。
受 Grafana 原生支持,避免 kibana 和 grafana 来回切换。
Loki 的架构非常简单,使用了和 Prometheus 一样的标签来作为索引,通过这些标签既可以查询日志的内容也可以查询到监控的数据,不但减少了两种查询之间的切换成本,也极大地降低了日志索引的存储。
与 ELK 相比,消耗的成本更低,具有成本效益。
在日志的收集以及可视化上可以连用 Grafana,实现在日志上的筛选以及查看上下行的功能。
技术比较新颖,相对应的论坛不是非常活跃。
功能单一,只针对日志的查看,筛选有好的表现,对于数据的处理以及清洗没有 ELK 强大,同时与 ELK 相比,对于后期,ELK 可以连用各种技术进行日志的大数据处理,但是 loki 不行。
二、Loki 架构


Loki 组成部分
Loki 是主服务器,负责存储日志和处理查询。
Promtail 是代理,负责收集日志并将其发送给 Loki 。
Grafana 用于 UI 展示。
三、Loki安装
3.1、下载 yaml 文件
wget https://raw.githubusercontent.com/grafana/loki/v2.2.0/production/docker-compose.yaml -O docker-compose.yaml
复制
下载完成如下:
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.0.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:2.0.0
volumes:
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
networks:
- loki
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki复制
3.2、启动服务
3.3、配置服务
浏览器访问ip:3000,账密默认为:admin/admin
复制
五、整合SpringBoot
3.4、 配置数据源
3.5、 配置数据源
得到了日志里所有包含error的日志
3.6、promtail 配置详解
root@2a0cc144dd58:/# cat /etc/promtail/config.yml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push #这里配置的地址为loki服务器日志收集的信息
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs #这里为刚才选择job下子标签
__path__: /var/log/*log #将采集的日志放在/var/log/*log下自动发现复制
3.7、尝试增加一台日志采集服务器(在其他服务器)
3.7.1、编写 promtail 的配置文件 config.yml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push #这里配置的地址为你自己的loki服务器日志收集的信息
scrape_configs:
- job_name: mysql
static_configs:
- targets:
- localhost
labels:
job: mysql #这里为刚才选择job下子标签
__path__: /var/log/*log #将采集的日志放在/var/log/*log下自动发现复制
3.7.2、编写 docker-compose.yaml 配置文件
version: "3"
services:
promtail:
image: grafana/promtail:2.0.0 #拉去镜像
container_name: promtail-node #镜像名称
volumes:
- /root/promtail/config.yml:/etc/promtail/config.yml #挂载目录
- /var/log:/var/log
network_mode: 'host复制
docker-compose -f docker-compose.yaml up -d
复制
3.8、查询包含password的日志
{job="mysql"} |~ "password"
复制
3.9、面是一些常见的查询示例
基本的标签过滤:
查询特定作业(job)的日志:
plaintext
{job="mysql"}
这个查询将返回所有作业标签(job)为 "mysql" 的日志条目。
字符串匹配:
查找包含特定字符串的日志:
plaintext
{job="mysql"} |~ "error"
这个查询将返回所有作业标签为 "mysql" 并且日志消息中包含 "error" 字符串的日志条目。
时间范围:
查找最近一小时内的日志:
plaintext
{job="mysql"} |>= 1h
这个查询将返回最近一小时内的所有作业标签为 "mysql" 的日志条目。
逻辑运算符:
组合多个条件进行筛选:
plaintext
{job="mysql"} |~ "error" unless {namespace="production"}
这个查询将返回所有作业标签为 "mysql",并且日志消息中包含 "error" 字符串,但排除 namespace 标签为 "production" 的日志条目。
聚合和排序:
按日志级别计数:
plaintext
{job="mysql"} | count by (level)
这个查询将按日志级别对作业标签为 "mysql" 的日志进行计数,并返回每个级别的日志条目数量。
组合多个操作:
结合多个操作符进行复杂查询:
plaintext
{job="mysql"} |~ "error" | count by (level) | topk(10, count)
这个查询首先筛选出作业标签为 "mysql" 并且日志消息中包含 "error" 字符串的日志条目,然后按日志级别计数,最后返回计数最高的前十个级别。复制
---THE END---
文章转载自程序员恰恰,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。