概述 Webhook是一個API概念,並且變得越來越流行。我們能用事件描述的事物越多,webhook的作用範圍也就越大。Webhook作為一個輕量的事件處理應用,正變得越來越有用。 準確的說webhoo是一種web回調或者http的push API,是向APP或者其他應用提供實時信息的一種方式。We ...
概述
Webhook是一個API概念,並且變得越來越流行。我們能用事件描述的事物越多,webhook的作用範圍也就越大。Webhook作為一個輕量的事件處理應用,正變得越來越有用。
準確的說webhoo是一種web回調或者http的push API,是向APP或者其他應用提供實時信息的一種方式。Webhook在數據產生時立即發送數據,也就是你能實時收到數據。這一種不同於典型的API,需要用了實時性需要足夠快的輪詢。這無論是對生產還是對消費者都是高效的,唯一的缺點是初始建立困難。
Webhook有時也被稱為反向API,因為他提供了API規則,你需要設計要使用的API。Webhook將向你的應用發起http請求,典型的是post請求,應用程式由請求驅動。
配置
前兩篇文章主要講的是郵件和釘釘的警報通知方式,但是通知方式單一,並且依賴於第三方服務無法做集群處理。為了更加靈活方便並且高可用的實現我們的預警通知功能,這裡我們自己實現Webhook功能。
前兩篇看這裡:
Grafana+Prometheus系統監控之郵件報警功能
Webhook實現看這裡:
我們使用最近比較流行的spring-boot來實現這個功能,部分代碼如下:
/**
* JSON數據格式
* body:{
* "imageUrl":"http://grafana.org/assets/img/blog/mixed_styles.png",
* "message":"Someone is testing the alert notification within grafana.",
* "ruleId":0,
* "ruleName":"Test notification",
* "ruleUrl":"http://grafana.52itstyle.com/",
* "state":"alerting",
* "title":"[Alerting] Test notification",
* "evalMatches":[
* {"value":100,"metric":"High value","tags":null},
* {"value":200,"metric":"Higher Value","tags":null}
* ]
* }
*/
@RequestMapping("/send")
public String webhook(@RequestBody String body) {
//處理預警信息(郵件、簡訊、釘釘)
logger.info("webhook警報系統,body:{}",body);
return "success";
}
源碼
碼雲地址:https://gitee.com/52itstyle/spring-boot-webhook