热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用Loki来绘制IngressNginx监控大屏

最近无意间发现Grafana官网的Dashboard页面首推了一个用Loki分析Nginx日志的页面,大体也就是Loki2.0后产品主推的LogQLV2语法的典型应用。也许是最近感


最近无意间发现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的全局日志格式。


apiVersion: v1
data:
log-format-escape-json: "true"
log-format-upstream: '{"timestamp": "$time_iso8601", "requestID": "$req_id", "proxyUpstreamName":
"$proxy_upstream_name","host": "$host","proxyAlternativeUpstreamName": "$proxy_alternative_upstream_name","upstreamStatus":
"$upstream_status", "geoip_country_code": "$geoip_country_code","upstreamAddr": "$upstream_addr","request_time":
"$request_time","httpRequest":{"requestMethod": "$request_method", "requestUrl":
"$request_uri", "status": $status,"requestSize": "$request_length", "responseSize":
"$upstream_response_length", "userAgent": "$http_user_agent", "remoteIp": "$remote_addr",
"referer": "$http_referer", "latency": "$upstream_response_time", "protocol":"$server_protocol"}}'
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
name: nginx-configuration
namespace: ingress-nginx

注意: ingress-nginx默认开启了 geoip模块 ,日志格式中变量 $geoip_country_code 打印的实为国家编码


2. 日志采集


工欲善其事必先利其器 ,ingress-nginx在kubernetes中的日志采集方式,你可以通过promtail、fluentd或者其它三方客户端工具来完成。小白在这里不过多介绍。或者你可以参考我之前的文章 《loki和fluentd的那点事儿》 来思考fluentd是如何通过kubernetes元数据来定义日志label并发送给Loki的。


3. Grafana


安装世界地图的panel


Grafana提供了一个worldmap-panel用来实现一个世界地图的数据可视化,常用来分析不同的地区不同的值。再Nginx的日志中,我们主要以检索 国家编码 来可视化日志请求的大致分布。


插件安装比较简单,在grafana服务所在的实例中执行以下命令后重启服务即可:


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日志来做度量并不是社区本意 ,大家切勿本末倒置。


关注公众号「云原生小白」,获取更多精彩内容




推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
author-avatar
然后突然4_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有