首页 > 系统相关 >Filebeat收集Nginx日志

Filebeat收集Nginx日志

时间:2023-10-24 22:05:30浏览次数:37  
标签:Filebeat log nginx filebeat access Nginx json 日志

4.1 为什么收集Nginx日志

我们需要获取用户的信息,比如:来源的IP是哪个地域,网站的PV、UV、状态码、访问时间等等;所以需要收集 Nginx 日志;

4.2 Nginx日志收集架构图

Filebeat收集Nginx日志_Nginx

4.3 Nginx日志收集实践

4.3.1 安装Nginx

yum install nginx -y

cat /etc/nginx/conf.d/elk.conf
server {
	listen 5555;
	server_name elk.bertwu.net;
	location / {
		root /code;
		index index.html;
		}
}

systemctl start nginx

4.3.2 配置filebeat

配置Filebeat,收集本机Nginx日志

cat filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths: /var/log/nginx/access.log

output.elasticsearch:
  hosts: ["172.16.1.161:9200","172.16.1.162:9200","172.16.1.163:9200"]
  index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称

setup.ilm.enabled: false
setup.template.name: "nginx"       #定义模板名称
setup.template.pattern: "nginx-*"  #定义模板的匹配索引名称

systemctl restart filebeat

4.3.3 kibana展示

Filebeat收集Nginx日志_Nginx_02

4.4 Nginx Json日志收集实践

4.4.1 收集问题

我们实现了 Nginx 日志的收集,但是所有的数据都在 message 字段中,无法满足分析的需求,比如:
   需要统计状态码的情况;
   统计所有请求总产生的流量大小;
   统计来源使用的客户端;等等
这些是没有办法实现的

4.4.2 解决方案

需要将日志中的每一个选项都拆分出来,拆分成 key-value 的形式,那么就需要借助 json 的格式。

4.4.3 配置Json

1.重置nginx日主格式为json格式
log_format json '{ "time_local": "$time_local",'
                        '"remote_addr": "$remote_addr",'
                        '"referer": "$http_referer",'
                        '"request": "$request",'
                        '"status": $status,'
                        '"bytes": $body_bytes_sent,'
                        '"test_agent": "$http_user_agent",'
                        '"x_forwarded": "$http_x_forwarded_for",'
                        '"up_addr": "$upstream_addr",'
                        '"up_host": "$upstream_http_host",'
                        '"upstream_time": "$upstream_response_time",'
                        '"request_time": "$request_time"'
                        '}';

2.重新配置nginx.conf
cat /etc/nginx/conf.d/elk.conf 
server {
	listen 5555;
	server_name elk.bertwu.net;
	access_log  /var/log/nginx/access.log  json; # 定义日志格式为json
	location / {
		root /code;
		index index.html;
		}
}

3.重新配置filebeat文件
[root@web01 filebeat]# cat filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths: /var/log/nginx/access.log
  json.keys_under_root: true  # Flase会将json解析的格式存储至messages,改为true则不存储至
  json.overwrite_keys: true  #覆盖默认message字段,使用自定义json格式的key
output.elasticsearch:
  hosts: ["172.16.1.161:9200","172.16.1.162:9200","172.16.1.163:9200"]
  index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称
setup.ilm.enabled: false
setup.template.name: "nginx"       #定义模板名称
setup.template.pattern: "nginx-*"  #定义模板的匹配索引名称

4.重启filebeat、Nginx,然后清空日志,在重新产生json格式的日志
systemctl restart nginx
systemctl restart filebeat
> /var/log/nginx/access.log

Filebeat收集Nginx日志_nginx_03

4.5 Nginx多个日志收集实践

nginx 存在访问日志和错误日志,那么如何使用filebeat 同时收集 nginx 的访问日志、错误日志;
我们希望的状态如下:
nginx访问日志 --存储–> nginx-access-xxx 索引
nginx错误日志 --存储–> nginx-error-xxx 索引

Filebeat收集Nginx日志_Nginx_04

1.配置 filebeat 收集多个日志,需要通过 tags 标签进行区分;
cat filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths: /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]
- type: log
  enabled: true
  paths: /var/log/nginx/error.log
  tags: ["error"]
output.elasticsearch:
  hosts: ["172.16.1.161:9200","172.16.1.162:9200","172.16.1.163:9200"]
  indices:
    - index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称
      when.contains: 
        tags: "access"
    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "error"
setup.ilm.enabled: false           #索引生命周期ilm功能默认开启,开启情况下索引名称只能为filebeat-*
setup.template.name: "nginx"       #定义模板名称
setup.template.pattern: "nginx-*"  #定义模板的匹配索引名称

2.重启filebeat
systemctl restart filebeat

3.使用kibana添加nginx错误日志索引,然后展示数据

Filebeat收集Nginx日志_json_05

4.6 Nginx多虚拟主机收集实践

Nginx 如果有多个站点;filebeat 该如何收集多个域名的访问日志

Filebeat收集Nginx日志_json_06

1.配置nginx多站点
[root@web01 ~]# cat /etc/nginx/conf.d/elk.conf 
server {
	listen 5555;
	server_name elk.qingchen.net;
	access_log  /var/log/nginx/access.log  json;
	location / {
		root /code;
		index index.html;
		}
}
server {
  listen 5555;
  server_name blog.qingchen.net;
  access_log  /var/log/nginx/blog.log  json;
  location / {
    root /code;
    index index.html;
    }
}
server {
  listen 5555;
  server_name www.qingchen.net;
  access_log  /var/log/nginx/www.log  json;
  location / {
    root /code;
    index index.html;
    }
}

2.配置filebeat
cat filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths: /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]

- type: log
  enabled: true
  paths: /var/log/nginx/error.log
  tags: ["error"]

- type: log
  enabled: true
  paths: /var/log/nginx/www.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-www"]

- type: log
  enabled: true
  paths: /var/log/nginx/blog.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-blog"]
output.elasticsearch:
  hosts: ["172.16.1.161:9200","172.16.1.162:9200","172.16.1.163:9200"]
  indices:
    - index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称
      when.contains: 
        tags: "access"
    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "error"
    - index: "nginx-www-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-www"
    - index: "nginx-blog-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-blog"
setup.ilm.enabled: false
setup.template.name: "nginx"       #定义模板名称
setup.template.pattern: "nginx-*"  #定义模板的匹配索引名称

Filebeat收集Nginx日志_Nginx_07

标签:Filebeat,log,nginx,filebeat,access,Nginx,json,日志
From: https://blog.51cto.com/u_13236892/8010179

相关文章

  • 关于Nginx缓存
    Nginx缓存一般情况下系统用到的缓存有三种服务端缓存:缓存存在后端服务器,如redis代理缓存:缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地客户端缓存:缓存在浏览器什么时候会出现304?服务器响应中包含有ETag和last-modified,浏览器下次去请求时会发送这两个标签,......
  • .net 日志系统
    一、在.net中使用日志系统1//可以直接写LogingProvider2services.AddLoging(builder=>{3builder.AddConsole();//consolelog4...5}); 二、文本日志 .net没有提供文本日志,使用第三方的日志库。日志文件按照日期区分,避免单个日志文件过大。限制日志总......
  • 【ChatGPT系列】Python自定义打印各种颜色的日志
    如何在控制台和文件中同时输出日志?要将日志同时输出到文件和控制台,可以创建并配置一个额外的StreamHandler,然后将其添加到Logger中。下面是一个示例代码,演示如何将日志同时输出到文件和控制台:importlogging#创建Logger对象logger=logging.getLogger("example_logger")......
  • springboot日志配置
    目录logback知识链接......
  • nginx unit WebAssembly 试用
    nginxunit已经支持WebAssembly,刚好体验下环境准备基于docker运行unit,对于wasm的开发基于rust,实际上测试直接试用了官方的示例代码docker-composeversion:"3"services:app:image:unit:1.31.1-wasmports:-8080:8080......
  • 记录一下nginx遇到的问题
    nginx将ip配置成https,如:https://192.168.1.1/,以及nginx.conf中proxy_pass转发的配置记录。将ip配置httpsnginx:[emerg]no"ssl_certificate"isdefinedforthe"listen...ssl"directivein/usr/local/nginx/conf/conf.d/upstream.conf:14意思是ssl_certificate没有配置,可......
  • Zephyr重定向日志打印到USB串口
    nRF52840DK开发板的例程大多数是从硬件串口打印日志,然后硬件串口在开发板上通过Jlink转换为USB串口,最后打印到电脑上。这里给出通过52840自己的USB串口打印日志的方法。以zephyr/samples/hello_world例程为例:修改config#使能串口驱动CONFIG_SERIAL=y#使能串口的中断模式(......
  • oracle打开/关闭归档日志ARCHIVELOG
    1.使用SQLPlus登录用户名:sqlplus密码:assysdba 2.查询数据库是否是归档模式:查询结果为“ARCHIVELOG”表示数据库为归档模式SELECTlog_modeFROMv$database;3.关闭数据库shutdownimmediate;4.启动数据库mount模式startupmount;5.启动归档日志alte......
  • centos安装nginx
    目录1、下载安装包2、安装nginx2.1、安装依赖库2.2、安装nginx包2.2.1、解压安装包2.2.2、拷贝文件到/usr/local目录2.2.3、检测当前系统环境2.2.4、编译2.2.5、安装3、配置nginx开机启动4、测试 1、下载安装包官网下载wgethttp://nginx.org/downl......
  • CDN+Nginx反向代理来隐藏c2地址
    思路:通过借助CDN和Nginx反向代理和HTTPS来隐藏真实c2服务器Nginx反向代理:通过Nginx对外部流量转发到本地,再设置防火墙只允许localhost访问cs端口达到IP白名单的效果准备在这个实验环境中,我们需要准备服务器两台(一台服务端、一台靶机)、CDN运营商(这里用的是cloudflare)、域名一......