前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用Loki来绘制Ingress Nginx监控大屏

如何用Loki来绘制Ingress Nginx监控大屏

作者头像
云原生小白
发布2021-05-13 10:01:34
1.8K0
发布2021-05-13 10:01:34
举报
文章被收录于专栏:LokiLoki

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

代码语言:javascript
复制
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模块[1],日志格式中变量$geoip_country_code打印的实为国家编码

2. 日志采集

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

3. Grafana

安装worldmap-panel

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

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

代码语言:javascript
复制
grafana-cli plugins install grafana-worldmap-panel

导入Loki v2 Web Analytics Dashboard

在Grafana官网中下载Loki v2 Web Analytics Dashboard[2]的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[3],它会非常帮助你理解其精髓之处,或者你也可以参考我之前的一篇文章《Loki迎来2.0重大更新,LogQL语法大幅增强!》总之,LogQL查询语句给当下Loki系统带来了非常灵活的运用,不过用Loki日志来做度量并不是社区本意,大家切勿本末倒置。

参考资料

[1]Nginx GeoIP Module: http://nginx.org/en/docs/http/ngx_http_geoip_module.html

[2]Loki v2 Web Analytics Dashboard: https://grafana.com/grafana/dashboards/12559

[3]logql: https://grafana.com/docs/loki/latest/logql/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生小白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Ingress-Nginx日志
  • 2. 日志采集
  • 3. Grafana
    • 安装worldmap-panel
      • 导入Loki v2 Web Analytics Dashboard
        • 调整LogQL V2查询语句
        • 总结
          • 参考资料
          相关产品与服务
          Grafana 服务
          Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档