filebeat收集json格式的nginx程序日志(二)

简介: filebeat收集json格式的nginx日志1.为什么要收集json格式的日志类型由于nginx普通日志收集过来的日志内容都是存在一个字段中的值,我们想单独对日志中的某一项进行查询统计,比如我只想查看某个IP请求了我那些页面,一共访问了多少次,在普通的日志中是无法过滤的,不是很满意

filebeat收集json格式的nginx日志

1.为什么要收集json格式的日志类型

由于nginx普通日志收集过来的日志内容都是存在一个字段中的值,我们想单独对日志中的某一项进行查询统计,比如我只想查看某个IP请求了我那些页面,一共访问了多少次,在普通的日志中是无法过滤的,不是很满意

如下图,可以明显的看出,收集过来的日志信息都是在一块的,不能够根据某一项内容进行查询

因此就需要让filebeat收集json格式日志内容,把日志内容分成不同的字段,也就是Key/value,这样我们就可以根据一个字段去统计这个字段的相关内容了

我们期望日志收集过来是这个样子的

$remote_addr:192.168.81.210
$remote_user:-
[$time_local]:[15/Jan/2021:15:03:39 +0800]
$request:GET /yem HTTP/1.1" 
$status:404 
$body_bytes_sent:3650
$http_referer: -
$http_user_agent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
$http_x_forwarded_for:-

中文格式更是我们期望的

客户端地址:192.168.81.210
访问时间:[15/Jan/2021:15:03:39 +0800]
请求的页面:GET /yem HTTP/1.1" 
状态码:404 
传输流量:3650
跳转来源: -
客户端程序:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
客户端外网地址:-
请求响应时间:-
后端地址:-

2.配置nginx支持json格式的日志输出

1.修改主配置文件
[root@logsj ~]# vim /etc/nginx/nginx.conf
http {
    log_format  main '{"客户端内网地址":"$remote_addr",'
                       '"时间":"$time_iso8601",'
                       '"URL":"$request",'
                       '"状态码":$status,'
                       '"传输流量":$body_bytes_sent,'
                       '"跳转来源":"$http_referer",'
                       '"浏览器":"$http_user_agent",'
                       '"客户端外网地址":"$http_x_forwarded_for",'
                       '"请求响应时间":$request_time,'
                       '"后端地址":"$upstream_addr"}';
}   
2.重启
[root@logsj ~]# nginx  -t
[root@logsj ~]# systemctl reload nginx

日志已经输出为json格式

3.配置filebeat解析json格式的日志

一定要改filebeat配置文件,使其支持json格式的日志解析,否则写入es索引库的时候还是一串字符串,无法识别每个字段的值

1.1.在配置文件增加json格式解析配置
[root@logsj ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  json.keys_under_root: true              
  json.overwrite_keys: true
output.elasticsearch:
  hosts: ["192.168.81.210:9200"]
2.重启filebeat
[root@logsj ~]# systemctl restart filebeat.service 

4.清空之前收集的旧格式数据

一定要清空es之前收集的传统日志格式的数据,还要把nginx日志情况,如果有多台nginx服务器,则改完json格式的日志后,一定要把日志清空,否则将会在kibana中显示两种日志格式

4.1.停掉filebeat

停掉filebeat,不再收集日志

[root@logsj ~]# systemctl stop filebeat.service

4.2.删除es日志索引库

kibana展示的数据都是从es库拿过来的,如果es库不删除重建的,也会是两种格式的数据

4.3.删除kibana的日志索引库

kibana上对应es的日志索引库也需要删除,否则新日志进来后,由于是json格式,很多字段会提示感叹号

点击Managerment—索引模式—索引库—删除

5.配置filebeat指定索引库名称

filebeat每次自动创建的索引都是filebeat-xxx,对应我们生产环境来说不太友好,我们可以自定义索引名称

1.修改配置文件
[root@logsj ~]# vim /etc/filebeat/filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  fields:                     #类似于标签
    index: nginx
  json.keys_under_root: true
  json.overwrite_keys: true
output.elasticsearch:
  hosts: ["192.168.81.210:9200"]
  indices:                          #定义索引名
    - index: "elk-nginx-%{+yyyy.MM.dd}"
      when.equals:                  #与那个标签关联
        fields:
          index: "nginx"  
2.重启
[root@logsj ~]# systemctl restart filebeat

6.kibana创建日志索引库

全部删除完成后就可以启动filebeat并在kibana上创建索引库,展示json格式的日志了

刚才es上的索引库已经建立了,下面去kibana上建立同名的索引进行关联调用,也类似于软连接的效果

点击Managerment—创建索引—索引名称使用通配符形式,与es上的索引进行关联

填写索引名elk-nginx-*之后会列出es上elk-nginx开头的索引库并进行关联

字段选择@timestamp

创建完成

查看json格式收集来的日志数据,已经将每一项内容变成了一个字段值便于查询

7.使用kibana统计json格式的日志

7.1.统计客户端地址为192.168.81.210访问了多少次页面

7.1.1.找到客户端内网地址的字段点击添加

找到下面的客户端内网地址的字段点击ADD即可添加

7.1.2.添加一个筛选器筛选指定的客户端地址

7.1.3.查看数据

点击完保存后即可查询,右上角可以看到总数,中间可以看到具体的日志信息

7.2.统计客户端地址为192.168.81.210访问/jiangxl页面多少次

7.1.添加筛选条件

1)客户端地址为192.168.81.210

筛选的时候选择客户端内网地址字段,在写上匹配的值

2)请求的页面为/jiangxl

筛选URL字段值为/jiangxl HTTP/1.1

7.2.查看统计数据

两个筛选器都勾选后即可字段筛选出统计数据,右上角为总数,中间为具体日志内容

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
7月前
|
JSON 缓存 测试技术
程序出错瞎找?教你写“会说话”的错误日志,秒定位原因
错误日志是排查问题的“导航地图”。本文详解错误三大来源:参数非法、交互故障、逻辑疏漏,并分享写好日志的6大原则——完整、具体、直接、集成经验、格式统一、突出关键字,助你快速定位问题,提升系统可维护性。
537 0
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
926 90
|
10月前
|
JSON 前端开发 应用服务中间件
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据的方案
最后,记得在任何生产环境部署之前,进行透彻测试以确保一切运转如预期。遵循这些战术,守卫你的网络城堡不再是难题。
410 3
|
11月前
|
存储 安全 应用服务中间件
将下载的Nginx证书转换为Tomcat证书格式
好,可以看到,将Nginx证书转换为Tomcat证书的过程就像在烘焙一块蛋糕。你需要准备材料(证书),配备工具(OpenSSL, keytool),按照一定的步骤慎重制作,最后你就拥有了一块可以在浏览器中呈现出漂亮的安全状态的HTTPS蛋糕。就这么简单,明了,没有任何复杂的理论知识,就像在家庭厨房里烘焙的快乐一样。
454 16
|
JSON 人工智能 算法
探索大型语言模型LLM推理全阶段的JSON格式输出限制方法
本篇文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
2203 48
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1373 3
|
JSON 人工智能 API
程序调用大模型返回结构化输出(JSON)
本文介绍了如何使用讯飞星火大模型API,并通过Python封装实现结构化数据输出。首先,通过封装SparkAI类,实现了与讯飞星火API的交互,确保了调用的安全性和便捷性。接着,利用Pydantic库定义了数据模型`CalendarEvent`,确保从大模型获取的回答能够被正确解析成预设的结构化JSON格式,从而解决了大模型回答不规范的问题。示例代码展示了如何构造请求、接收并解析响应,最终输出结构化的活动信息。
1966 5
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
582 3
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释

热门文章

最新文章