bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

FLINK中如何使用進行網站監控報警和報警恢復

這篇文章給大家介紹FLINK中如何使用進行網站監控報警和報警恢復,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創新互聯公司2013年至今,先為柘榮等服務建站,柘榮等地企業,進行企業商務咨詢服務。為柘榮企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

flink CEP 簡介

flink CEP(Complex event processing),是在Flink之上實現的復雜事件處理庫,可以允許我們在不斷的流式數據中通過我們自己定義的模式(Pattern)檢測和獲取出我們想要的數據,然后對這些數據進行下一步的處理。通過各種pattern的組合,我們可以定義出非常復雜的模式來匹配我們的數據。

網上講CEP原理和用法的文章很多,大家可以參考下 https://juejin.im/post/5de1f32af265da05cc3190f9#heading-9

簡單來說一下,其實我們可以把使用flink cep當做我們平時用的正則表達式,cep中的Pattern就是我們定義的正則表達式,flink中的DataStream就是正則表達式中待匹配的字符串,flink 通過DataStream 和 自定義的Pattern進行匹配,生成一個經過過濾之后的DataStream .

基于自定義的pattern,我們可以做很多工作,比如監控報警、風控、反爬等等,接下來我們基于一個簡單的報警小例子來講解一些FLINK cep的實際應用。

 

案例詳解

我們基于flink CEP做一個簡單的報警,首先我們簡化一下報警的需求
1.統計出來每秒鐘http狀態碼為非200的數量所占比例。大于0.7的時候觸發報警。
2.統計結果連續發生三大于閾值(0.7,這個數字是我自己寫的,為了測試用,真實環境需要根據實際經驗來設置)發送報警通知。
3.統計結果小于等于閾值觸發報警恢復通知。

實際應用中我們一般會去消費kafka的數據來作為source、這里我們為了簡化,通過自定義source生成一些模擬的數據。


 public static class MySource implements SourceFunction<Tuple4<String,Long,Integer,Integer>>{

  static int status[] = {200, 404, 500, 501, 301};

  @Override
  public void run(SourceContext<Tuple4<String,Long,Integer,Integer>> sourceContext) throws Exception{
   while (true){
    Thread.sleep((int) (Math.random() * 100));
    // traceid,timestamp,status,response time

    Tuple4 log = Tuple4.of(
      UUID.randomUUID().toString(),
      System.currentTimeMillis(),
      status[(int) (Math.random() * 4)],
      (int) (Math.random() * 100));

    sourceContext.collect(log);
   }
  }

  @Override
  public void cancel(){

  }
 }

 

接下來我們定義一個sql,用來計算我們的需求中的第一個要求。


  String sql = "select pv,errorcount,round(CAST(errorcount AS DOUBLE)/pv,2) as errorRate," +
               "(starttime + interval '8' hour ) as stime," +
               "(endtime + interval '8' hour ) as etime  " +
               "from (select count(*) as pv," +
               "sum(case when status = 200 then 0 else 1 end) as errorcount, " +
               "TUMBLE_START(proctime,INTERVAL '1' SECOND)  as starttime," +
               "TUMBLE_END(proctime,INTERVAL '1' SECOND)  as endtime  " +
               "from log  group by TUMBLE(proctime,INTERVAL '1' SECOND) )";

 

通過執行sql,我們獲取到了一個Result對象的DataStream,

  Table table = tenv.sqlQuery(sql);
  DataStream<Result> ds1 = tenv.toAppendStream(table, Result.class);

 

接下來我們到了最核心的地方,我們需要定一個Pattern。


  Pattern pattern = Pattern.<Result>begin("alert").where(new IterativeCondition<Result>(){
   @Override
   public boolean filter(
     Result i, Context<Result> context) throws Exception{
    return i.getErrorRate() > 0.7D;
   }
  }).times(3).consecutive().followedBy("recovery").where(new IterativeCondition<Result>(){
   @Override
   public boolean filter(
     Result i,
     Context<Result> context) throws Exception{
    return i.getErrorRate() <= 0.7D;
   }
  }).optional();

 

來詳細解釋一下這個Pattern

  1. 首先定義一個名為alert的Pattern,該Pattern的作用就是過濾出錯誤率大于0.7的數據,
  2. times(3) ,表示要匹配三次,也就是要三次大于0.7.
  3. consecutive 表示上述的三次匹配要是連續的,比如0.75、0.8、0.78,只有類似這樣的數據才能被匹配到,中間不能有不符合的數據出現。
  4. followedBy表示該alert pattern的下面要跟著一個recovery pattern,而followedBy是寬松匹配,也就是兩個模式之間可以有其他的數據,如果要采用嚴格匹配,是使用next.
  5. 最后recovery pattern加上一個optional 是我為了區分報警,和報警恢復想的的一個方案,這樣的話,如果是只匹配到了alert pattern,輸出的就是報警,如果recovery pattern也匹配到了,那么就是報警恢復。

在我們獲得了相應的報警和恢復之后,接下來就是調用報警接口進行處理了,我們這只是簡單的打印出來信息。


  DataStream<Map<String,List<Result>>> alertStream = org.apache.flink.cep.CEP.pattern(
    ds1,
    pattern).select(new PatternSelectFunction<Result,Map<String,List<Result>>>(){
   @Override
   public Map<String,List<Result>> select(Map<String,List<Result>> map) throws Exception{
    List<Result> alertList = map.get("alert");
    List<Result> recoveryList = map.get("recovery");

    if (recoveryList != null){
     System.out.print("接受到了報警恢復的信息,報警信息如下:");
     System.out.print(alertList);
     System.out.print("  對應的恢復信息:");
     System.out.println(recoveryList);
    } else {
     System.out.print("收到了報警信息 ");
     System.out.print(alertList);
    }

    return map;
   }
  });

關于FLINK中如何使用進行網站監控報警和報警恢復就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網頁名稱:FLINK中如何使用進行網站監控報警和報警恢復
分享地址:http://vcdvsql.cn/article0/gghcio.html

成都網站建設公司_創新互聯,為您提供企業建站商城網站服務器托管自適應網站外貿建站全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營