通过ES分析异常情况
- 2019-05-25 16:29:00
- CJL 原创
- 3661
ES提供了强大的分析能力,使我们可以通过服务日志发现一些隐藏的问题。尽量提高系统的全面监控能力,及时发现系统性风险。
一、目标
分析维度:
1、利用http状态码
通过nginx的日志统计http状态码,根据各状态码的变化趋势进行预警。
2、利用请求次数
通过统计各个域名或接口的请求次数,发现流量变化趋势。
3、利用响应时间
统计接口的响应时间,发现服务器的负载问题或程序问题。
错误依据:
1、增长或下降趋势的环比趋势
2、考虑到每天的变化,引入同比变化,包括天、周、月同比。避免误报。
二、思路
1、多维度分析
域名、接口、后端IP、状态
2、多时间段拆分
分钟、10分钟、30分钟、一小时、一天、一周、一月
3、排除异常
IP白名单过滤,域名白名单过滤
三、实现
1、监控域名的访问个数和响应时间
根据域名分桶,使用agga进行统计。
基准值为1分钟时:对比值取上一分钟、10分钟前、30分钟前、上一小时同一分钟、上一天同一分钟、上一周同一分钟。分别取对应的权重值。并保存以供后续分析使用。
针对请求量较小的基准值取5分钟。
ES查询:
{ "size": 0, "query": { "bool": { "must": [ { "range": { "@timestamp": { "gt": "now-1m" } } } ] } }, "aggs": { "count_domain": { "terms": { "field": "server_name.keyword", "size": 100 }, "aggs": { "avgreq_domain": { "avg": { "field": "upstream_response_time" } } } } } }
2、监控服务器的访问个数和响应时间
根据后端机IP分桶,使用agga进行统计。
ES查询:
{ "size": 0, "query": { "bool": { "must": [ { "range": { "@timestamp": { "gt": "now-1m" } } } ] } }, "aggs": { "count_domain": { "terms": { "field": "beat.name.keyword", "size": 100 }, "aggs": { "avgreq_domain": { "avg": { "field": "upstream_response_time" } } } } } }
3、监控接口的访问个数和响应时间
根据接口请求path分桶,使用agga进行统计。
ES查询:
{ "size": 0, "query": { "bool": { "must": [ { "range": { "@timestamp": { "gt": "now-1m" } } } ] } }, "aggs": { "count_domain": { "terms": { "field": "request_uri.keyword", "size": 100 }, "aggs": { "avgreq_domain": { "avg": { "field": "upstream_response_time" } } } } } }
4、结合域名服务器IP和接口统计
先根据服务器IP分桶再根据接口请求path分桶,使用agga进行统计。
ES查询:
{ "size": 1, "query": { "bool": { "must": [ { "range": { "@timestamp": { "gt": "now-1m" } } } ] } }, "aggs": { "count_domain": { "terms": { "field": "server_name.keyword", "size": 1000 }, "aggs": { "count_serverip": { "terms": { "field": "beat.name.keyword", "size": 1000 }, "aggs": { "count_path": { "terms": { "field": "request_uri.keyword", "size": 1000 }, "aggs": { "avgreq_path": { "avg": { "field": "upstream_response_time" } } } }, "avgreq_serverip": { "avg": { "field": "upstream_response_time" } } } }, "avgreq_domain": { "avg": { "field": "upstream_response_time" } } } }, "avgreq_all": { "avg": { "field": "upstream_response_time" } } } }
发表评论