通过nginx访问日志快速展示/分析平台使用量(Filebeat+Elasticsearch+Grafana)-2

681 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

Filebeat

Filebeat用于读取nginx access log并把解析后的数据推送但es,配置好后,它就会实时的自动把新写入的nginx access日志推送到es,保证我们的可视化数据是最新的

官方下载(本文使用版本为7.13.2)

www.elastic.co/downloads/b…

安装配置(linux环境)

下载

启用nginx模块

  • ./filebeat modules enable nginx

配置nginx访问日志路径

  • vi modules.d/nginx.yml
  • 配置access log路径
- module: nginx
  # Access logs
  access:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/data/logs/nginx/myapp.access.log"]

配置filebeat推送日志到ES

  • vi filebeat.yml
  • 添加 Elasticsearch template setting
# ======================= Elasticsearch template setting =======================

setup.ilm.enabled: false
setup.template.name: "es-nginx"
setup.template.pattern: "es-nginx-*"
  • 添加 ES Output
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["xx.xx.xx.xx:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "your password"
  
  index: "es-nginx-your-app"

启动filebeat

  • filebeat -e -c filebeat.yml

Grafana

官方下载(本文使用版本为8.0.3)

grafana.com/grafana/dow…

安装配置(linux环境)

下载

启动

  • ./bin/grafana-server web

访问http://localhost:3000, 默认用户名密码admin/admin(第一次登录可以修改)

创建可视化数据

登录Grafana http://localhost:3000

配置数据源

把我们前面部署的ES作为数据源添加到Grafana里,选择设置->数据源 image.png image.png

ES的地址,用户名/密码按上面部署的实际情况进行配置,主要index的名字要与filebeat推送到ES使用的index一致,Version选择7.0+ image.png

保存测试没有问题的话,就可以开始创建Dashboard了

创建Dashboard

选择添加Dashboard并添加一个空的panel image.png

如果一切正常的话,应该就可以看到从ES中拿到的数据了 image.png

通过Lucene Query筛选特定数据

默认情况下获取到的是全部nginx访问日志,展示数据图表为分时接口访问量(因为本文示例的日志是后端服务接口的access log),如果你正好想分析下用户在什么时间使用量怎么样,那无需其他设置,这个图表就够用了,在上方可以选择时间范围,只要你的日志数据量足够,就可以按日,按月,按年进行展示和分析了(注意:如果原始日志数据量较大,filebeat可能需要一定的时间把日志分析完后推送到ES)

那么如果我们要具体分析某一特定用户行为的平台使用量呢?这个时候就需要过滤筛选数据了,filebeat默认解析出来的日志格式中关键内容如下(可以通过ES的client连接到ES上查看具体数据格式样式,不同版本可能会有差异)

{
  "url": {
    "original": "/v1/list"
  },
  "@timestamp": "2021-09-01T06:02:14.000Z",
  "http": {
    "request": {
      "method": "GET"
    },
    "response": {
      "status_code": 200,
      "body": {
        "bytes": 148
      }
    },
    "version": "1.1"
  }
}

其中@timestamp就是Grafana中的横轴时间数据,所有日志数据通过filebeat解析并推送到ES时都必有此字段,然后url.original即用户访问后端服务接口请求path,http.request和http.response分别对应接口的请求和响应基本信息

例如一个GET的接口/v1/show是一个展示某重要数据的接口,我们想分析下每天这个重要数据被展示了多少次就可以通过以下query和设置Interval:1d来实现: url.original: “/v1/show” AND http.request.method: “GET”

image.png

总结

由于本文主要是想通过nginx access日志数据进行展示,并未介绍Grafana添加mysql或其他数据源的使用,需要的老师请参考Grafana官方文档。