微信公众号:运维开发故事,作者:乔克

概述

在监控体系里面,通常我们认为监控分为:白盒监控和黑盒监控。

黑盒监控:主要关注的现象,一般都是正在发生的东西,例如出现一个告警,业务接口不正常,那么这种监控就是站在用户的角度能看到的监控,重点在于能对正在发生的故障进行告警。

白盒监控:主要关注的是原因,也就是系统内部暴露的一些指标,例如 redis 的 info 中显示 redis slave down,这个就是 redis info 显示的一个内部的指标,重点在于原因,可能是在黑盒监控中看到 redis down,而查看内部信息的时候,显示 redis port is refused connection。

Blackbox Exporter

Blackbox Exporter 是 Prometheus 社区提供的官方黑盒监控解决方案,其允许用户通过:HTTP、HTTPS、DNS、TCP 以及 ICMP 的方式对网络进行探测。

1、HTTP 测试

  • 定义 Request Header 信息

  • 判断 Http status / Http Respones Header / Http Body 内容

2、TCP 测试

  • 业务组件端口状态监听

  • 应用层协议定义与监听

3、ICMP 测试

  • 主机探活机制

4、POST 测试

  • 接口联通性

5、SSL 证书过期时间

安装Blackbox Exporter

(1)创建YAML配置文件(blackbox-deploymeny.yaml)

apiVersion: v1
kind: Service
metadata:name: blackboxnamespace: monitoringlabels:app: blackbox
spec:selector:app: blackboxports:- port: 9115targetPort: 9115
---
apiVersion: v1
kind: ConfigMap
metadata:name: blackbox-confignamespace: monitoring
data:blackbox.yaml: |-modules:http_2xx:prober: httptimeout: 10shttp:valid_http_versions: ["HTTP/1.1", "HTTP/2"]valid_status_codes: [200]method: GETpreferred_ip_protocol: "ip4"http_post_2xx:prober: httptimeout: 10shttp:valid_http_versions: ["HTTP/1.1", "HTTP/2"]valid_status_codes: [200]method: POSTpreferred_ip_protocol: "ip4"tcp_connect:prober: tcptimeout: 10sping:prober: icmptimeout: 5sicmp:preferred_ip_protocol: "ip4"dns:prober: dnsdns:transport_protocol: "tcp"preferred_ip_protocol: "ip4"query_name: "kubernetes.defalut.svc.cluster.local"
---
apiVersion: apps/v1
kind: Deployment
metadata:name: blackboxnamespace: monitoring
spec:selector:matchLabels:app: blackboxtemplate:metadata:labels:app: blackboxspec:containers:- name: blackboximage: prom/blackbox-exporter:v0.18.0args:- "--config.file=/etc/blackbox_exporter/blackbox.yaml"- "--log.level=error"ports:- containerPort: 9115volumeMounts:- name: configmountPath: /etc/blackbox_exportervolumes:- name: configconfigMap:name: blackbox-config

(2)创建即可

kubectl apply -f blackbox-deploymeny.yaml

配置监控

由于集群是用的Prometheus Operator方式部署的,所以就以additional的形式添加配置。

(1)创建prometheus-additional.yaml文件,定义内容如下:

- job_name: "ingress-endpoint-status"metrics_path: /probeparams:module: [http_2xx]  # Look for a HTTP 200 response.static_configs:- targets:- http://172.17.100.134/healthzlabels:group: nginx-ingressrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox.monitoring:9115
- job_name: "kubernetes-service-dns"metrics_path: /probeparams:module: [dns]static_configs:- targets:- kube-dns.kube-system:53relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox.monitoring:9115
- job_name: "node-icmp-status"

(2)创建secret

kubectl -n monitoring create secret generic additional-config --from-file=prometheus-additional.yaml

(3)修改prometheus的配置,文件prometheus-prometheus.yaml

添加以下三行内容:

additionalScrapeConfigs:name: additional-config key: prometheus-additional.yaml

完整配置如下:

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:labels:prometheus: k8sname: k8snamespace: monitoring
spec:alerting:alertmanagers:- name: alertmanager-mainnamespace: monitoringport: webbaseImage: quay.io/prometheus/prometheusnodeSelector:kubernetes.io/os: linuxpodMonitorNamespaceSelector: {}podMonitorSelector: {}replicas: 2resources:requests:memory: 400MiruleSelector:matchLabels:prometheus: k8srole: alert-rulessecurityContext:fsGroup: 2000runAsNonRoot: truerunAsUser: 1000additionalScrapeConfigs:name: additional-config key: prometheus-additional.yaml serviceAccountName: prometheus-k8sserviceMonitorNamespaceSelector: {}serviceMonitorSelector: {}version: v2.11.0storage:volumeClaimTemplate:spec:storageClassName: managed-nfs-storage resources:requests:storage: 10Gi

(4)重新apply配置

kubectl apply -f prometheus-prometheus.yaml

(5)reload prometheus

先找到svc的IP

# kubectl get svc -n monitoring -l prometheus=k8s
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
prometheus-k8s   ClusterIP   10.99.93.157   <none>        9090/TCP   33m

使用以下命令reload

curl -X POST "http://10.99.93.157:9090/-/reload"

后面修改配置文件,使用以下三条命令即可

kubectl delete secret additional-config -n monitoring
kubectl -n monitoring create secret generic additional-config --from-file=prometheus-additional.yaml
curl -X POST "http://10.99.93.157:9090/-/reload"

等待一段时间,即可在prometheus的web界面看到如下target

image.png

ICMP监控

ICMP主要是通过ping命令来检测目的主机的连通性。

配置如下:

- job_name: "node-icmp-status"metrics_path: /probeparams:module: [ping]  # Look for a HTTP 200 response.static_configs:- targets:- 172.17.100.134- 172.17.100.50- 172.17.100.135- 172.17.100.136- 172.17.100.137- 172.17.100.138labels:group: k8s-node-pingrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox.monitoring:9115

然后重载配置文件

kubectl delete secret additional-config -n monitoring
kubectl -n monitoring create secret generic additional-config --from-file=prometheus-additional.yaml
curl -X POST "http://10.99.93.157:9090/-/reload"

接下来可以看到监控成功,如下:

image.png

HTTP监控

HTTP就是通过GET或者POST的方式来检测应用是否正常。

这里配置GET方式。

- job_name: "check-web-status"metrics_path: /probeparams:module: [http_2xx]  # Look for a HTTP 200 response.static_configs:- targets:- https://www.coolops.cn- https://www.baidu.comlabels:group: web-urlrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox.monitoring:9115

重载配置后可以看到监控如下:

image.png

TCP监控

TCP监控主要是通过类似于Telnet的方式进行检测,配置如下:

- job_name: "check-middleware-tcp"metrics_path: /probeparams:module: [tcp_connect]  # Look for a HTTP 200 response.static_configs:- targets:- 172.17.100.135:80- 172.17.100.74:3306- 172.17.100.25:3306- 172.17.100.8:3306- 172.17.100.75:3306- 172.17.100.72:3306- 172.17.100.73:3306labels:group: middleware-tcprelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox.monitoring:9115

重载配置文件后监控如下:

image.png

告警规则

1、业务正常性

  • icmp、tcp、http、post 监测是否正常可以观察probe_success 这一指标

  • probe_success == 0 ##联通性异常

  • probe_success == 1 ##联通性正常

  • 告警也是判断这个指标是否等于0,如等于0 则触发异常报警

image.png

2、通过 http 模块我们可以获取证书的过期时间,可以根据过期时间添加相关告警

probe_ssl_earliest_cert_expiry :可以查询证书到期时间。

image.png

经过单位转换我们可以得到一下,按天来计算:(probe_ssl_earliest_cert_expiry - time())/86400

image.png

3、所以我们结合上面的配置可以定制如下告警规则

groups:
- name: blackbox_network_statsrules:- alert: blackbox_network_statsexpr: probe_success == 0for: 1mlabels:severity: criticalannotations:summary: "接口/主机/端口连通异常告警"description: "接口/主机/端口 {{ $labels.instance }}  连通异常"

ssl检测

groups:
- name: check_ssl_statusrules:- alert: "ssl证书过期警告"expr: (probe_ssl_earliest_cert_expiry - time())/86400 <30for: 1hlabels:severity: warnannotations:description: '域名{{$labels.instance}}的证书还有{{ printf "%.1f" $value }}天就过期了,请尽快更新证书'summary: "ssl证书过期警告"

Grafana面板

直接使用12559,导入即可。

image.png

导入后就是这个样子。

image.png

公众号:运维开发故事

github:https://github.com/orgs/sunsharing-note/dashboard

爱生活,爱运维

如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我最大的动力。喜欢就请关注我吧~

扫码二维码

关注我,不定期维护优质内容

温馨提示

如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。

                                          ........................

使用blackbox_exporter进行黑盒监控相关推荐

  1. CC00332.CloudKubernetes——|KuberNetes运维.V50|——|黑盒监控.v05|blackbox.v05|targets获取不到值|

    附录一:targets获取不到值 ### --- 报错现象:targets获取不到值 ### --- 报错分析:~~~ 黑盒监控是没有热更新的,而Prometheus是有热更新的, ~~~ 监控是需要 ...

  2. 黑盒监控(black_exporter)

    安装 /usr/bin/blackbox_exporter --config.file=/usr/local/prometheus/conf/blackbox.yml --log.level=warn ...

  3. blackbox_exporter端口及网络监控

    一.背景概述 Blackbox(黑盒)监控指的是指检测外部暴露出来的,能够被用户所看到.观察到的较表面的数据,比如WEB响应.网络是否通畅.端口连通性等指标,黑盒监控不会深入到程序或系统内部中去,能够 ...

  4. Prometheus黑盒监测之blackbox_exporter

    1 什么是黑盒监控 我们监控主机的资源用量.容器的运行状态.数据库中间件的运行数据.这些都是支持业务和服务的基础设施,通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题, ...

  5. 性能监控之 blackbox_exporter+Prometheus+Grafana 实现网络探测

    文章目录 一.什么是黑盒监控? 二.blackbox_exporter 简介 三.安装 1.二进制包 2.docker 四.使用原理 五.几种应用场景 1.ICMP 测试(主机探活) 2.TCP 测试 ...

  6. 【Prometheus 】 Blackbox_exporter 指标 probe_http_duration_seconds

    Prometheus 之 Blackbox_exporter 黑盒测试 probe_http_duration_seconds phase 值的解析 - resolve:DNS解析持续时间 - con ...

  7. Prometheus企业级监控——理论入门

      本文由于工作任务需要,快速入门了一下Prometheus的一些相关理论知识,供开发过程中快速查阅. 一:监控概念&误区 监控是管理基础设施和业务的核心工具,监控应该和应用程序一起构建和部署 ...

  8. prometheus监控-1

    1.prometheus安装 1.1 prometheus安装 tar -xzvf sotf/prometheus-2.35.0.linux-amd64.tar.gz -C ./app/ 1.2 pr ...

  9. Prometheus监控实战系列十七:探针监控

    目前对于应用程序的监控主要有两种方式,一种被称为白盒监控,它通过获取目标的内部信息指标,来监控目标的状态情况,我们前面介绍的主机监控.容器监控都属于此类监控.另一种则是"黑盒监控" ...

最新文章

  1. iOS开发UI篇—核心动画简介
  2. vbs画动态爱心代码_前端必看之如何用CSS3画一个八卦和爱心
  3. oracle dump函数
  4. CTF-Web-常用伪协议用法:
  5. HDU - 2594 Simpsons’ Hidden Talents(KMP的next数组)
  6. C++工作笔记-枚举类型的作用
  7. Hadoop怎么了,大数据路在何方?
  8. 最优布线问题(信息学奥赛一本通-T1349)
  9. SecureRandom-随机数的生成
  10. 交换机在局域网内的日常工作
  11. Java三大框架SSH简介
  12. switchhost
  13. animate将flash转换html,Animate—flash动画入门到精通教程
  14. 第十五周助教心得体会
  15. animation动画不生效_你可能不知道的Animation动画技巧与细节
  16. 火狐浏览器设置背景图片
  17. PHP微信公众号网页授权登录 扫码登录 获取用户基本信息
  18. android mux协议,协议细节 - Mux.Cool - 《Project V(V2RAY)文档手册》 - 书栈网 · BookStack...
  19. 游戏-虚幻引擎-初识
  20. Python入门-Day5

热门文章

  1. Android 架构篇----------Framework初识,android音视频开发何俊林pdf
  2. 华为留不住人才,任正非痛心
  3. Window 10 Google Chrome无法启动更新检查(错误代码为1:0x80004005)
  4. checklist编写指南
  5. 班德尔服务器最新所在地,LOL:班德尔城被誉为四川区,班德尔城服务器在四川,延迟只有4...
  6. 说说Unicode这个东东!
  7. checkbox java选中的值_CheckBox 选中取值以及回填
  8. 利用python 进行数据分析全书总结
  9. html中文本两端对齐的属性,text-algin:justify实现文本两端对齐方法小结
  10. MindManager 22.0