基于ELK Nginx日志分析
配置Nginx 日志
Nginx 默认的access 日志为log格式,需要logstash 进行正则匹配和清洗处理,从而极大的增加了logstash的压力 所以我们Nginx 的日志修改为json 格式 。
Nginx access 日志和 Nginx error 日志
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format json '{"@timestamp":"$time_iso8601",'
'"server_addr":"$server_addr",'
'"hostname":"$hostname",'
'"remote_add":"$remote_addr",'
'"request_method":"$request_method",'
'"scheme":"$scheme",'
'"server_name":"$server_name",'
'"http_referer":"$http_referer",'
'"request_uri":"$request_uri",'
'"args":"$args",'
'"body_bytes_sent":$body_bytes_sent,'
'"status": $status,'
'"request_time":$request_time,'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_addr":"$upstream_addr",'
'"http_user_agent":"$http_user_agent",'
'"https":"$https"'
'}';
access_log /var/log/nginx/access.log json;
针对不同的虚拟主机配置Nginx日志
access_log /var/log/nginx/80.access.log json;
error_log /var/log/nginx/80.error.log error;
access_log /var/log/nginx/8001.access.log json;
error_log /var/log/nginx/8001.error.log error;
Nginx error_log 类型
[ debug | info | notice | warn | error | crit ]
例如:error_log /var/log/nginx/8001.error.log crit;
解释:日志文件存储在/var/log/nginx/8001.error.log 文件中,错误类型为 crit ,也就是记录最少错误信息(debug最详细 crit最少);
filebeat 配置
针对*.access.log 和 *.error.log 的日志进行不同的标签封装
[root@elk-node1 nginx]# egrep -v "*#|^$" /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.access.log
tags: ["nginx.access"]
- type: log
paths:
- /var/log/nginx/*.error.log
tags: ["nginx.error"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.logstash:
hosts: ["192.168.99.186:6044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
logstash 配置
查看logstash 安装已经安装插件
/usr/share/logstash/bin/logstash-plugin list
[root@elk-node2 ~]#/usr/share/logstash/bin/logstash-plugin list |grep geoip
logstash-filter-geoip
/usr/share/logstash/bin/logstash-plugin install logstash-filter-geoip
Nginx 日志清洗规则
[root@elk-node2 ~]# cat /etc/logstash/conf.d/nginx.conf
input {
beats {
port => 6044
}
}
filter {
if "nginx.access" in [tags] {
json {
source => "message"
remove_field => "message"
}
date {
match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
useragent {
target => "agent"
source => "http_user_agent"
}
geoip {
#target => "geoip"
source => "remote_add"
fields => ["city_name", "country_code2", "country_name", "region_name","longitude","latitude","ip"]
add_field => ["[geoip][coordinates]","%{[geoip][longitude]}"]
add_field => ["[geoip][coordinates]","%{[geoip][latitude]}"]
}
mutate {
convert => ["[geoip][coordinates]","float"]
}
}
else if "nginx.error" in [tags] {
mutate {
remove_field => ["@timestamp"]
}
grok {
match => {"message" => "(?<datetime>%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage}(?:, client: (?<real_ip>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:domain}?)(?:, request: %{QS:request})?(?:, upstream: (?<upstream>\"%{URI}\"|%{QS}))?(?:, host: %{QS:request_host})?(?:, referrer: \"%{URI:referrer}\")?"}
}
date {
match => ["datetime", "yyyy/MM/dd HH:mm:ss"]
target => "@timestamp"
}
mutate {
remove_field => ["message"]
}
}
}
output{
stdout{codec => rubydebug}
if "nginx.access" in [tags]{
elasticsearch{
index => "logstash-nginx.access-%{+YYYY.MM.dd}"
hosts => ["192.168.99.186:9200"]
}
}
else if "nginx.error" in [tags]{
elasticsearch {
index => "nginx.error-%{+YYYY.MM.dd}"
hosts => ["192.168.99.186:9200"]
}
}
}
注意:source 可以是任意处理后的字段,需要注意的是 IP 必须是公网 IP,否则logstash 的返回的geoip字段为空
Logstash解析
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
filebeat 传入
filter
grok:数据结构化转换工具
match:匹配条件格式
geoip:该过滤器从geoip中匹配ip字段,显示该ip的地理位置
source:ip来源字段
target:指定插入的logstash字段目标存储为geoip
add_field: 增加的字段,坐标经度
add_field: 增加的字段,坐标纬度
mutate:数据的修改、删除、类型转换
convert:将坐标转为float类型
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那里添加索引时的名称
Kibana 配置
注意:默认配置中Kibana的访问日志会记录在/var/log/message 中,使用logging.quiet参数关闭日志
[root@elk-node1 nginx]# egrep -v "*#|^$" /etc/kibana/kibana.yml
server.port: 5601
server.host: "192.168.99.185"
elasticsearch.hosts: ["http://192.168.99.185:9200"]
kibana.index: ".kibana"
logging.quiet: true
i18n.locale: "zh-CN"
tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
配置“tilemap.url:”参数使Kibana使用高德地图
基于ELK Nginx日志分析的更多相关文章
- ELK - nginx 日志分析及绘图
1. 前言 先上一张整体的效果图: 上面这张图就是通过 ELK 分析 nginx 日志所得到的数据,通过 kibana 的功能展示出来的效果图.是不是这样对日志做了解析,想要知道的数据一目了然.接下来 ...
- 基于ELK的日志分析、存储、展示
原文:https://blog.51cto.com/11134648/2163789 ELK简介 ELK是一套完整的日志解决方案,由ElasticSearch.Logstash. Kibana这三款开 ...
- ELK+redis搭建nginx日志分析平台
ELK+redis搭建nginx日志分析平台发表于 2015-08-19 | 分类于 Linux/Unix | ELK简介ELKStack即Elasticsearch + Logstas ...
- 使用elk+redis搭建nginx日志分析平台
elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...
- 使用elk+redis搭建nginx日志分析平台(引)
http://www.cnblogs.com/yjf512/p/4199105.html elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎 ...
- [原创]ubuntu14.04部署ELK+redis日志分析系统
ubuntu14.04部署ELK+redis日志分析系统 [环境] host1:172.17.0.4 搭建ELK+redis服务 host2:172.17.0.3 搭建logstash+nginx服务 ...
- ELK + Filebeat 日志分析系统
ELK + Filebeat 日志分析系统 架构图 环境 OS:CentOS 7.4 Filebeat: 6.3.2 Logstash: 6.3.2 Elasticsearch 6.3.2 Kiban ...
- 手把手教你搭建 ELK 实时日志分析平台
本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...
- nginx日志分析利器GoAccess
面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...
随机推荐
- 免费SSL证书申请及部署实践
网络上关于如何签发免费SSL证书的博文一大片,但是真正操作起来的能让新手不迷惑的却很少,很多操作步骤受限于国内无法访问外网的阻碍,导致无法真正实施成功. 实际上,关于申请免费SSL证书主要涉及两大部分 ...
- Java核心知识体系2:注解机制详解
1 Java注解基础 注解是JDK1.5版本开始引入的一个特性,用于对程序代码的说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解. 它主要的作用有以下四方面: 生成javadoc文档,通过 ...
- DP问题大合集
引入 动态规划(Dynamic Programming,DP,动规),是求解决策过程最优化的过程.20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了 ...
- mybatis-plus时间字段自动填充
时间代码自动填充的2种方式 数据库方式 将数据库字段create_time和update_time设置CURRENT_TIMESTAMP,create_time字段后面不需要勾选更新,update_t ...
- SpringBoot 集成 FreeMarker 导出 Word 模板文件(底部附源码)
思路解说 word 模板文件(doc 或 docx 文件)另存为 xml 文件 将后缀 xml 改成 html:大部分文档会改成 ftl(FreeMarker 的后缀名),因为 word 文件另存为 ...
- 利用CSS3自定义属性来为网站添加“暗黑模式”(暗色模式/DarkMode)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_114 究竟什么是暗黑模式?这个概念起初来源于macOS系统,该系统的mojave版本为用户提供两个主题皮肤,即浅色和深色的皮肤.自 ...
- 8月份的.NET Conf 活动 专注于 .NET MAUI
.NET Conf:Focus on MAUI 是一个为期一天的免费直播活动,将于太平洋时间 8 月 9 日上午 9 点开始,来自社区和 Microsoft 团队的演讲者们将分享使用MAUI .了解. ...
- 海豚调度5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑
当今许多企业都有着技术架构的DataOps程度不够.二次开发成本高.迁移成本高.集群部署混乱等情况,团队在技术选型之后发现并不适合自己的需求,但是迁移成本和难度又比较大,甚至前团队还留下了不少坑,企业 ...
- 【JAVA UI】HarmonyOS 如何使用TinyPinyin类库
参考资料 前言:TinyPinYin是一个适用于Java和Android.HarmonyOS的快速,低内存的汉字转拼音库.码云地址TinyPinYin,其使用方法已在API讲解中有详细介绍,本文 ...
- df空间满,du找不到文件的问题
最近看了一下问题: df -h Filesystem Size Used Avail Use% Mounted on rootfs 271G 267G 2.2G 100% / 根分区满了,du 找不到 ...