Grafana Loki管理Spring Boot日志实战分享

举报
码农小胖哥 发表于 2022/04/01 00:45:33 2022/04/01
2.8k+ 0 0
【摘要】 上一篇文章简单入门了Loki日志平台的使用,今天又简单研究了如何在实践中使用Loki监控Spring Boot应用,特地分享给大家,让大家对这门新技术有更深的了解。 Loki的日志收集实践 上一篇文章中我们使用Docker Compose同时启动了Grafana、Loki、Promtail来监控一个应用。以及整个日志体系的...

上一篇文章简单入门了Loki日志平台的使用,今天又简单研究了如何在实践中使用Loki监控Spring Boot应用,特地分享给大家,让大家对这门新技术有更深的了解。

Loki的日志收集实践

上一篇文章中我们使用Docker Compose同时启动了Grafana、Loki、Promtail来监控一个应用。以及整个日志体系的架构。

Loki日志体系

但是实际应用中不可能为每一个应用都建立一个Grafana-Loki-Promtail体系。

Promtail日志代理

目前Promtail可以从两个来源跟踪日志:本地日志文件和systemd日志,我们上一篇文章中演示的就是本地日志文件的加载,这种方式是目前我唯一能够使用的途径,另一种途径是通过K8S的服务发现能力。

Loki流程图

如果在多个应用服务器上部署对应的多个Promtail守护程序就能监视多个应用的静态日志文件,并通过Loki API将日志推送到Loki中进行聚合式的管理。

Spring Boot日志的部署拓扑

Promtail动态配置

GrafanaLoki的部署请参考这一篇文章

我们只需要为Loki应用部署相关的Promtail守护程序即可。这里我仍然使用DockerPromtail进行部署,不过我不能再使用默认配置了,这时的config.yml应该是:


       server:
         http_listen_port: 9080
         grpc_listen_port: 0
       positions:
         filename: /var/log/positions.yaml
       client:
         url: http://${LOKI_HOST}:${LOKI_PORT}/loki/api/v1/push
       scrape_configs:
         - job_name: system
           pipeline_stages:
           static_configs:
             - labels:
                 app: ${APP_NAME}
                 job: varlogs
                 host: ${LOG_HOST}
                 __path__: /var/log/*log
   
  

为了构建一个通用的配置,我将一些参数进行了动态化。这是Loki2.1+版本提供的特性,可以使用${}来引用环境变量,甚至你可以为其指定默认值${VAR:default_value}。但是你必须得知道为了开启这一特性需要在Promtail启动命令中添加选项-config.expand-env

Promtail Docker镜像改造

根据这个我对PromtailDocker镜像进行了改造,具体的Dockerfile为:


       FROM grafana/promtail:2.2.1
       LABEL AUTHOR = felord.cn
       VOLUME ["/var/log/"]
       EXPOSE 9080
       ENV LOKI_HOST="localhost"
       ENV LOKI_PORT=3100
       ENV APP_NAME="APP"
       ENV LOG_HOST="localhost"
       COPY config.yml /etc/promtail/
       CMD ["-config.file=/etc/promtail/config.yml", "-config.expand-env"]
   
  

你可以通过docker build -t loki-promtail:1.0 .命令构建这个自定义Promtail镜像。基本的启动命令:

docker run -d  --name promtail-service --network loki -v c:/docker/log:/var/log/  -e LOKI_HOST=loki -e APP_NAME=SpringBoot  loki-promtail:1.0

  

其中挂载的目录c:/docker/log依然是应用的日志目录,LOKI_HOST要保证能够同Loki服务器通信,无论你通过直连还是Docker网络(这里用了Docker网桥)。你可以可以使用Docker Compose将应用和Promtail进行捆绑,所有的Promtail将把对应的日志发往Loki进行集中式的管理。另外通过自定义的Label我们可以通过应用名称来搜索日志了。

总结

今天通过更加贴近实战的方式对Loki收集日志的机理进行了分享,尤其是日志收集器Promtail的改造部署。希望能够帮助你更加快捷地实战这个日志新贵。好了今天的分享就到这里,多多关注:码农小胖哥,  多多一键四连,多多支持持续输出原创技术分享。

Spring中的配置如何保证可扩展性

2021-05-17

中小项目用ELK做日志?我准备玩点新花样

2021-05-13

文章来源: felord.blog.csdn.net,作者:码农小胖哥,版权归原作者所有,如需转载,请联系作者。

原文链接:felord.blog.csdn.net/article/details/117004430

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。