在实现告警之前,我们需要先实现监控。下面通过黑盒监控实现对域名的监控:

1.创建一个空文件,然后通过该文件创建一个 Secret,那么这个 Secret 即可作为 Prometheus 的静态配置

[root@k8s-master01 ~]# touch prometheus-additional.yaml
[root@k8s-master01 ~]# kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring

查看 Secret是否创建完成

[root@k8s-master01 ~]# kubectl describe secret additional-configs -n  monitoring
Name:         additional-configs
Namespace:    monitoring
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
prometheus-additional.yaml:  0 bytes

2.创建完 Secret 后,需要编辑下 Prometheus 配置

[root@k8s-master01 ~]# kubectl edit prometheus -n monitoring k8s
...
...
  additionalScrapeConfigs:
    key: prometheus-additional.yaml
    name: additional-configs
    optional: true
...
...

Prometheus静态配置示例-1

3.参考blackbox_exporter说明,打开prometheus-additional.yaml文件输入以下内容,添加job

[root@k8s-master01 ~]# vim prometheus-additional.yaml
- job_name: 'blackbox'
  metrics_path: /probe
  params:
    module: [http_2xx] # Look for a HTTP 200 response.
  static_configs:
    - targets:
      - https://www.baidu.com # Target to probe with https.
      - https://www.aaa.com # Target to probe with https.
      - http://gaoxin.kubeasy.com
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: blackbox-exporter:19115 # The blackbox exporter's real hostname:port

通过该文件更新该Secret

[root@k8s-master01 ~]# kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml --dry-run=client -oyaml | kubectl replace -f - -n monitoring

查看Secret是否更新完成

[root@k8s-master01 ~]# kubectl get secret -n monitoring additional-configs -oyaml
apiVersion: v1
data:
  prometheus-additional.yaml: LSBqb2JfbmFtZTogJ2JsYWNrYm94JwogIG1ldHJpY3NfcGF0aDogL3Byb2JlCiAgcGFyYW1zOgogICAgbW9kdWxlOiBbaHR0cF8yeHhdICMgTG9vayBmb3IgYSBIVFRQIDIwMCByZXNwb25zZS4KICBzdGF0aWNfY29uZmlnczoKICAgIC0gdGFyZ2V0czoKICAgICAgLSBodHRwczovL3d3dy5iYWlkdS5jb20gIyBUYXJnZXQgdG8gcHJvYmUgd2l0aCBodHRwcy4KICAgICAgLSBodHRwczovL3d3dy5hYWEuY29tICMgVGFyZ2V0IHRvIHByb2JlIHdpdGggaHR0cHMuCiAgICAgIC0gaHR0cDovL2dhb3hpbi5rdWJlYXN5LmNvbQogIHJlbGFiZWxfY29uZmlnczoKICAgIC0gc291cmNlX2xhYmVsczogW19fYWRkcmVzc19fXQogICAgICB0YXJnZXRfbGFiZWw6IF9fcGFyYW1fdGFyZ2V0CiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX3BhcmFtX3RhcmdldF0KICAgICAgdGFyZ2V0X2xhYmVsOiBpbnN0YW5jZQogICAgLSB0YXJnZXRfbGFiZWw6IF9fYWRkcmVzc19fCiAgICAgIHJlcGxhY2VtZW50OiBibGFja2JveC1leHBvcnRlcjoxOTExNSAjIFRoZSBibGFja2JveCBleHBvcnRlcidzIHJlYWwgaG9zdG5hbWU6cG9ydAo=
kind: Secret
metadata:
  creationTimestamp: "2023-07-23T10:46:23Z"
  name: additional-configs
  namespace: monitoring
  resourceVersion: "4775796"
  uid: 52eb0212-3df0-4c6b-9cb6-f09e69ed2d05
type: Opaque

对其进行解密验证

[root@k8s-master01 ~]# echo """
> LSBqb2JfbmFtZTogJ2JsYWNrYm94JwogIG1ldHJpY3NfcGF0aDogL3Byb2JlCiAgcGFyYW1zOgogICAgbW9kdWxlOiBbaHR0cF8yeHhdICMgTG9vayBmb3IgYSBIVFRQIDIwMCByZXNwb25zZS4KICBzdGF0aWNfY29uZmlnczoKICAgIC0gdGFyZ2V0czoKICAgICAgLSBodHRwczovL3d3dy5iYWlkdS5jb20gIyBUYXJnZXQgdG8gcHJvYmUgd2l0aCBodHRwcy4KICAgICAgLSBodHRwczovL3d3dy5hYWEuY29tICMgVGFyZ2V0IHRvIHByb2JlIHdpdGggaHR0cHMuCiAgICAgIC0gaHR0cDovL2dhb3hpbi5rdWJlYXN5LmNvbQogIHJlbGFiZWxfY29uZmlnczoKICAgIC0gc291cmNlX2xhYmVsczogW19fYWRkcmVzc19fXQogICAgICB0YXJnZXRfbGFiZWw6IF9fcGFyYW1fdGFyZ2V0CiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX3BhcmFtX3RhcmdldF0KICAgICAgdGFyZ2V0X2xhYmVsOiBpbnN0YW5jZQogICAgLSB0YXJnZXRfbGFiZWw6IF9fYWRkcmVzc19fCiAgICAgIHJlcGxhY2VtZW50OiBibGFja2JveC1leHBvcnRlcjoxOTExNSAjIFRoZSBibGFja2JveCBleHBvcnRlcidzIHJlYWwgaG9zdG5hbWU6cG9ydAo="""|base64 -d
- job_name: 'blackbox'
  metrics_path: /probe
  params:
    module: [http_2xx] # Look for a HTTP 200 response.
  static_configs:
    - targets:
      - https://www.baidu.com # Target to probe with https.
      - https://www.aaa.com # Target to probe with https.
      - http://gaoxin.kubeasy.com
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: blackbox-exporter:19115 # The blackbox exporter's real hostname:port

4.登录Prometheus页面验证

获取Prometheus服务NodePort端口

[root@k8s-master01 ~]# kubectl get svc -n monitoring | grep prometheus-k8s
prometheus-k8s          NodePort    10.0.110.215   <none>        9090:30186/TCP,8080:31400/TCP   2d2h

打开浏览器输入节点IP:30186后,依次点击【Status】-【Targets】后,观察到blackbox已被监控,且Endpoint状态都为UP

Prometheus静态配置示例-2

5.登录Grafana页面验证

获取Grafana服务NodePort端口

[root@k8s-master01 ~]# kubectl get svc -n monitoring | grep grafana
grafana                 NodePort    10.0.14.56     <none>        3000:30428/TCP                  2d3h

打开浏览器输入节点IP:30428后,依次点击【+】-【import dashboard】

Prometheus静态配置示例-3

你可以登录grafana官网下载自己心仪的模板,选择好后复制【Dashboard ID】

Prometheus静态配置示例-4

回到grafana界面,填写刚刚复制的【Dashboard ID】13659后,点击【Load】

Prometheus静态配置示例-5

填写【Name】并选择监控来源(prometheus)后,点击【Import】

Prometheus静态配置示例-6

说明:我这里已经导入过了,所以才会显示上面提示信息

这样就可以观察到域名监控情况了

Prometheus静态配置示例-7

6.如果你想添加新的域名,需要修改prometheus-additional.yaml文件

[root@k8s-master01 ~]# vim prometheus-additional.yaml
- job_name: 'blackbox'
  metrics_path: /probe
  params:
    module: [http_2xx] # Look for a HTTP 200 response.
  static_configs:
    - targets:
      - https://www.baidu.com # Target to probe with https.
      - https://www.aaa.com # Target to probe with https.
      - http://gaoxin.kubeasy.com
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: blackbox-exporter:19115 # The blackbox exporter's real hostname:port

修改完成进行更新,更新完成后就可以去登录Grafana页面验证查看了

[root@k8s-master01 ~]# kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml --dry-run=client -oyaml | kubectl replace -f - -n monitoring