项目做正规了,日志系统是少不了的。目前大部分日志平台推荐基于ELK构建,不过ELK算是比较重了,架构太大,中小项目不太好Hold住,希望找一款简单一些的,如果实在找不到再上ELK。之前储备了一些技术候选库,翻了翻果然有一款名叫Loki的日志系统,可百度大部分都是电影里的这货,不靠谱?

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了运城免费建站欢迎大家使用!
事实上日志系统的开发团队靠谱的很,就是监控领域大名鼎鼎的Grafana Labs,为人所熟知的有开源数据可视化工具Grafana、监控系统Prometheus等等。
Loki是他们受 Prometheus 启发打造的开源项目,是一款可扩展,高可用,支持多租户的日志聚合系统。设计的理念就是为了让日志聚合更简单,它被设计为非常经济高效且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。它主要由三部分组成:
Loki流程图
看上去挺不错的,我要试一试。
遇到新东西先跑个小DEMO,说实话目前国内介绍这个的都没有详细的上手DEMO,尤其是和Spring Boot对接这一块。我照着原版文档,花了小半天终于跑成功了。
首先是安装,现在跑DEMO我优先选择快捷方便的Docker。下面是我修改过的Docker Compose脚本,根据你自己的需要改改就能一键启动Loki。
- version: "3"
 - networks:
 - loki:
 - services:
 - loki:
 - image: grafana/loki:2.2.1
 - container_name: loki-service
 - volumes:
 - # 将loki的配置文件挂载到本地 c:/docker/loki 目录
 - - c:/docker/loki:/etc/loki/
 - ports:
 - - "3100:3100"
 - command: -config.file=/etc/loki/loki.yml
 - networks:
 - - loki
 - promtail:
 - image: grafana/promtail:2.2.1
 - container_name: promtail-service
 - volumes:
 - # 为了读取本地的日志目录,这个是个默认配置目的就是为跑起来,生产肯定不是这样的。
 - - c:/docker/log:/var/log/
 - # promtail 的配置文件也挂载到本地 c:/docker/promtail目录
 - - c:/docker/promtail:/etc/promtail/
 - command: -config.file=/etc/promtail/promtail.yml
 - networks:
 - - loki
 - grafana:
 - image: grafana/grafana:latest
 - container_name: grafana-service
 - ports:
 - - "3000:3000"
 - networks:
 - - loki
 
上面的挂载目录c:/docker/loki和c:/docker/promtail你根据自己的情况调整位置。
上面文件中的-config.file=/etc/loki/loki.yml是Loki的配置文件,我们需要将配置文件loki.yml提前放在c:/docker/loki下,我使用默认配置:
- 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: 1h # Any chunk not receiving new logs in this time will be flushed
 - max_chunk_age: 1h # All chunks will be flushed when they hit this age, default is 1h
 - chunk_target_size: 1048576 # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
 - chunk_retain_period: 30s # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
 - max_transfer_retries: 0 # Chunk transfers disabled
 - schema_config:
 - configs:
 - - from: 2020-10-24
 - store: boltdb-shipper
 - object_store: filesystem
 - schema: v11
 - index:
 - prefix: index_
 - period: 24h
 - storage_config:
 - boltdb_shipper:
 - active_index_directory: /loki/boltdb-shipper-active
 - cache_location: /loki/boltdb-shipper-cache
 - cache_ttl: 24h # Can be increased for faster performance over longer query periods, uses more disk space
 - shared_store: filesystem
 - filesystem:
 - directory: /loki/chunks
 - compactor:
 - working_directory: /loki/boltdb-shipper-compactor
 - shared_store: filesystem
 - limits_config:
 - 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
 - ruler:
 - storage:
 - type: local
 - local:
 - directory: /loki/rules
 - rule_path: /loki/rules-temp
 - alertmanager_url: http://localhost:9093
 - ring:
 - kvstore:
 - store: inmemory
 - enable_api: true
 
不要纠结这些配置项是干什么的,先跑起来再说,用到了去查文档,要有的放矢。
和Loki类似,Promtail也要在本地挂载的c:/docker/promtail目录下配置promtail.yml,这里也使用默认配置:
- server:
 - http_listen_port: 9080
 - grpc_listen_port: 0
 - positions:
 - filename: /tmp/positions.yaml
 - clients:
 - - url: http://loki:3100/loki/api/v1/push
 - scrape_configs:
 - - job_name: system
 - static_configs:
 - - targets:
 - - localhost
 - labels:
 - job: varlogs
 - # 这个跟挂载的位置有点关系,你可以猜猜
 - __path__: /var/log/*log
 
我猜测/var/log/*log就是读取日志的位置,所以我把它挂载到本地c:/docker/log,等下弄点日志到本地这个目录下,看看能读取出来不。
配置完毕后执行docker-compose -f up命令,会先下载镜像然后启动三个Docker容器。成功后打开http://localhost:3000/登录Grafana,默认账号密码是admin/admin。然后在侧边栏添加数据源为Loki:
点击图中的Add data source
然后配置Loki的URL为http://loki:3100,然后点确定和测试,有绿色提示就表示成功了。
我们使用的是Docker Compose,因此hostname是服务名称loki。
然后点击侧边栏一个指南针形状的图标Explore,就进入日志的UI了,这时候啥也没有。
得造点日志,搞一个Spring Boot应用,然后在application.yml中配置日志选项,然后启动应用生成一些日志。
- logging:
 - file:
 - # 弄到疑似Promtail的日志读取路径试试
 - path: c:/docker/log
 - level:
 - org: debug
 
然后我输入了一个从文档中找到的查询日志的表达式(Loki query){filename="/var/log/spring.log"}, 文件名称去c:/docker/log下看,有了有了!Nice!
Loki中查询展示Spring Boot日志
今天从零演示了Spring Boot对接日志新贵Loki,看上去还真不错。学习新东西,要清楚它的场景,要清楚自己每一步的目标,先跑起来DEMO,再去研究定制化,最后才是底层原理。你学得越多就越熟练,你学得越多就越知道自己的短板,才能有目标和方向,不要盲目学,更不要过于追求底层原理。
本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。
                新闻标题:中小项目用ELK做日志?我准备玩点新花样
                
                网站链接:http://www.csdahua.cn/qtweb/news24/87224.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网