ELK系统分析nginx日志

ELK系统在安装完成后需要处理相关的日志文件,本文主要对nginx日志文件进行处理并进行可视化操作,来满足日常的业务需求,长话短说,接下来介绍我的环境

具体的网络拓扑图如下:

具体配置如下:

server OS Version IP 备注
logstash  CentOS release 6.4 (Final) logstash 2.2.2 192.168.180.2 logstash客户端用来收集日志
elasticsearch CentOS release 6.4 (Final) elasticsearch  2.2.1 192.168.180.3
kibana CentOS release 6.4 (Final) kibana 4.4.2 192.168.180.3

具体步骤如下:

(一)配置nginx服务器日志的格式( log_format)为统一格式:

[[email protected] local]# vim /usr/local/nginx2/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    #include       proxy.conf;
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;
    access_log  logs/access.log  main;
    access_log on;

(二)安装配置logstash:

1, 安装步骤省略具体参考上篇文章

2,配置如下:

[[email protected] local]# vim /usr/local/logstash/etc/nginx-access0518.conf 
input {
        file {
                path => "/usr/local/nginx2/logs/access.log"
                type => "nginx-access"
                start_position => "beginning"
                sincedb_path => "/usr/local/logstash/sincedb"
                codec => "json"
        }
}
filter {
        if [type] == "nginx-access" {
                geoip {
                        source => "clientip"
                        target => "geoip"
                        database => "/usr/local/logstash/etc/GeoLiteCity.dat"
                        add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                        add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
                }
                mutate {
                        convert => [ "[geoip][coordinates]", "float"]
                }
        }
}
output {
        if [type] == "nginx-access" {
                elasticsearch {
                        hosts => ["192.168.180.3:9200"]
                        manage_template => true
                        index => "logstash-nginx-access-%{+YYYY-MM}"
                }
        }
}

具体解释如下:

Logstash 分为 Input、Output、Filter、Codec 等多种plugins。
Input:数据的输入源也支持多种插件,如elk官网的beats、file、graphite、http、kafka、redis、exec等等等、、、
Output:数据的输出目的也支持多种插件,如本文的elasticsearch,当然这可能也是最常用的一种输出。以及exec、stdout终端、graphite、http、zabbix、nagios、redmine等等、、、
Filter:使用过滤器根据日志事件的特征,对数据事件进行处理过滤后,在输出。支持grok、date、geoip、mutate、ruby、json、kv、csv、checksum、dns、drop、xml等等、、
Codec:编码插件,改变事件数据的表示方式,它可以作为对输入或输出运行该过滤。和其它产品结合,如rubydebug、graphite、fluent、nmap等等。
具体以上插件的细节可以去官网,介绍的挺详细的。下面说下该篇中的配置文件的含义:

input段:
    file:使用file 作为输入源
  path: 日志的路径,支持/var/log*.log,及[ "/var/log/messages", "/var/log/*.log" ] 格式
  start_position: 从文件的开始读取事件。另外还有end参数

filter段:
 grok:数据结构化转换工具
  match:匹配条件格式,将nginx日志作为message变量,并应用grok条件NGINXACCESS进行转换
 geoip:该过滤器从geoip中匹配ip字段,显示该ip的地理位置
  source:ip来源字段,这里我们选择的是日志文件中的最后一个字段,如果你的是默认的nginx日志,选择第一个字段即可
  target:指定插入的logstash字断目标存储为geoip
  database:geoip数据库的存放路径
  add_field: 增加的字段,坐标经度
  add_field: 增加的字段,坐标纬度
 mutate: 数据的修改、删除、型转换
  convert: 将坐标转为float类型
  convert: http的响应代码字段转换成 int
  convert: http的传输字节转换成int
  replace: 替换一个字段
  remove_field: 移除message 的内容,因为数据已经过滤了一份,这里不必在用到该字段了。不然会相当于存两份
 date: 时间处理,该插件很实用,主要是用你日志文件中事件的事件来对timestamp进行转换,导入老的数据必备!在这里曾让我困惑了很久哦。别再掉坑了
  match:匹配到timestamp字段后,修改格式为dd/MMM/yyyy:HH:mm:ss Z
 mutate:数据修改
  remove_field: 移除timestamp字段。

output段:
 elasticsearch:输出到es中
  host: es的主机ip+端口或者es 的FQDN+端口
  index: 为日志创建索引logstash-nginx-access-*,这里也就是kibana那里添加索引时的名称

3,创建logstash配置文件之后,我们还要去建立grok使用的表达式,因为logstash 的配置文件里定义的使用转换格式语法,先去logstash的安装目录,默认安装位置:/usr/local/logstash/下,在该位置创建一个目录patterns:

[[email protected] local]# mkdir -pv /usr/local/logstash/patterns
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:remote_addr} - - \[%{HTTPDATE:time_local}\] "%{WORD:method} %{URIPATHPARAM:request} HTTP/% {NUMBER:httpversion}" %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent

4,测试下脚步是否成功并启动该服务,服务启动后会一直刷日志。

[[email protected] log]# /usr/local/logstash/bin/logstash -t -f /usr/local/logstash/etc/nginx-access0518.conf 
Configuration OK
[[email protected] log]# /usr/local/logstash/bin/logstash  -f /usr/local/logstash/etc/nginx-access0518.conf 

nux; Android 5.1.1; R7Plusm Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.9 TBS/036906 Safari/537.36 hsp\" \"-\"", :level=>:error}
JSON parse failure. Falling back to plain-text {:error=>#<LogStash::Json::ParserError: Unexpected character (‘.‘ (code 46)): Expected space separating root-level values
 at [Source: [[email protected]; line: 1, column: 9]>, :data=>"175.155.181.151 - - [12/Jan/2017:01:28:05 +0800] \"GET /resources/images/m/landing/landingm20161221/header.png HTTP/1.1\" 200 233816 \"https://m.guojinbao.com/landingm.html?s=NDg4MDU2\" \"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143\" \"-\"", :level=>:error}
JSON parse failure. Falling back to plain-text {:error=>#<LogStash::Json::ParserError: Unexpected character (‘.‘ (code 46)): Expected space separating root-level values
 at [Source: [[email protected]; line: 1, column: 8]>, :data=>"223.67.223.215 - - [12/Jan/2017:01:28:05 +0800] \"GET /resources/js/Crypto.js HTTP/1.1\" 200 8703 \"https://m.guojinbao.com/landingm.html?s=MzIxODQ=\" \"Mozilla/5.0 (Linux; Android 5.1.1; R7Plusm Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.9 TBS/036906 Safari/537.36 hsp\" \"-\"", :level=>:error}
JSON parse failure. Falling back to plain-text {:error=>#<LogStash::Json::ParserError: Unexpected character (‘.‘ (code 46)): Expected space separating root-level values
 at [Source: [[email protected]; line: 1, column: 8]>, :data=>"223.67.223.215 - - [12/Jan/2017:01:28:05 +0800] \"GET /resources/images/m/landing/landingm20161221/btn1.png HTTP/1.1\" 200 10194 \"https://m.guojinbao.com/resources/css/landingm20161221.css\" \"Mozilla/5.0 (Linux; Android 5.1.1; R7Plusm Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.9 TBS/036906

(三)kibana配置

(1)登录192.168.180.3:5601登录kibana

(2),添加一个索引,这个索引的名字就是之前导入的ES中的那个,本文中是logstash-nginx-access-*。

查看索引,目前有三个,设置为加星,即是discover默认突出显示的。

(3)点击discover既可以看到我们所导入的日志数据了,

时间: 2024-08-23 16:19:00

ELK系统分析nginx日志的相关文章

利用 ELK系统分析Nginx日志并对数据进行可视化展示

一.写在前面 结合之前写的一篇文章:Centos7 之安装Logstash ELK stack 日志管理系统,上篇文章主要讲了监控软件的作用以及部署方法.而这篇文章介绍的是单独监控nginx 日志分析再进行可视化图形展示,并在用户前端使用nginx 来代理kibana的请求响应,访问权限方面暂时使用HTTP 基本认证加密用户登录.(关于elk权限控制,我所了解的还有一种方式-Shield),等以后有时间了去搞下.下面开始正文吧... 注意:环境默认和上一篇大致一样,默认安装好了E.L.K.3个软

ELK对nginx日志进行流量监控

ELK对nginx日志进行流量监控 一.前言 线上有一套ELK单机版,版本为5.2.1.现在想把nginx访问日志接入到elk里,进行各个域名使用流量带宽的统计分析.要把nginx日志传输到elk上,可以在存有nginx日志的服务器上使用logstash或者filebeat.但是因为logstash是jvm跑的,资源消耗比较大,启动一个logstash就需要消耗500M左右的内存(这就是为什么logstash启动特别慢的原因),而filebeat只需要10来M内存资源,所以最终决定使用fileb

ELK分析nginx日志

开源实时日志分析 ELK 平台能够完美的解决我们上述的问题, ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products l   Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等. l   Logstash 是一个完全开源的工具,他可以对你的日志进行收集.分析,

ELK 分析nginx日志文件

注意:修改配置后建议重新创建index 1.nginx 日志文件格式 log_format elk "$http_clientip | $http_x_forwarded_for | $time_local | $request | $status | $body_bytes_sent | "  "$request_body | $content_length | $http_referer | $http_user_agent | "  "$http_c

ELK分析nginx日志(2)

目录 1.ES基本操作 ES&kibana 索引操作 增删改查 3.nginx 自定义提取字段 去除字段 时间轴 1.ES基本操作 Elasticsearch的概念 索引 ->类似于Mysql中的数据库 类型 ->类似于Mysql中的数据表 文档 ->存储数据 ES&kibana 测试Web接口 浏览器访问 Kibana操作:GET /出现下图所示的效果,说明kibana和ES联动成功. 索引操作 //创建索引 PUT /zhang //删除索引: DELETE /zha

ELK收集nginx日志并用高德地图展示出IP

(一)测试的环境 agentd:192.168.180.22 ES:192.168.180.23 kibana:192.168.180.23 采用的拓扑:logstash -->ES-->kibana (二)实施步骤: (1)logstsh具体配置: 1,配置nginx日志格式,采用log_format格式: log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '          

elk收集nginx日志

一 :客户端logstash.conf配置文件 input { file { path => "/usr/local/nginx/logs/access.log" type => "nginxlog" start_position => "beginning" # sincedb_path => "/home/logstash/sincdb.nginxlog" } } filter{ if [type]

Filebeat +Redis+ELK处理Nginx日志系统

(一)简述: filebeat:具有日志收集功能,是下一代的Logstash收集器,但是filebeat更轻量,占用资源更少,适合客户端使用. redis:Redis 服务器通常都是用作 NoSQL 数据库,不过 logstash 只是用来做消息队列. logstash:主要是用来日志的搜集.分析.过滤日志的工具,支持大量的数据获取方式.一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤.修改等操作在一并发往elasticsearch

centos6.5下安装配置ELK及收集nginx日志

Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash 是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索) kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总.分析和搜索重要数据日志. 环境:192.168.50.119