ELK-filebeat+logstash采集nginx日志

ELK-filebeat+logstash采集nginx日志

文章目录

    • ELK-filebeat+logstash采集nginx日志
  • 前言
  • 采集访问日志
    • 第一种方式:修改nginx访问日志输出格式为json
      • 修改nginx
      • filebeat
      • 修改logstash
      • kibana查看
    • 第二种:使用filebeat模块
      • 修改elasticsearch
      • 修改filebeats

前言

这里直接描述filebeat+logstash采集nginx日志配置,语法介绍小。

采集访问日志

第一种方式:修改nginx访问日志输出格式为json

修改nginx

nxinx输出日志可以修改,内置一些宏可直接使用,具体参考官网
在nginx.conf的http模块下添加

log_format json '{ "@timestamp": "$time_iso8601", '
                         '"time": "$time_iso8601", '
                         '"remote_addr": "$remote_addr", '
                         '"remote_user": "$remote_user", '
                         '"body_bytes_sent": "$body_bytes_sent", '
                         '"request_time": "$request_time", '
                         '"status": "$status", '
                         '"host": "$host", '
                         '"request": "$request", '
                         '"request_method": "$request_method", '
                         '"uri": "$uri", '
                         '"http_referrer": "$http_referer", '
                         '"body_bytes_sent":"$body_bytes_sent", '
                         '"http_x_forwarded_for": "$http_x_forwarded_for", '
                         '"http_user_agent": "$http_user_agent" '
                    '}';

在具体的server模块下添加

access_log  logs/access_json.log  json;

这里的json是上面的日志输出格式.
修改后access_json.log每行输出日志是如下json格式

{ "@timestamp": "2019-03-06T10:10:24+08:00", "time": "2019-03-06T10:10:24+08:00", "remote_addr": "192.168.2.57", "remote_user": "-", "body_bytes_sent": "4912", "request_time": "0.250", "status": "200", "host": "192.168.1.243", "request": "GET /api/projects/templates/folders HTTP/1.1", "request_method": "GET", "uri": "/api/projects/templates/folders", "http_referrer": "http://192.168.1.243:85/", "body_bytes_sent":"4912", "http_x_forwarded_for": "-", "http_user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" }

filebeat

修改filebeat.yml配置文件,在filebeat.inputs添加如下:

- type: log
  enabled: true
  paths:
    - D:\soft\nginx\nginx-1.15.2\logs\access_json.log
  json.keys_under_root: true
  json.overwrite_keys: true
  fields:
    appname: nginx_access

修改logstash

input{
	beats  {
		port => 515
		type=>"beatss"
   	}
}

output{
	if [fields][appname] == "nginx_access"{
		elasticsearch {
			hosts => ["127.0.0.1:9200"]
			index => "nginx-access-%{+YYYY.MM.dd}"
		}
	}
}

kibana查看

结果如下
ELK-filebeat+logstash采集nginx日志_第1张图片

第二种:使用filebeat模块

filebeat自带一些常用应用的模块,位于modules.d目录,带disabled后缀的表示不可使用,去掉就表示或使用。
使用模块的情况下,数据是直接传递给elasticsearch。
请参考官方文档,这里简单记录下

修改elasticsearch

elasticsearch安装插件

sudo bin/elasticsearch-plugin install ingest-geoip
sudo bin/elasticsearch-plugin install ingest-user-agent

安装完后重启

修改filebeats

修改filebeats.yml,配置elasticsearch和kibana

output.elasticsearch:
  hosts: ["myEShost:9200"]
setup.kibana:
  host: "mykibanahost:5601"

执行命令(等于于把modules.d/nginx.yml.disabled后缀disabled去掉)

filebeat.exe modules enable nginx

列出所有模块状态:filebeat modules list
修改nginx.yml

- module: nginx
  access:
    enabled: true
    var.paths: ["D:\\soft\\nginx\\nginx-1.15.2\\logs\\access.log"]
    
  error:
    enabled: true
    var.paths: ["D:\\soft\\nginx\\nginx-1.15.2\\logs\\error.log"]

注意windows系统里使用\

启动:filebeat -e

在elasticsearch里会自动创建一个filebeat+filebeat版本号+当前日期的index

你可能感兴趣的:(ELK)