ELK之日志收集filebeat,并对nginx,tomcat access日志JSON格式化

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一:ELK日志收集器组件filebeat下载

  • 官方下载地址:https://www.elastic.co/downloads/beats/filebeat
  • 官方文档地址:https://www.elastic.co/guide/en/beats/filebeat/current/index.html

二:filebeat 配置说明 filebeat.yml

2.1 input plugin 配置说明

`- type: log
# 是否生效该配置
enabled: true 
# 读取文件的路径,可以多个
paths: 
-C:\Users\Administrator\.IntelliJIdea2017.1\system\tomcat\Unnmed_jjj\logs\localhost_access_log.*.txt
- D:\programFiles\nginx-1.13.6\logs\host.access.log
# 字符行是json格式,如下配置
# json 所有的key 是否在顶级key(json)下
  json.keys_under_root: true
# 如果外部存在key,是否覆盖
  json.overwrite_keys: true
# 是否添加错误key,如解析出错,会添加解析错误信息
  json.add_error_key: true
# 添加message 的key
  json.message_key: log

2.2 output plugin 配置说明

2.2.1 开启ElasticSearch输出

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
   #Array of hosts to connect to.
  #hosts: ["localhost:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

2.2.2 开启Logstash输出

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["127.0.0.1:4560"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

三:统一发送JSON结构定义:

字段名称 字段类型 字段说明
localIp string 本地服务ip
status string 请求状态
method string 请求方法
url string 请求地址
reqIp string 请求客户端ip
port string 端口
duration string 请求时长
reqTime string 请求时间
serviceType string 服务容器类型,nginx,tomcat...

四:nginx access 日志json格式化配置

字段 说明
request_time 整个请求的总时间,以秒为单位
status 记录请求返回的http状态码,比如成功是200。
upstream_status upstream状态,比如成功是200.
body_bytes_sent 发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量
remote_addr 远程客户端的IP地址。
request 请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
http_referer 记录从哪个页面链接访问过来的(请求头Referer的内容 )
http_user_agent 客户端浏览器信息(请求头User-Agent的内容 )
http_x_forwarded_for 客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加
upstream_response_time 请求过程中,upstream的响应时间,以秒为单位
upstream_addr upstream的地址,即真正提供服务的主机地址
remote_user 远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。

在nginx.conf 配置文件,配置如下:

http {
	·····
	log_format  main '{"localIp":"$http_host","status":"$status","method":"$request_method","url":"$request","reqIp":"$remote_addr","port":"","duration":"$request_time","reqTime":"[$time_local]","serviceType":"nginx"}';
	access_log  logs/access.log  main;
	server {
		·····
		access_log  logs/host.access.log  main;
		·····
	}
}

五:tomcat access 日志json格式化配置

字段 说明
%a 远端IP
%A 本地IP
%b 发送的字节数,不包含HTTP头,如果为0,使用”-”
%B 发送的字节数,不包含HTTP头
%h 远端主机名(如果resolveHosts=false),远端的IP
%H 请求协议
%l 从identd返回的远端逻辑用户名,总是返回’-’
%m 请求的方法
%p 收到请求的本地端口号
%q 查询字符串
%r 请求的第一行
%s 响应的状态码
%S 用户的sessionID
%t 日志和时间,使用通常的log格式
%u 认证以后的远端用户(如果存在的话,否则为’-’)
%U 请求的URI路径
%v 本地服务器的名称
%D 处理请求的时间,以毫秒为单位
%T 处理请求的时间,以秒为单位

在server.xml 配置文件,配置如下:

  

转载于:https://my.oschina.net/u/2317145/blog/3000201

你可能感兴趣的:(ELK之日志收集filebeat,并对nginx,tomcat access日志JSON格式化)