日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

聊一聊对外API接口的存活检查可以怎么做

發(fā)布時間:2023/12/4 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聊一聊对外API接口的存活检查可以怎么做 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

公司內(nèi)部的API接口一般會分為兩大類,一類是直接暴露在公網(wǎng)可以訪問的,一類是只能在局域網(wǎng)內(nèi)訪問的。

暴露在公網(wǎng)的一般就是業(yè)務網(wǎng)關以及一些和第三方公司有著某些合作,從而進行數(shù)據(jù)交互的接口。

檢查API接口是否存活,第一反應應該就是健康檢查了。

在局域網(wǎng)環(huán)境內(nèi)搭配 nginx 或注冊中心之類的健康檢查機制,一定程度的保證了只有健康的實例才會進行服務。

把這一塊放到公網(wǎng)環(huán)境,判斷一個API接口是否存活,情況就復雜很多了。

  • 域名解析

  • SSL證書

  • 響應情況

  • ...

  • 舉個老黃待過的兩個公司的實際例子,這兩個公司遇到的都是SSL證書過期,沒有及時更換的問題,直接就是最高級故障。

    在這種情況下,其實接口在局域網(wǎng)內(nèi)是能正常訪問,可以理解成它是存活的,但是放到公網(wǎng)環(huán)境,用戶就是不能訪問到,這個時候?qū)τ脩魜碚f就是故障的。

    所以涉及到對外服務API存活的檢查,光一個簡單的健康檢查還是不夠的,還需要站在用戶的層面去考慮。

    或許大家會說,這種事情不是運維負責的嗎?怎么還要我們開發(fā)去操心?

    這個很大程度是看團隊的,有的團隊都不一定有運維這個角色,都是開發(fā)搞定的。

    另外,多豐富一點自己的技術棧和技術廣度并不是什么壞事哈。

    下面就簡單介紹一下老黃的處理方案吧。

    處理方案

    老黃這邊選擇的處理方案是 【Prometheus + Blackbox + Grafana + Alertmanager + PrometheusAlert】

    Prometheus,Grafana 和 Alertmanager 這三個就不過多的介紹了。

    下面主要介紹一下 Blackbox 和 PrometheusAlert:

    Blackbox 是 Prometheus 官方提供的一種黑盒監(jiān)測方案,也是本文一個最關鍵的點。

    下面是一些常見的應用場景

    • HTTP 測試,定義 Request Header 信息,判斷 Http status / Http Respones Header / Http Body 內(nèi)容

    • TCP 測試, 業(yè)務組件端口狀態(tài)監(jiān)聽,應用層協(xié)議定義與監(jiān)聽

    • ICMP 測試,主機探活機制

    • POST 測試,接口聯(lián)通性

    • SSL 證書過期時間

    PrometheusAlert 是開源的運維告警中心消息轉(zhuǎn)發(fā)系統(tǒng),支持主流的監(jiān)控系統(tǒng)Prometheus、Zabbix,日志系統(tǒng)Graylog2,Graylog3、數(shù)據(jù)可視化系統(tǒng)Grafana、SonarQube等支持WebHook接口的系統(tǒng)發(fā)出的預警消息,支持將收到的這些消息發(fā)送到釘釘,微信,飛書,騰訊短信,騰訊電話,阿里云短信,阿里云電話,華為短信,容聯(lián)云電話等。

    換句話就是說,把告警消息通過 PrometheusAlert 發(fā)送個體企業(yè)微信機器人或釘釘機器人。

    整個鏈路大概是這樣的:

  • BlackBox 負責探測

  • Prometheus 主動 pull 探測的結(jié)果并進行存儲

  • Prometheus 根據(jù)告警規(guī)則進行評估,將告警扔到 AlertManager

  • AlertManager 收到 Prometheus 的消息后,通知給 PrometheusAlert

  • PrometheusAlert 收到 AlertManager 的消息后,通知到對應的端

  • 實戰(zhàn)

    下面先用 docker 啟動一個 blackbox-exporter 實例

    docker?run?-d?\-p?13002:9115?\--name=blackbox?\--restart=always??\prom/blackbox-exporter:v0.19.0

    運行后看到的大概就是這個樣子。


    這一塊的配置基本不用變更,用默認的即可,主要的配置還是在 Prometheus 那邊。

    可以點擊上圖的 Configuration 去看默認的配置。


    下面就去調(diào)整 Prometheus 的配置。

    這里只以 http 檢測為例來說明。

    global:scrape_interval:?????30sevaluation_interval:?30salerting:alertmanagers:-?static_configs:-?targets:-?xxx.xxx.xxx.xxx:13005??rule_files:-?"/prometheus/blackbox_rules/*.yml"scrape_configs:-?job_name:?'outer'metrics_path:?"/probe"params:module:?[http_2xx]??#?模塊對應?blackbox.yml?file_sd_configs:-?files:?['/prometheus/blackbox_configs/outer/*.yml']refresh_interval:?10srelabel_configs:-?source_labels:?[__address__]target_label:?__param_target-?source_labels:?[__param_target]target_label:?instance-?target_label:?__address__replacement:?xxx.xxx.xxx.xxx:13002??#?blackbox安裝在哪臺機器

    其中 scrape_configs 里面是最為重要的,一個是 params ,一個是 relabel_configs, 一個是 file_sd_configs。

    剩下的就是一些常規(guī)配置了。

    然后是 file_sd_configs 里面一堆可以變化的 yml 文件,也就是那些對外的域名要進行 http 檢測的。

    -?targets:?[?'https://xxx.xxxxx.com'?]labels:domain:?xxxxxxxxenv:?xx云-公網(wǎng)service:?網(wǎng)關??ip:?xxxxxxxx

    配置里面的 labels 是一些輔助信息,可以按需添加,可以在 grafana 里面進行展示的。

    到這里,關于 blackbox 的配置基本就差不多了。

    接下來是在 grafana 里面展示,看一下結(jié)果。


    PS: 這里用的是 【9965】 這個模板。

    面板雖然好看,但是我們不能每時每刻都在盯著這個面板的,所以還是離不開告警這一監(jiān)控領域的大頭。

    下面是告警規(guī)則的配置

    groups: -?name:?服務探測rules:-?alert:?BlackboxProbeFailedexpr:?probe_success?==?0for:?0mlabels:severity:?criticalteam:?nodeannotations:??????summary:?Blackbox?probe?failed?(instance?{{?$labels.instance?}})description:?"服務在線檢查失敗\n當前值=?{{?$value?}}\nIp?=?{{?$labels.ip?}}\nDomain=?{{?$labels.domain?}}\nEnv=?{{?$labels.env?}}\n服務名=?{{?$labels.service?}}"-?alert:?BlackboxProbeHttpFailureexpr:?probe_http_status_code?<=?199?OR?probe_http_status_code?>=?400????????????????????????????for:?0mlabels:severity:?criticalteam:?node????????????????????????????????????????????????????????????annotations:???????????????????????????????????????????????????????????????summary:?Blackbox?probe?HTTP?failure?(instance?{{?$labels.instance?}})description:?"HTTP狀態(tài)碼不在200-399\n當前值=?{{?$value?}}\nIp?=?{{?$labels.ip?}}\nDomain=?{{?$labels.domain?}}\nEnv=?{{?$labels.env?}}\n服務名=?{{?$labels.service?}}"-?alert:?BlackboxSslCertificateWillExpireSoonexpr:?probe_ssl_earliest_cert_expiry?-?time()?<?86400?*?30for:?0mlabels:severity:?warningannotations:summary:?Blackbox?SSL?certificate?will?expire?soon?(instance?{{?$labels.instance?}})description:?"SSL?certificate?expires?in?30?days\n??VALUE?=?{{?$value?}}\n??LABELS?=?{{?$labels?}}"????

    上面這個主要是3個告警規(guī)則,看描述就知道它的作用的,也不用過多的說明了,這些告警表達式是參考 Awesome Prometheus alerts 調(diào)整的。

    再下一步就到告警消息的配置了。

    先用 docker 啟動一個 prometheus-alert 的實例

    docker?run?-d?-p?13006:8080?\-v?/data/prom-alert/conf:/app/conf?\-v?/data/prom-alert/db:/app/db?\-v?/data/prom-alert/logs:/app/logs?\--name?prom-alert?\-e?TZ=Asia/Shanghai?\--restart=always??\feiyu563/prometheus-alert:v-4.4.3

    這里默認帶了很多模板


    這里選擇自己定義一個告警模板


    {{?$var?:=?.externalURL}}{{?range?$k,$v:=.alerts?}} {{if?eq?$v.status?"resolved"}} ####?[Prometheus恢復信息]({{$v.generatorURL}})>?<font?color="info">告警名稱</font>:[{{$v.labels.alertname}}]({{$var}}) >?<font?color="info">告警級別</font>:{{$v.labels.severity}} >?<font?color="info">開始時間</font>:{{GetCSTtime $v.startsAt}} >?<font?color="info">結(jié)束時間</font>:{{GetCSTtime $v.endsAt}} >?<font?color="info">實例地址</font>:{{$v.labels.instance}} >?<font?color="info">主機名稱</font>:{{$v.labels.hostname}}**{{$v.annotations.description}}** {{else}} ####?[Prometheus告警信息]({{$v.generatorURL}})>?<font?color="#FF0000">告警名稱</font>:[{{$v.labels.alertname}}]({{$var}}) >?<font?color="#FF0000">告警級別</font>:{{$v.labels.severity}} >?<font?color="#FF0000">開始時間</font>:{{GetCSTtime $v.startsAt}} >?<font?color="#FF0000">結(jié)束時間</font>:{{GetCSTtime $v.endsAt}} >?<font?color="#FF0000">實例地址</font>:{{$v.labels.instance}} >?<font?color="#FF0000">主機名稱</font>:{{$v.labels.hostname}}**{{$v.annotations.description}}** {{end}} {{?end?}}

    這里的模板是做了一個顏色的區(qū)分,告警的用紅色,恢復的用綠色,由于 Prometheus 和 AlertManager 用的都是 UTC 時間,所以這里用 GetCSTtime 轉(zhuǎn)化成北京時間。

    最后是回到 alertmanager 里面去配置

    global:resolve_timeout:?5m route:receiver:?'default-receiver'group_wait:?30sgroup_interval:?1mrepeat_interval:?5mgroup_by:?[alertname]routes:-?receiver:?'blackbox-webhook-outer'group_wait:?10scontinue:?falsematch_re:job:?outer receivers: -?name:?'default-receiver'webhook_configs:-?url:?'http://xxxxxx:13006/prometheusalert?type=wx&tpl=prometheus-wx&wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx'? -?name:?'blackbox-webhook-outer'webhook_configs:#?這里的url?是配置的?PrometheusAlert?自定義模板管理里面的路徑-?url:?'http://xxxxxx:13006/prometheusalert?type=wx&tpl=blackbox_alert&wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx'

    最后來看一些實際告警和恢復的例子

    其他

    如果不想考慮自己搭建的話,不少云產(chǎn)商也有提供類似的功能,好比阿里云有一個叫站點監(jiān)控的產(chǎn)品也可以幫我們搞定這個問題,不過只能免費一個月,超過還是需要購買的。

    小結(jié)

    API接口存活的檢查其實也是一門不小的學問,考慮的內(nèi)容還是不少的。經(jīng)歷過生產(chǎn)事故,所以對這一塊會特別看重。

    目前中小團隊的監(jiān)控體系應該是離不開事實標準的 Prometheus,所以在其基礎上去拓展會有比較多成熟的可以借鑒的經(jīng)驗來落地。

    相關閱讀

    • https://github.com/prometheus/blackbox_exporter

    • https://grafana.com/grafana/dashboards/9965

    • https://awesome-prometheus-alerts.grep.to/rules

    • https://feiyu563.github.io

    總結(jié)

    以上是生活随笔為你收集整理的聊一聊对外API接口的存活检查可以怎么做的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。