通過ES分析異常情況

2019-05-25 16:29:00
CJL
原創
3173

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"
      }
    }
  }
}






發錶評論
評論通過審核後顯示。
流量統計