为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于ELK的nginx-qps监控解决方案

2023-06-24 5页 doc 115KB 13阅读

用户头像 个人认证

is_859878

暂无简介

举报
基于ELK的nginx-qps监控解决方案     基于ELK的nginx-qps监控解决方案                  先说说原理:nginx-log中所有我们需要的信息,都是有的。比如user-agent. http-refer, url remote_addr等等 . 我们只需要把nginx-log中的信息进行计算和汇总即可。效果展示有人说,有日志了用awk/grep什么的快速计算就行了。ansible+awk/grep那都不是事但面临两大困难点 1. 我们的服务通常是多机,基于日志,使用脚本awk计算的话,只能得到单机性能,多机汇总是个问题;2.脚本计...
基于ELK的nginx-qps监控解决方案
     基于ELK的nginx-qps监控解决                  先说说原理:nginx-log中所有我们需要的信息,都是有的。比如user-agent. http-refer, url remote_addr等等 . 我们只需要把nginx-log中的信息进行计算和汇总即可。效果展示有人说,有日志了用awk/grep什么的快速计算就行了。ansible+awk/grep那都不是事但面临两大困难点 1. 我们的服务通常是多机,基于日志,使用脚本awk计算的话,只能得到单机性能,多机汇总是个问;2.脚本计算的实时性,脚本计算基本无法实现;当然这种nginx-qps监控什么的,肯定也有各路大神,通过其它方式完成过今天在这里介绍的,是一种纯开源解决方案,对于开发能力不强的运维童鞋,那会是非常适宜的。过程大约是这样nginx-log以固定的json串的方式打印filebeat将日志以json方式发送到es利用ES的计算能力,将日志按字段汇总起来最后grafana/kibana通过ES-API接口,获取数据后,展示到前台假定你已经搭好nginx服务和elk服务,下面我们来描述关键步骤nginx-日志的配置操作.定义一个nginx-log-format为json串形式的log_formatjson'{"@timestamp":"$time_iso8601",''"@version":"1",''"server_addr":"$server_addr",''"remote_addr":"$remote_addr",''"host":"$host",''"uri":"$uri",''"body_bytes_sent":$body_bytes_sent,''"bytes_sent":$body_bytes_sent,''"upstream_response_time":$upstream_response_time,''"request":"$request",''"request_length":$request_length,''"request_time":$request_time,''"status":"$status",''"http_referer":"$http_referer",''"http_x_forwarded_for":"$http_x_forwarded_for",''"http_user_agent":"$http_user_agent"''}';access_loglog/access.logjson;输出的日志大约是这样{"@timestamp":"2018-01-21T17:13:20+08:00","@version":"1","server_addr":"2.2.2.2","remote_addr":"1.1.1.1","host":"xxx.tencentyun.com","uri":"/interfaces/interface.php","upstream_response_time":0.131,"body_bytes_sent":312,"bytes_sent":489,"request":"POST/interfaces/interface.phpHTTP/1.0","request_length":372,"request_time":0.238,"status":"200","http_referer":"-","http_x_forwarded_for":"-","http_user_agent":"-"}配置filebeat日志上报filebeat.yml output.elasticsearch:hosts:["your.elk.address:9200"]index:"%{[name]}-%{+yyyyMMdd}"filebeat.prospectors:##nginx相关日志的探测器-input_type:logpaths:-/data/log/tnginx_1_0_0-1.0/access.logfields:name:"nginx_log_json"##thisis自定义字段,方便后续按集群名字汇总。当然也可以起其它名字cluster_name:web-access##一些filebeat的配置,包括从最后一行读取,文件自动释放FD等tail_files:trueclose_removed:trueclose_remane:trueclose_inactive:1hignore_older:1h##非常关键,自定义的字段在root层。这个后面稍后讲fields_under_root:true##日志以json的方式进行本地解析,拆词后的发送到filebeatjson.keys_under_root:truejson.add_error_key:true按上面的步骤配置后,nginx-access-log-json会被filebeat解析到一个一个分好的词,把数据上报到ES,最后的日志结果类似这样:{"_index":"nginx_log_json-20180121","_type":"doc","_id":"AWEX-dUURCyizcQtzIkX","_score":null,"_source":{"@timestamp":"2018-01-21T09:12:23.525Z","@version":"1","beat":{"hostname":"100_125_96_55","name":"100_125_96_55","version":"5.5.0"},##这一层就是root层,所有的自定义变量会在这个层级上"body_bytes_sent":1098,"bytes_sent":1303,"cluster_name":"web-access",##这个是上面自定义的字段"host":"xxx.tencentyun.com","http_referer":"-","http_user_agent":"-","http_x_forwarded_for":"-","input_type":"log","name":"nginx_log_json","offset":192139484,"remote_addr":"2.2.2.2","request":"POST/interfaces/interface.phpHTTP/1.1","request_length":432,"request_time":0.045,"server_addr":"1.1.1.1","source":"/data/log/tnginx_1_0_0-1.0/access.log","status":"200","type":"log","upstream_response_time":0.026,"uri":"/interfaces/interface.php"},"fields":{"@timestamp":[1516525943525]},"highlight":{"cluster_name":["@kibana-highlighted-field@trade@/kibana-highlighted-field@"]},"sort":[1516525943525]}kibana上搜索的结果会类似如下kibana的绘图,搜索和展示你认为有用的信息比如,最近一段时间来源IP统计,比如最近一段平均请求时间总之你能查询到数据,就能自定义你的视图展现然后通过kibana的dashboarad给老板展示一个酷炫的报总结一下:1. nginx-log以json串的方式打印日志2. filebeat解析日志后,发送到es进行数据实时处理和分析3.利用kibana的功能,自定义数据##FAQ F.为什么日志要以json形式打印? ELK本身也能解析日志拆词的? A:如果日志是普通方式打印,比如下面这样,就需要logstat ores本身再对日志进行拆词,方式是形得通的。但我们用json打印后,filebeat就能直接解析上报,减少集中过滤带来的性能问题。相信elk使用者,对于lostat的高CPU占用很头痛。F:granafa的图表更酷炫,它能代替kibana进行数据展现吗? A:是的,granfa的图表很好看,它可以做为整个系统平台的有益补充,进行数据展现。 大约方式是,在granafa中定义一个数据源,然后用luence的语法查到数据后,然后展示在图表上。适合做数据报表,改动不大的情况,比如下图的这种。Kiaban的优势在于非常高的自定义化,搜索条件可以自行输入。比如 `status:>200ANDremote_addr:127.0.0.1`这种组合,会带你无尽的想像空间。 F:elk汇总的数据延时是多少?数据质量如何? A:目前我们实测,100台8c8g500G的机器,支撑30kQPS数据写入,毫无压力。如果换性能更好的机器,能得到更优的结果。 至于查询,应该是目前最好用的开源全文日志搜索工具, 1000w行日志,实测30s内搜索得到结果,非常高效.  -全文完-
/
本文档为【基于ELK的nginx-qps监控解决方案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索