Loki
Loki
安装loki
|
|
安装promtail
|
|
安装logcli
|
|
组件介绍
官方架构图
Distributor(分发器)
验证写入正确性,切成chunk发给ingester
Ingester(采集器)
负责处理实际的存储,把日志发给querier组件
Querier(查询器)
从Ingester提取日志
Querier Frontend(查询前端)
提供查询API
数据流向
写
chunk存储结构是nosql的模式,根据key生成hash id方便快速查找,把具体的信息存为一个item [[../images/chunks_diagram.png ]]整体一个写入流程分为
- distributor收到一个HTTP/1请求
- stream数据流hash成一个字符串
- 把这个数据流发到合适的ingester和分片replicas
- 每个ingester创建对应的chunk文件或者在已有chunk修改
- distributor返回一个成功的code
读
- querier收到一个读的HTTP请求
- querier把请求发给所有的ingester
- ingester如果收到就把自己有的数据返回
- 如果都没有返回,querier对备份库慢查询对应的记录
- querier对收到的ingester数据进行去重,并返回
常见client
logstash
https://grafana.com/docs/loki/next/clients/logstash/
|
|
loki集群化部署
memberlist
|
|
注意默认join_members是要ip的,但官网说的是hostname比较奇怪,我这里就是node_name是ip,也可能是主机名解析不了就会这样
ingester
设置ingester的replication_factor为2
|
|
这个是ingester和distributor的memberlist配置
检查
配置完了memberlist,就可以在很多地方使用这个变量了 检查下systemctl status lokid 这个时候一般能成功,并且提示这个就是成功了,caller=memberlist_client.go:504 msg="joined memberlist cluster" reached_nodes=1
那么哪些能加memberlist呢 似乎大部分组件都支持加入,具体可以去github issue看下
lifecycle和ring需要了解下 查询官方架构发现,lifecycle是用来管理ingester的hash字符串。每个采集器维护一个状态,包括pending,joining,active,leaving,unhealthy等。
这里可以发现,member之前是通过gossip来实现集群的,那么gossip了解下
gossip
gossip是一个协议, 也叫Epidemic Protocol (流行病协议) 建议大家看下gossip知乎回答 基本来说通过一定程度的扩散,最终信息在范围内以一定速度得到传递
增加缓存
这里复制了云原生小白文章, 暂时并没有尝试
|
|
http API
http API是非常重要的部分,这里有集群的相关情况,并且和使用密切相关,所以必须要了解 后端endpoints
|
|
loki http api 建议过一遍
grafana
导入loki这个datasource
|
|
FAQ
entry with timestamp ignored reason 'entry out of order' for stream
Maximum active stream limit exceeded
|
|