Grafana 番外篇1.2–1、使用Grafana、Prometheus、Blackbox監控WebSite效能與健康狀況

網站監控只監控系統的服務狀態是遠遠不足,效能與網站周邊資訊也是可用性的重點

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek
10 min readDec 20, 2022

--

原本正在撰寫k8s 系列的文章,公司突然來一個Proxmox ve + Containerized Web + Proxmox Backup Server + Grafana + Loki + Alert manager + OnCall 的混合雲端微服務Case,然後客戶想要在Grafana上達成的監控效果蠻有意思的,不只要監控服務的可用性,連帶Web的效能、DNS查詢ms、SSL expire都希望一併監控並加入Alert manager,剛好用這個機會分享這層面的監控效果。

本篇以Web效能監控為主,Alert manager會另開文章分享

常常看到網站SSL過期的,這套監控可以強化這方面管理

Blackbox 是什麼?

Blackbox Exporter 是用於Prometheus的一支Exporter,主用在偵測HTTPS、HTTP、TCP、DNS 和 ICMP 等服務。定義好服務後,Blackbox Exporter 會生成Metrics,這些Metrics可提供 Grafana 進行可視化監控。

相同類型的還有一支Whitebox,而Blackbox與Whitebox有什麼差別?

Blackbox相較於Whitebox最大的不同在於,Blackbox是以障礙為出發點,當網站障礙發生時,Blackbox能快速發現故障,而Whitebox則側重於主動發現以及問題的預警 。一個完善的監控目標是要能夠從Whitebox的角度發現潛在問題,然後能夠在Blackbox的角度快速找到發生問題的原因。

相較於Whitebox的複雜性,Blackbox比較直線式

Grafana安裝可以參考入門篇1.1 : Grafana Enterprise 安裝 (Ubuntu)

Prometheus安裝可以參考入門篇1.2 : 整合Prometheus監控Proxmox ve

環境 :

Proxmox ve : https://192.168.50.60:8006

Grafana : http://192.168.50.61:3000/login

Prometheus : http://192.168.50.62:9090

Docker Host : 192.168.50.62

Portainer : https://192.168.50.62:9443

K8s Master : 192.168.50.61

K8s Node1 : 192.168.50.63

K6 Host : 192.168.50.64

Blackbox : http://192.168.50.65:9115

Step1. 下載Blackbox Exporter

Blackbox Exporter雖然透過Portainer用container方式佈署很簡單,docker hub上查到的namespace (這邊是用bitnami/blackbox-exporter)安裝就好,但因為安裝完成之後,後續可能會需要頻繁設定blackbox.yml,所以為了便於以後方便擴充,這邊使用一台低規格的vm (CentOS)來安裝。

這邊建議OS安裝完成之後,也要裝Google BBR,BBR安裝方式可參考 :

Linux都該安裝的好東西 Google BBR

1.1、blackbox-exporter

先到blackbox-exporter官方網站找最新版的下載(2022/12/20 最新版為 0.23)

官方頁面

cd /
mkdir blackbox
cd blackbox
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.23.0/blackbox_exporter-0.23.0.linux-amd64.tar.gz
tar -xzf blackbox_exporter-0.23.0.linux-amd64.tar.gz
cd blackbox_exporter-0.23.0.linux-amd64

進到blackbox folder 之後,查看檔案 ls -l

  • blackbox_exporter:這是一個運行服務的可執行文件。
  • blackbox.yml:YAML 文件,包含您定義要探測的所有端點、要運行模組的所有 backbox exporter 配置。

Step2. 設定Blackbox exporter 執行帳戶

新增一個帳戶專用於執行blackbox exporter!

useradd -rs /bin/false blackbox
chmod -R 777 /blackbox/blackbox_exporter-0.23.0.linux-amd64
chown -R blackbox:blackbox /blackbox/blackbox_exporter-0.23.0.linux-amd64

Step3. 設定Blackbox exporter 服務

把blackbox 設定成一個系統service

nano /etc/systemd/system/blackbox.service

blackbox.service 內容為

[Unit]
Description=Blackbox Exporter Service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=blackbox
Group=blackbox
ExecStart=/blackbox/blackbox_exporter-0.23.0.linux-amd64/blackbox_exporter --config.file=/blackbox/blackbox_exporter-0.23.0.linux-amd64/blackbox.yml

[Install]
WantedBy=multi-user.target

接著編輯blackbox.yml

這邊可以看到,default 開啟了幾個探針的模組

  • http / tcp / grpc / icmp … 等等

這邊建議在 http 內加一個

preferred_ip_protocol: "ip4"

讓prober 強制用 ipv4 跑,避免掉一些網站同時有ipv4、ipv6 的時候,跑ipv6 會有錯誤的問題。

服務試運行 :

systemctl daemon-reload
systemctl start blackbox.service
systemctl status blackbox.service
blackbox 服務正常運作

然後,別忘了在firewalld 上開port (9115)

firewall-cmd --zone=public --add-port=9115/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all

用browser測試

Step4. 整合blackbox exporter 與 Prometheus

以公司官方網站為例,在blackbox內加入監控

先ssh 到 docker host

ssh 192.168.50.62 22

在prometheus.yml 頁尾的地方加入以下內容

- job_name: web_http2xx_probe
params:
module:
- http_2xx
target:
- www.bearspace.com.tw
metrics_path: /probe
static_configs:
- targets:
- 192.168.50.65:9115

編輯完成後,關閉prometheus,然後cp 進 docker再開啟。

docker cp /tmp/prometheus.yml 154f28014e9d391063ac0321aae82e7e0c6e321b21781e810bc5a6dd429f8582:/etc/prometheus/

打開prometheus web ui 這時在targets的地方,可以看到blackbox 的target

Step5. 整合Grafana與Prometheus的blackbox exporter

進入到Grafana 並在Dashboard → import

這邊推薦兩個Blackbox dashboard

ID : 7587、13659

多網站監控

當要同時監控的網站數量多,不想讓yml 太複雜,可以使用Prometheus 的 Relabling方式簡化設定。

以下為範例 :

scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://www.bearspace.com.tw
- https://mnc.bearspace.com.tw
- https://www.datadoghq.com.tw
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.16.50.65:9115

--

--

Ruei-Chi Huang
Kirin Blog | Kirin の IT Geek

I am Kirin., I was ShellFans AI Technology’s CTO. Our team specializes in IoT, Blockchain, Cloud and Ai. | https://www.shell.fans