如何快速打造"小而美"的日志系统?试试轻量化日志服务 Loki!
Posted 架构师日常笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速打造"小而美"的日志系统?试试轻量化日志服务 Loki!相关的知识,希望对你有一定的参考价值。
背景
日志系统协助我们解决线上或者线下问题,传统的日志往往采用笨重的ELKStack,它虽然功能强大,但需要的资源和入门门槛也比较高,我们往往只需要很小的一部分功能。常见的线上问题解决步骤一般如下:
收到报警信息或者邮件
到大屏观察统计信息(grafana)
日志系统查看报错日志(ELKStack或者基于ELKStack上开发)
定位错误原因到具体的服务或者主机
解决问题
从上面的步骤看,步骤2,步骤3要经过一次切换,从大屏切换到日志平台。而定位错误原因我们往往只关注具体哪个服务或者主机报错,报了什么错误,其它的并不是很关注。这种情况下ELKStack就有点杀鸡用牛刀的感觉了!
另外,ELKStack规模复杂,资源占用高,操作苦难,不适合敏捷开发的快速迭代。
loki的第一目的就是最小化度量和日志的切换成本,有助于减少异常事件的响应时间和提高用户的体验。
Loki 日志方案
整体上 Loki 采用了读写分离的架构,由多个模块组成。
* Promtail、Fluent-bit、Fluentd、Rsyslog 等开源客户端负责采集并上报日志;
* Distributor:日志写入入口,将数据转发到 Ingester;
* Ingester:日志的写入服务,缓存并写入日志内容和索引到底层存储;
* Querier:日志读取服务,执行搜索请求;
* QueryFrontend:日志读取入口,分发读取请求到 Querier 并返回结果;
* Cassandra/BigTable/DnyamoDB/S3/GCS:索引、日志内容底层存储;
* Cache:缓存,支持 Redis/Memcache/本地 Cache。
咋一看,上面的结构也很复杂,而我们的最终目的是打造一个“小而美”的日志方案,太复杂的事情留待以后扩展吧!
”小而美“日志方案:Loki/Promtail/Grafana
Loki Stack 包含三个组件:
Loki: 相当于 EFK 中的 ElasticSearch,用于存储和查询日志
Promtail: 相当于 EFK 中的 Filebeat/Fluentd,用于采集和发送日志
Grafana: 相当于 EFK 中的 Kibana,用于 UI 展示
看着好像还是很复杂,其实非常简单啦,我们来感受一下吧!
Loki/Promtail/Grafana实战
Loki安装搭建
loki下载
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.2.1/loki-linux-amd64.zip"
# extract the binary
$ unzip "loki-linux-amd64.zip"
# make sure it is executable
$ chmod a+x "loki-linux-amd64"
$ mkdir ${loki_root}/data
loki配置文件loki-local-config.yaml
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
schema_config:
configs:
- from: 2021-05-08
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /www/loki/data/index
filesystem:
directory: /www/loki/data/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s
启动
#启动Loki命令
nohup ./loki-linux-amd64 -config.file=loki-local-config.yaml > loki.log 2>&1 &
#查看启动是否成功(查看3100端口的进程是否存在)
netstat -tunlp | grep 3100
#或者根据名称查找进程(执行命令后有下边的显示,则启动成功)
ps -ef | grep loki-linux-amd64
Promtail安装搭建
下载
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.2.1/promtail-linux-amd64.zip"
# extract the binary
$ unzip "promtail-linux-amd64.zip"
# make sure it is executable
$ chmod a+x "promtail-linux-amd64"
配置文件promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /www/promtail/positions.yaml
clients:
- url: http://${ip}:3100/loki/api/v1/push
scrape_configs:
- job_name: nacos
static_configs:
- targets:
- ${ip}
labels:
job: xxxlog
__path__: ${directory}/logs/nacos.log
启动
#Promtail默认端口是9080,启动完成后,可以采用上边的方式查看进程是否启动成功
nohup ./promtail-linux-amd64 -config.file=promtail-local-config.yaml > promtail.log 2>&1 &
查看Promtail数据采集web页面
浏览器访问:http://${host}:9080/targets
Grafana安装搭建
#下载Grafana
https://grafana.com/grafana/download
#解压Grafana
tar -vxf grafana-VERSION.linux-amd64.tar.gz
#启动Grafana
nohup ./bin/grafana-server >> grafana.log 2>&1 &
验证grafana
浏览器访问http://${host}:3000/ 默认用户名密码 admin/admin
Grafana配置lork数据源
Grafana日志展示
总结
Loki 作为一个新兴的日志解决方案,现在越来越受到关注。Loki 作为一个正在快速发展的项目,最新版本已到 2.0,相较 1.6 增强了诸如日志解析、Ruler、Boltdb-shipper 等新功能,不过基本的模块、架构、数据模型、工作原理上已处于稳定状态。
以上是关于如何快速打造"小而美"的日志系统?试试轻量化日志服务 Loki!的主要内容,如果未能解决你的问题,请参考以下文章