ELK系统分析nginx日志

简介:

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


具体的网络拓扑图如下:

wKioL1keUdTAAta-AAApSxd15-M320.png


具体配置如下:

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)为统一格式:

1
2
3
4
5
6
7
8
9
10
[root@ittestserver1  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,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@ittestserver1  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:

1
2
3
4
[root@ittestserver1  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,测试下脚步是否成功并启动该服务,服务启动后会一直刷日志。

1
2
3
4
5
6
7
8
9
10
11
[root@ittestserver1 log] # /usr/local/logstash/bin/logstash -t -f /usr/local/logstash/etc/nginx-access0518.conf 
Configuration OK
[root@ittestserver1 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: [B@2b2cea68; 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: [B@7788367a; 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: [B@6297d46d; 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

wKiom1keW2LwCSNBAAExkb_5n90367.png



(三)kibana配置

 (1)登录192.168.180.3:5601登录kibana

wKiom1keiKDxkY8CAAGCWRSx8ok843.png


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

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

本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1927520




相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
10月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
901 122
基于docker搭建监控系统&日志收集
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
|
存储 运维 监控
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
|
10月前
|
监控 安全 搜索推荐
使用EventLog Analyzer进行日志取证分析
EventLog Analyzer助力企业通过集中采集、归档与分析系统日志及syslog,快速构建“数字犯罪现场”,精准追溯安全事件根源。其强大搜索功能可秒级定位入侵时间、人员与路径,生成合规与取证报表,确保日志安全防篡改,大幅提升调查效率,为执法提供有力证据支持。
379 0
|
10月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
1211 2
|
应用服务中间件 Linux 网络安全
技术指南:如何把docsify项目部署到基于CentOS系统的Nginx中。
总结 与其他部署方法相比,将docsify项目部署到基于CentOS系统的Nginx中比较简单。以上步骤应当帮助你在不花费太多时间的情况下,将你的项目顺利部署到Nginx中。迈出第一步,开始部署你的docsify项目吧!
505 14
|
监控 安全 NoSQL
【DevOps】Logstash详解:高效日志管理与分析工具
Logstash是ELK Stack核心组件之一,具备强大的日志收集、处理与转发能力。它支持多种数据来源,提供灵活的过滤、转换机制,并可通过插件扩展功能,广泛应用于系统日志分析、性能优化及安全合规等领域,是现代日志管理的关键工具。
1644 0
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
自然语言处理 监控 安全
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
阿里云可观测官方发布了Observable MCP Server,提供了一系列访问阿里云可观测各产品的工具能力,包含阿里云日志服务SLS、阿里云应用实时监控服务ARMS等,支持用户通过自然语言形式查询
1997 0
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志