Nginx有两套日志,一套access.log一套error.log,access.log用户可以自定义,两套日志处理好,业务的质量就了然于心了,另外,日志关键指标可视化分析我认为是运维中最重要的事情了,没有之一。

对于后期的可视化监控,核心观点两个字“收敛”,工具用grafana,把最有用的关键指标放到dashboard上,我线上设计的一个版面如下,由于日志量大,200 ok的日志基本不看,所以结合filebeat只收集了一套异常日志,异常日志定义为状态码非200或者响应时间大于0.5秒,里面要考虑几个点:

1、要用日志时间建es索引,便于分析排障;

2、数据字段要转化为数据类型,便于计算;

3、Dashbord考虑质量、性能、错误3个维度内容;

4、为了方便聚合分析,url要把问号前的接口拆出来,比如/v1/feedback/check_regid_valid?regId=DmuZXBoN4nRulcjmZczGw1fZLya151h7%2BtY0%2FgoM6qwllq%2BR723oL8fK9Wahdxee&packageName=com.tencent.news&appId=2882303761517336368,拆成/v1/feedback/check_regid_valid,后面一堆参数可处理可不处理,后面会写一下如果处理可以继续拆一下k/v;

5、grafana要动态可选业务类型、机房、机器、响应时间等信息,便于钻取分析。

对于access.log

原始日志如下(我用上撇做的分隔)

#access.log
10.132.10.29`api.xmpush.xiaomi.com`103.107.217.171`-`14/May/2019:00:00:01 +0800`/v1/feedback/check_regid_valid?regId=46quGCb9wT89VV2XzUW89bORMmralBlKriPnZbeAmIzF2nABHj
LJKCI8%2FF0InyHR&packageName=com.smile.gifmaker&appId=2880376151713534`325`332`0.009`200`10.132.50.2:9085`-`0.009`GET`okhttp/3.12.1`200`lT666Qlxdq6G6iUqt/G3FrQ==

logstash清洗规则如下

filter {ruby {init => "@kname = ['server_addr','domain','remote_addr','http_x_forwarded_for','time_local','request_uri','request_length','bytes_sent','request_time','status','upstream_addr','upstream_cache_status','upstream_response_time','request_method','http_user_agent','upstream_status','key']"code => "event.append(Hash[@kname.zip(event['message'].split('`'))])"}#将api接口拆开if [request_uri] {grok {match => ["request_uri","%{DATA:api}(\?%{DATA:args})?$"]}}#用日志时间建立索引,把无用字段去掉date {match => ["time_local", "dd/MMM/yyyy:HH:mm:ss Z"]target => "@timestamp"remove_field => ["time_local","message","path","offset","prospector","[fields][ttopic]","[beat][version]","[beat][name]"]}#把类型从字符型转为数字型mutate {convert => ["request_length" , "integer","status" , "integer","upstream_response_time" , "float","request_time" , "float","bytes_sent" , "integer" ]}
}output {#再次判断一下只收集处理异常日志if [status] != 200 or [request_time] > 1  {  elasticsearch {hosts  => ["1.1.1.1:9220","2.2.2.2:9220","3.3.3.3:9220"]#workers => 4index => "logstash-im-push-mt-nginx-access-%{+YYYY.MM.dd.hh}"}}  #某几台机器收集全量日志,用于抽样整体情况了解else if [beat][hostname] == 'c4-hostname01.bj' or [beat][hostname] == 'c4-hostname02.bj' {elasticsearch {hosts  => ["1.1.1.1:9220","2.2.2.2:9220","3.3.3.3:9220"]#workers => 4index => "logstash-im-push-mt-nginx-access-%{+YYYY.MM.dd.hh}"}}#stdout { codec => rubydebug }
}

清洗后的一个截图如下,满足需求

对于error.log

原始日志如下

#error.log  有很多种,这里只写一条,后面正则会做全部匹配
2019/05/14 10:28:16 [error] 13655#0: *3199 connect() failed (111: Connection refused) while connecting to upstream, client: 47.111.97.155, server: api.xmpush.xiaomi.co
m, request: "POST /v2/message/regid HTTP/1.1", upstream: "http://10.132.28.28:9085/v2/message/regid", host: "api.xmpush.xiaomi.com"

logstash清洗规则如下

#根据error日志的规律,两个正则覆盖所有情况,正则忘记从哪个大神那取的经了,多谢,另外,为了防止特殊情况出现,我保留了原始msg
filter {grok {match => ["message", "(?<time>\d{4}/\d{2}/\d{2}\s{1,}\d{2}:\d{2}:\d{2})\s{1,}\[%{DATA:err_severity}\]\s{1,}(%{NUMBER:pid:int}#%{NUMBER}:\s{1,}\*%{NUMBER}|\*%{NUMBER}) %{DATA:err_message}(?:,\s{1,}client:\s{1,}(?<client_ip>%{IP}|%{HOSTNAME}))(?:,\s{1,}server:\s{1,}%{IPORHOST:server})(?:, request: %{QS:request})?(?:, host: %{QS:host})?(?:, referrer: \"%{URI:referrer})?","message", "(?<time>\d{4}/\d{2}/\d{2}\s{1,}\d{2}:\d{2}:\d{2})\s{1,}\[%{DATA:err_severity}\]\s{1,}%{GREEDYDATA:err_message}"]}date{match=>["time","yyyy/MM/dd HH:mm:ss"]target=>"@timestamp"remove_field => ["time_local","time","path","offset","prospector","[fields][ttopic]","[beat][version]","[beat][name]"]}
}

清洗后的截图如下

延伸配置

对于拆出来的args,如果业务上有需要分析的信息,要继续将k/v分开,比如a=111&b=2222,拆到es里a作为key数字作为value,可以在logstash里编写如下配置

   if [args] {#很多url是经过decode过的,乱码不便于阅读,我们把它恢复urldecode {field => "args"}   #以&为分隔符,将args的k/v分开kv {             source => "args"field_split => "&"}}

好了,希望能在这个基础上,帮助你搭建自己的nginx可视化监控。

查看更多请到博主原创站:运维网咖社(www.net-add.com)

转载于:https://blog.51cto.com/benpaozhe/2395107

Logstash对nginx的access/error.log日志清洗并数据可视化监控设计相关推荐

  1. 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版

    超详细新版ELK8.5.0+lnmp1.9解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版 前言 1.基础环境和所需要的软件包 1.1服务器配置(仅供参考) 1.2 ...

  2. nginx的error.log日志常见的几个错误解决方法

    nginx.conf里会有两个日志,分为access.log 和 error.log.其中这两个日志可以细化,一般来说在nginx目录下会有一个logs会保存,然后也可以在对应的server目录里可以 ...

  3. linux signal历史log,nginx错误signal process started错误error.log日志显示signal process started错误解决方法...

    nginx日志报的错:ngnix:[notice] 30499#0: signal process started 前台页面显示:500 Internal Server Error,在nginx日志报 ...

  4. nginx error.log中的 favicon.ico 错误

    今天配置一个测试域名,然后重启nginx,发现error log中很多如下错误: 2014/06/27 10:35:47 [error] 23757#0: *196360 open() "/ ...

  5. Unity工程打开就崩溃C:\User\ADMINI~\AppData\Local\Temp\crash_xxxxx\error.log

    打开工程遇到上图问题,直接崩溃,尝试多次无法打开. error.log日志: Unity Editor [version: Unity 5.6.5f1_2cac56bf7bb6] Unity.exe ...

  6. Nginx的access.log日志分析工具-goaccess

    一.安装goaccess wget http://tar.goaccess.io/goaccess-1.3.tar.gz  --no-check-certificate #下载tar包 tar -xz ...

  7. ​清除error.log、access.log并限制Apache日志文件大小的方法

    有个客户反映vps网站打不开,登录系统检查下,客户是win2003系统,发现放置网站文件的D盘已被占满,可用空间为0KB,进去发现客户Apache服务器的错误日志error.log非常的大,造成D盘被 ...

  8. 清除error.log、access.log并限制Apache日志文件大小的方法

    清除error.log.access.log并限制Apache日志文件大小的方法 Apache下的access.log和error.log文件从安装服务器到现在没有动过,今天突然discuz 的MYS ...

  9. linux配置apache文件大小,linux下限制Apache日志access.log以及error.log文件大小

    如果网站开启了apache日志文件以及错误日志功能,那么很可能apache日志文件access.log在一段时间内就会很庞大至上百兆甚至几十个G,尤其大访问量的网站更是如此.error_log错误日志 ...

  10. filebeat获取nginx的access日志配置

    filebeat获取nginx的access日志配置产生nginx日志的服务器即生产者服务器配置: 拿omp.chinasoft.com举例: 1.nginx.conf主配置文件添加日志格式log_f ...

最新文章

  1. 使用NDK过程中出现“Unresolved inclusion jni.h”
  2. 【黑马程序员 C++教程从0到1入门编程】【笔记6】C++核心编程(文件操作)
  3. 计算机三级网络技术知识点大纲,全国计算机等级考试三级网络技术考试大纲(2019年版)...
  4. apache启动报错记录
  5. mdAAPP:安装后会一直存在手机中,安装数据及缓存都会占用大量内存,而且各家全家桶APP之间都有一些藕断丝连的唤醒关系。 小程序:不需要安装在手机上,微信有严格的小程序内存管理机制,和微信共用内存使
  6. Android跟web哪个好,比系统自带的WebView更好用 | AgentWeb
  7. C# 的一些便捷用法
  8. 深度学习(三十)贪婪深度字典学习
  9. 主体功能区规划的定位
  10. 虚幻的东西_世间一切皆为虚幻
  11. join丢失数据_15、Hive数据倾斜与解决方案
  12. java 文件上传 乱码_java中文传值乱码问题的解决方法
  13. synchronized 修饰在 static方法和非static方法的区别
  14. arduino 蓝牙示例_Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
  15. SAS数据集随机抽样方法
  16. Opengl加载与创建纹理
  17. pdf格式的图片如何插入到word中
  18. 马云说:“未来是大数据的时代”
  19. 谷歌游览器打开pdf总是提示要另存为
  20. 财路网每日原创推送:科普:智能合约和区块链

热门文章

  1. 国产数据库-达梦数据库
  2. 普源示波器 电脑 连接 软件_乐高wedo2.0电脑软件安装及蓝牙连接方法
  3. 安装Ubuntu详细教程
  4. Windows 使用 Detours 进行 HOOK
  5. 一种便携式导弹飞控系统外场实时仿真测试系统设计
  6. bom_clear.php,金蝶KIS专业版常用SQL语句
  7. csr驱动程序linux版,CSR8510蓝牙驱动下载
  8. 技术分享 | MySQL:caching_sha2_password 快速问答
  9. Matlab 曲线拟合之 polyfit 、polyval、poly2str 函数
  10. 嵌入式linux usb联网,嵌入式linux下MF825C上网