用Loki来绘制Ingress Nginx监控大屏
最近无意间发现Grafana官网的Dashboard页面首推了一个用Loki分析Nginx日志的页面,大体也就是Loki2.0后产品主推的LogQL V2语法的典型应用。也许是最近感受到大家愈发对新语法的不熟悉,社区也特地做了一个quick demo来简单说明其新语法的使用。
在视频里,我们看到基于LogQL V2语法为Nginx日志分析提供了一个新的思路。这个demo我们可以通过官网的Dashboard中找到。不过今天小白想写的是如何在Ingress-Nginx中也能用上如视频般丝滑的界面。
1. Ingress-Nginx日志
日志是Loki之源,在ingress-nginx中,对于日志格式的定义是配置在nginx-configuration
这个configMap当中。再次我们需要添加两项配置来声明ingress-nginx的全局日志格式。
1 | apiVersion: v1 |
注意:ingress-nginx默认开启了geoip模块,日志格式中变量
$geoip_country_code
打印的实为国家编码
2. 日志采集
工欲善其事必先利其器
,ingress-nginx在kubernetes中的日志采集方式,你可以通过promtail、fluentd或者其它三方客户端工具来完成。小白在这里不过多介绍。或者你可以参考我之前的文章《loki和fluentd的那点事儿》来思考fluentd是如何通过kubernetes元数据来定义日志label并发送给Loki的。
3. Grafana
安装worldmap-panel
Grafana提供了一个worldmap-panel用来实现一个世界地图的数据可视化,常用来分析不同的地区不同的值。在Nginx的日志中,我们主要以检索国家编码
来可视化日志请求的大致分布。
插件安装比较简单,在grafana服务所在的实例中执行以下命令后重启服务即可:
1 | grafana-cli plugins install grafana-worldmap-panel |
导入Loki v2 Web Analytics Dashboard
在Grafana官网中下载Loki v2 Web Analytics Dashboard的json文件,并导入到自己的grafana中
注意:小白在上述Ingress-Nginx中的日志格式与官方提供的有较大差异,这里导入官方的dashboard是为了节省自己绘图的时间。
你也完全可以按照官方提供的日志json格式来配置ingress-nginx
调整LogQL V2查询语句
编辑一个Panel,将原本LogQL语句中的filename=/var/log/nginx/json_access.log
调整为你自己Loki中对应的ingress-nginx日志标签即可,这样你就可以得到如下的大屏了。
总结
如果你对LogQL V2语法不太了解的情况下,建议开始前先仔细阅读官网文档logql,它会非常帮助你理解其精髓之处,或者你也可以参考我之前的一篇文章《Loki迎来2.0重大更新,LogQL语法大幅增强!》总之,LogQL查询语句给当下Loki系统带来了非常灵活的运用,不过用Loki日志来做度量并不是社区本意
,大家切勿本末倒置