当前位置: 首页 > 科技观察

中小项目用ELK做日志?我要玩一些新花样

时间:2023-03-18 21:36:45 科技观察

项目正式化,日志系统必不可少。目前大部分日志平台推荐基于ELK,但是ELK比较重,结构偏大,中小项目不好hold住。我希望找到一个更简单的。如果找不到,那就用ELK。之前预留了一些技术候选库,翻了一下,有个日志系统叫Loki,但是百度的产品大部分都是电影,靠谱不?其实Loki的日志系统的开发团队是非常靠谱的。就是监控领域大名鼎鼎的GrafanaLabs。众所周知的开源数据可视化工具Grafana、监控系统Prometheus等。Loki是一个受普罗米修斯启发的开源项目。它是一个可扩展、高可用性和多租户的日志聚合系统。设计理念是让日志聚合更容易,它被设计成非常具有成本效益且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。它主要由三部分组成:Promtail是一个日志收集器,负责收集应用程序日志并发送给Loki。Loki用于日志存储和解析,并提供查询API供下游展示。Grafana负责可视化Loki的日志。Loki流程图看起来不错,我也试试看。上手简单遇到新事物先跑个小demo。说实话国内没有详细的入门demo,尤其是和SpringBoot的连接。按照原文档,我折腾了好久,终于跑成功了。Loki安装首先是安装,现在运行DEMO,我优先考虑快速方便的Docker。下面是我修改后的DockerCompose脚本,可以根据自己的需要进行修改,实现一键启动Loki。version:"3"networks:loki:services:loki:image:grafana/loki:2.2.1container_name:loki-servicevolumes:#将loki配置文件挂载到本地c:/docker/loki目录-c:/docker/loki:/etc/loki/ports:-"3100:3100"command:-config.file=/etc/loki/loki.ymlnetworks:-lokipromtail:image:grafana/promtail:2.2.1container_name:promtail-servicevolumes:#forRead本地日志目录。这是运行的默认配置。这绝对不是生产中的情况。-c:/docker/log:/var/log/#promtail配置文件也挂载到本地c:/docker/promtail目录-c:/docker/promtail:/etc/promtail/command:-config.file=/etc/promtail/promtail.ymlnetworks:-lokigrafana:image:grafana/grafana:latestcontainer_name:grafana-serviceports:-"3000:3000"networks:-挂载目录c:/docker/lokiandc:/dockeronloki/promtail你根据自己的情况调整位置。上面文件中的Loki配置-config.file=/etc/loki/loki.yml是Loki的配置文件,我们需要提前将配置文件loki.yml放到c:/docker/loki下,我用的是默认的configuration:auth_enabled:falseserver:http_listen_port:3100ingester:lifecycler:address:127.0.0.1ring:kvstore:store:inmemoryreplication_factor:1final_sleep:0schunk_idle_period:1h#Anychunknotreceivingnewlogsinthistimewillbeflushedmax_chunk_age:1h#Allchunkswillbeflushedwhentheyhitthisage,defaultis1hchunk_target_size:1048576#Lokiwillattempttobuildchunksupto1.5MB,flushingfirstifchunk_idle_periodormax_chunk_ageisreachedfirstchunk_retain_period:30s#MustbegreaterthanindexreadcacheTTLifusinganindexcache(DefaultindexreadcacheTTLis5m)max_transfer_retries:0#Chunktransfersdisabledschema_config:configs:-from:2020-10-24store:boltdb-shipperobject_store:filesystemschema:v11index:prefix:index_period:24hstorage_config:boltdb_shipper:active_index_directory:/loki/boltdb-shipper_boltki-active:calcshipper-缓存cache_ttl:24h#Canbeincreasedforfasterperformanceoverlongerqueryperiods,usesmorediskspaceshared_store:filesystemfilesystem:directory:/loki/chunkscompactor:working_directory:/loki/boltdb-shipper-compactorshared_store:filesystemlimits_config:reject_old_samples:truereject_old_samples_max_age:168hchunk_store_config:max_look_back_period:0stable_manager:retention_deletes_enabled:local:agetorredirect:local0:falsedirect:ruereject_old_samples_max_age:/loki/rulesrule_path:/loki/rules-tempalertmanager_url:http://localhost:9093ring:kvstore:store:inmemoryenable_api:true不用管这些配置项是做什么用的,先运行一下,需要的时候查看文档,并且有一个有针对性的Promtail配置,和Loki类似。Promtail还在本地挂载的c:/docker/promtail目录中配置了promtail.yml。这里也使用默认配置:server:http_listen_port:9080grpc_listen_port:0positions:filename:/tmp/positions.yamlclients:-url:http://loki:3100/loki/api/v1/pushscrape_configs:-job_name:systemstatic_configs:-targets:-localhostlabels:job:varlogs#这个跟挂载的位置有关系,可以猜__path__:/var/log/*log我猜/var/log/*log是读取日志的位置,所以我挂载到本地的c:/docker/log,后面会获取一些日志到本地目录,看看能不能看懂。启动Loki,配置完成后执行docker-compose-fup命令,先下载镜像,然后启动三个Docker容器。成功后打开http://localhost:3000/登录Grafana。默认账户密码为admin/admin。然后在侧边栏中添加数据源为Loki:点击图中的添加数据源,将Loki的URL配置为http://loki:3100,然后点击确定和测试,绿色提示表示成功。我们正在使用DockerCompose,因此主机名是服务名称loki。然后点击侧边栏的圆规图标Explore,进入日志UI,此时什么也没有。您必须创建一些日志,制作一个SpringBoot应用程序,然后在application.yml中配置日志记录选项,然后启动应用程序以生成一些日志。logging:file:#获取Promtail疑似日志读取路径trypath:c:/docker/loglevel:org:debug然后输入一个表达式(Loki查询){filename="/var/log/spring.log"},去c:/docker/log看文件名,你有!好的!Loki中查询展示SpringBoot日志汇总今天,我们从零开始演示SpringBoot对接日志新贵Loki,看起来真不错。学习新东西需要清楚它的场景和每一步的目标,先跑DEMO,再研究定制,最后才是底层原理。你学得越多,你就会越熟练。学得越多,就越知道自己的不足,这样才能有目标和方向。不要盲目学习,更不要过分追求底层原理。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。