Prometheus BlackBox简单监控

2023-10-17 23:59

本文主要是介绍Prometheus BlackBox简单监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Prometheus 监控简介

Prometheus 监控分为两种:

  • 白盒监控

  • 墨盒监控

白盒监控:是指我们日常监控主机的资源用量、容器的运行状态、数据库中间件的运行数据。这些都是支持业务和服务的基础设施,通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。

墨盒监控:即以用户的身份测试服务的外部可见性,常见的黑盒监控包括 HTTP探针TCP探针DnsIcmp等用于检测站点、服务的可访问性、服务的连通性,以及访问效率等。

两者比较:黑盒监控相较于白盒监控最大的不同在于黑盒监控是以故障为导向当故障发生时,黑盒监控能快速发现故障,而白盒监控则侧重于主动发现或者预测潜在的问题。一个完善的监控目标是要能够从白盒的角度发现潜在问题,能够在黑盒的角度快速发现已经发生的问题。

部署 Prometheus Blackbox 服务

环境:

  • Prometheus Operator 版本 v0.29.0(Prometheus Operator手动部署)

  • Kubernetes 版本 1.15.6 (二进制部署)

  • Blackbox Exporter 版本 v0.16.0

Blackbox Exporter 部署

Exporter Configmap 定义,可以参考下面两个链接 https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md https://github.com/prometheus/blackbox_exporter/blob/master/example.yml

首先得声明一个 Blackbox 的 Deployment,并利用 Configmap 来为 Blackbox 提供配置文件。

$ vim prometheus-blackbox.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: blackbox-confignamespace: monitoring
data:blackbox.yml: |-modules:http_2xx:  # http 检测模块  Blockbox-Exporter 中所有的探针均是以 Module 的信息进行配置prober: httptimeout: 10shttp:valid_http_versions: ["HTTP/1.1", "HTTP/2"]valid_status_codes: [200]  # 默认 2xx,这里定义一个返回状态码,在grafana作图时,有明示。method: GETheaders:Host: prometheus.example.comAccept-Language: en-USOrigin: example.compreferred_ip_protocol: "ip4" # 首选IP协议no_follow_redirects: false # 关闭跟随重定向http_post_2xx: # http post 监测模块prober: httptimeout: 10shttp:valid_http_versions: ["HTTP/1.1", "HTTP/2"]method: POST# post 请求headers, body 这里可以不声明headers:  # 使用 json 格式Content-Type: application/jsonbody: '{"text": "hello"}'preferred_ip_protocol: "ip4"tcp_connect:  # TCP 检测模块prober: tcptimeout: 10sdns_tcp:  # DNS 通过TCP检测模块prober: dnsdns:transport_protocol: "tcp"  # 默认是 udppreferred_ip_protocol: "ip4"  # 默认是 ip6query_name: "kubernetes.default.svc.cluster.local" # 利用这个域名来检查 dns 服务器# query_type: "A"  # 如果是 kube-dns ,一定要加入这个,因为不支持Ipv6
---
apiVersion: apps/v1
kind: Deployment
metadata:name: blackboxnamespace: monitoring
spec:replicas: 1revisionHistoryLimit: 3selector:matchLabels:app: blackboxstrategy:rollingUpdate:maxSurge: 30%maxUnavailable: 30%type: RollingUpdatetemplate:metadata:labels:app: blackboxspec:containers:- image: prom/blackbox-exporter:v0.16.0name: blackboxargs:- --config.file=/etc/blackbox_exporter/blackbox.yml # ConfigMap 中的配置文件- --log.level=info  # 日志级别,可以把级别调到 errorports:- containerPort: 9115volumeMounts:- name: configmountPath: /etc/blackbox_exportervolumes:- name: configconfigMap:name: blackbox-config
---
apiVersion: v1
kind: Service
metadata:name: blackboxnamespace: monitoring
spec:selector:app: blackboxports:- port: 9115targetPort: 9115
# 部署
$ kubectl apply -f prometheus-blackbox.yamlconfigmap/blackbox-config created
deployment.apps/blackbox created
service/blackbox created

定义 BlackBox 在 Prometheus 抓取设置

下面抓取设置,都存放在 prometheus-additional.yaml 文件中,设置可参考 https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml

DNS 监控

- job_name: "blackbox-k8s-service-dns"scrape_interval: 30sscrape_timeout: 10smetrics_path: /probe # 不是 metrics,是 probeparams:module: [dns_tcp] # 使用 DNS TCP 模块static_configs:- targets:- kube-dns.kube-system:53  # 不要省略端口号relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox:9115  # 服务地址,和上面的 Service 定义保持一致

更新 additional-configs secrets配置 ,Prometheus 会自动 reload

# 先删除,在重新创建
$ kubectl delete secrets -n monitoring additional-configs
$ kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring

看到下面输出结果,说明 Prometheus 已重载

打开 Prometheus 的 Target 页面,就会看到 上面定义的 blackbox-k8s-service-dns 任务,到 graph 页面,可以使用 probe_success 和 probe_duration_seconds 等来检查历史结果

HTTP 监控(K8S 内部发现方法)

发现 Service 监控

- job_name: 'kubernetes-http-services'metrics_path: /probeparams:module: [http_2xx]  # 使用定义的http模块kubernetes_sd_configs:- role: service  # service 类型的服务发现relabel_configs:# 只有service的annotation中配置了 prometheus.io/http_probe=true 的才进行发现- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_http_probe]action: keepregex: true- source_labels: [__address__]target_label: __param_target- target_label: __address__replacement: blackbox:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]target_label: kubernetes_name

按上面方法重载 Prometheus,打开 Prometheus 的 Target 页面,就会看到 上面定义的 blackbox-k8s-http-services 任务

自定义发现 Service 监控 端口 和 路径,可以如下设置:

- job_name: 'blackbox-k8s-http-services'scrape_interval: 30sscrape_timeout: 10smetrics_path: /probeparams:module: [http_2xx]  # 使用定义的http模块kubernetes_sd_configs:- role: service  # service 类型的服务发现relabel_configs:# 只有service的annotation中配置了 prometheus.io/http_probe=true 的才进行发现- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_http_probe]action: keepregex: true- source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_namespace, __meta_kubernetes_service_annotation_prometheus_io_http_probe_port, __meta_kubernetes_service_annotation_prometheus_io_http_probe_path]action: replacetarget_label: __param_targetregex: (.+);(.+);(.+);(.+)replacement: $1.$2:$3$4- target_label: __address__replacement: blackbox:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]target_label: kubernetes_name

然后,需要在 Service 中配置这样的 annotation :

annotation:prometheus.io/http-probe: "true"prometheus.io/http-probe-port: "8080"prometheus.io/http-probe-path: "/healthCheck"

按上面方法重载 Prometheus,打开 Prometheus 的 Target 页面,就会看到 上面定义的 blackbox-k8s-http-services 任务

发现 Ingress

- job_name: 'blackbox-k8s-ingresses'scrape_interval: 30sscrape_timeout: 10smetrics_path: /probeparams:module: [http_2xx]  # 使用定义的http模块kubernetes_sd_configs:- role: ingress  # ingress 类型的服务发现relabel_configs:# 只有ingress的annotation中配置了 prometheus.io/http_probe=true 的才进行发现- source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_http_probe]action: keepregex: true- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]regex: (.+);(.+);(.+)replacement: ${1}://${2}${3}target_label: __param_target- target_label: __address__replacement: blackbox:9115- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_ingress_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_ingress_name]target_label: kubernetes_name

按上面方法重载 Prometheus,会出现下面报错,报权限不足

解决方法:在 prometheus-clusterRole.yaml 后面添加下面内容

- apiGroups:- extensionsresources:- ingressesverbs:- get- list- watch
$ kubectl apply -f prometheus-clusterRole.yaml

打开 Prometheus 的 Target 页面,就会看到 上面定义的 blackbox-k8s-ingresses 任务

HTTP 监控(监控外部域名)

- job_name: "blackbox-external-website"scrape_interval: 30sscrape_timeout: 15smetrics_path: /probeparams:module: [http_2xx]static_configs:- targets:- https://www.example.com # 要检查的网址- https://test.example.comrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox:9115

打开 Prometheus 的 Target 页面,就会看到 上面定义的 blackbox-external-website 任务

HTTP Post 监控(监控外部域名)

- job_name: 'blackbox-http-post'metrics_path: /probeparams:module: [http_post_2xx]static_configs:- targets:- https://www.example.com/api # 要检查的网址relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: blackbox:9115

打开 Prometheus 的 Target 页面,就会看到 上面定义的 blackbox-http-post 任务

Grafana Dashboard

Grafana 官网找到的一个Dashboard

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

小结

Prometheus Blackbox 除了支持对 HTTP 协议进行网络探测以外,Blackbox 还支持对 TCP、DNS、ICMP 等其他网络协议,大家感兴趣的可以从 Blackbox 的 Github项目中获取更多使用方法。

参考链接

  • https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md

  • https://github.com/prometheus/blackbox_exporter/blob/master/example.yml

  • https://www.qikqiak.com/post/blackbox-exporter-on-prometheus/

  • https://blog.fleeto.us/post/blackbox-monitor-dns-web/

往期精彩文章

  • Kubernetes Pod 生命周期

  • kubectl 创建 Pod 背后到底发生了什么?

  • Docker 必修课程 Dockerfile

  • 阿里开源 k8s 事件通知服务

  • Kubernetes之容器数据写满磁盘解决方法

  • Nginx 基于客户端IP分析

您的关注是小站的动力

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

扫码『加群』交流技术

这篇关于Prometheus BlackBox简单监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228820

相关文章

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构