kube-prometheus 使用blackbox进行icmp 监控

news2024/11/26 18:44:44

安装kube-prometheus 后默认在monitoring namespace中有创建 blackbox-exporter deployment。但默认没有icmp的module配置,无法执行ping探测。因为即使有icmp module,默认配置也是无法执行ping探测的(这篇文章要解决的就是这个问题),这可能也是默认没有icmp module的原因。

首先把icmp module加上,然后增加icmp 的probe配置:

第一步修改blackbox 的config map,添加icmp的modules:

kubectl -n monitoring edit cm blackbox-exporter-configuration
添加如下module配置
      "icmp_example":
         "prober": "icmp"
         "timeout": "5s"
         "icmp":
            "preferred_ip_protocol": "ip4"

创建probe

注意这里的module 名要与刚创建的对应

kind: Probe
apiVersion: monitoring.coreos.com/v1
metadata:
  name: example-ping
  namespace: monitoring
spec:
  interval: 60s
  module: icmp_example
  prober:
    url: blackbox-exporter.monitoring.svc.cluster.local:19115
  targets:
    staticConfig:
      static:
      - 127.0.0.1

至此,你的prometheus中应该有这个target了,并且状态也是up,类似如下
在这里插入图片描述
但是在Prometheus 中查询 probe_success 的结果时返回值是0,也就时ping不通。值为1表示ping成功。

此时检查blcakbox-exporter的日志毫无发现。
下面调整日志级别为debug试试

在blackbox容器args新曾参数--log.level=debug
kubectl -n monitoring edit deployments.apps  blackbox-exporter 
      containers:
      - args:
        - --config.file=/etc/blackbox_exporter/config.yml
        - --web.listen-address=:19115
        - --log.level=debug #新增行,开启debug模式

开启debug日志后再查看日志,将看到有如下报错

ts=2023-08-08T01:15:43.133Z caller=handler.go:184 module=icmp_example target=192.168.199.123 level=debug msg="Unable to do unprivileged listen on socket, will attempt privileged" err="socket: permission denied"
ts=2023-08-08T01:15:43.133Z caller=handler.go:184 module=icmp_example target=192.168.199.123 level=debug msg="Error listening to socket" err="listen ip4:icmp 0.0.0.0: socket: operation not permitted"
ts=2023-08-08T01:15:43.133Z caller=handler.go:184 module=icmp_example target=192.168.199.123 level=debug msg="Probe failed" duration_seconds=0.00031592

这看起来是权限问题导致的。找到如下解释:
https://github.com/prometheus/blackbox_exporter#permissions

The ICMP probe requires elevated privileges to function:
Windows: Administrator privileges are required.
Linux: either a user with a group within net.ipv4.ping_group_range, the CAP_NET_RAW capability or the root user is required.
1. Your distribution may configure net.ipv4.ping_group_range by default in /etc/sysctl.conf or similar. If not you can set net.ipv4.ping_group_range = 0 2147483647 to allow any user the ability to use ping.
2. Alternatively the capability can be set by executing setcap cap_net_raw+ep blackbox_exporter
BSD: root user is required.
bNo additional privileges are needed.

Linux ping 命令需要 “cap_net_raw”(或 “CAP_NET_RAW”)的 Capabilities 权限,因为该命令需要对数据包进行原始套接字访问。如果不具备此权限,则无法构建和发送 ICMP 包,或者无法接 ICMP 包的响应。
请注意,ping 命令需要在网络层上执行操作,因此它需要特殊的权限。使用 Capabilities 机制覆盖了普通 Linux 用户的权限限制。设置 “cap_net_raw” 权限时,用户将能够执行“ping”命令,而无需以 root 用户的身份登录到系统。
如果使用 root 用户运行 ping 命令,则无需为 ping 命令设置 “cap_net_raw” 的 Capabilities 权限即可成功运行。这是因为 root 用户具有所有系统资源和 Capabilities 权限。使用 root 用户时,系统将允许 ping 命令访问原始套接字,而无需 Capabilities 权限。

那么也就说应该有两种方式解决这个问题,一是简单粗暴使用root运行(安全性低)。二是给与容器NET_RAW权限。下面分别测试一下:

方案1,给root权限

kubectl -n monitoring edit deployments.apps  blackbox-exporter
	securityContext部分修改为如下:
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsNonRoot: false
          runAsUser: 0

  (注意这里去掉了原来的capabilities)也就是这部分,因为即使是有root权限,如果显示的移除了权限,也仍然没权限。
         capabilities:
            drop:          
            - ALL

这样修改之后再在Prometheus 中查询 probe_success 的结果值应该是1了。也就是正常了。

再看第二种方案:为容器增加NET_RAW
开始想直接修改deployment的capabilities配置,加上如下配置即可。

        capabilities:
            add:
            - NET_RAW

但是经过测试发现不行,初步判断是因为blackbox-exporter容器镜像本身处于安全性考虑的原因,禁用了一些权限,(如Alpine 镜像,加也没效果,可以通过进入容器内cat /proc/1/status命令查看CapPrm和CapEff的值。可参照文档 https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/security-context/)

在 Linux 操作系统中,进程的系统权限可以通过掩码方式进行控制。这些掩码通常被称为“capabilities”,每个掩码通常代表一项特定的系统操作功能。
如果 /proc/1/status 文件中 CapPrm 和 CapEff 的值都为 0,这意味着该进程没有启用任何权限。这可能是由于系统管理员将该进程的权限掩码设置为 0,或者该进程在启动时未显式启用任何额外的权限。另外一些 Linux 发行版(如 Alpine)默认在容器中禁用权限,因此 /proc/1/status 中的权限值通常为 0。如果您有特定的权限要求,请确保正确配置容器和 Pod 的权限

所以如果我们即不想用root用户运行blackbox,又想用icmp监控。则需要重新build一个镜像。
Dockerfile 如下

FROM scionproto/docker-caps as caps

FROM prom/blackbox-exporter:v0.23.0
COPY --from=caps /bin/setcap /bin
RUN setcap cap_net_raw+ep /bin/blackbox_exporter && rm /bin/setcap

修改blackbox-exporter deployment 的镜像为刚刚build的镜像。再修改securityContext配置,去掉原有的:

        capabilities:
            drop:          
            - ALL
	securityContext部分修改为如下:
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 65534

blackbox-extporter pod正常运行后在Prometheus 中查询 probe_success 的结果值应该是1了。也就是正常了。

参考资料
https://blog.csdn.net/qq_33745102/article/details/131042025
https://github.com/prometheus/blackbox_exporter/issues/689
https://github.com/scionproto/docker-caps

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hive编译报错整理

背景 最近在修hive-1.2.0的一个bug,需要修改后重新打包部署到集群,打包的时候报下面的错误,原因很简单,从远程仓库里面已经拉不到这个包了。 org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde was not found in http…

【Rust】Rust学习 第六章枚举和模式匹配

本章介绍 枚举(enumerations),也被称作 enums。枚举允许你通过列举可能的 成员(variants) 来定义一个类型。首先,我们会定义并使用一个枚举来展示它是如何连同数据一起编码信息的。接下来,我们会…

设计模式行为型——观察者模式

目录 什么是观察者模式 观察者模式的实现 观察者模式角色 观察者模式类图 观察者模式举例 观察者模式代码实现 观察者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是观察者模式 观察者模式(Observer Pattern)是一种行为型设计模式…

【css】渐变

渐变是设置一种颜色或者多种颜色之间的过度变化。 两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线) 径向渐变(由其中心定义) 1、线性渐变 语法:background-image: linear-gradient(direction, co…

【搜索框的匹配功能】

功能需求: 1. 输入关键字的同时,以下拉列表的形式显示匹配的内容; 2. 点击下拉列表的选项,跳转到对应的新的页面 注意:这里读取data.txt(检索的文件对象),会存在跨域的问题&#x…

【深度学习可视化系列】—— 特征图可视化(支持Vit系列模型的特征图可视化,包含使用Tensorboard对可视化结果进行保存)

【深度学习可视化系列】—— 特征图可视化(支持Vit系列模型的特征图可视化,包含使用Tensorboard对可视化结果进行保存) import sys import os import torch import cv2 import timm import numpy as np import torch.nn as nn import album…

Ubuntu 20.04 安装 Stable Diffusionn

步骤 1:安装 wget、git、Python3 和 Python3虚拟环境(如果已安装可忽略这步骤) sudo apt install wget git python3 python3-venv步骤 2:克隆 SD 项目到本地 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webu…

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升

近日,亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试,亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外,双方进一步开展TP…

nacos升级开启鉴权后,微服务无法连接的解决方案

版本: 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本,开启鉴权 1.在application.properties配置文件开启鉴权&…

【资料分享】全志科技T507-H开发板规格书

1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产…

sentinel---滑动窗口的实现原理

sentinel有多种规则,包括:降级、限流、热点等等规则,这些规则均会涉及到时间因素,既在单位时间内的请求量满足各种条件之后的各种动作。 这里我们一起来探针一下sentinel中滑动窗口的实现 如上是一个滑动窗口的示意图。 这里先不…

电脑IP地址错误无法上网怎么办?

电脑出现IP地址错误后就将无法连接网络,从而无法正常访问互联网。那么当电脑出现IP地址错误时该怎么办呢? 确认是否禁用本地连接 你需要先确定是否禁用了本地网络连接,如果发现禁用,则将其启用即可。 启用方法:点击桌…

设计实现数据库表扩展的7种方式

设计实现数据库表扩展的7种方式 在软件开发过程中,数据库是一项关键技术,用于存储、管理和检索数据。数据库表设计是构建健壮数据库系统的核心环节之一。然而,随着业务需求的不断演变和扩展,数据库表中的字段扩展变得至关重要。 …

【TensorFlow】P0 Windows GPU 安装 TensorFlow、CUDA Toolkit、cuDNN

Windows 安装 TensorFlow、CUDA Toolkit、cuDNN 整体流程概述TensorFlow 与 CUDA ToolkitTensorFlow 是一个基于数据流图的深度学习框架CUDA 充分利用 NIVIDIA GPU 的计算能力CUDA Toolkit cuDNN 安装详细流程整理流程一:安装 CUDA Toolkit步骤一:获取CU…

GIS和倾斜摄影的关系?

GIS(地理信息系统)和倾斜摄影是两种在地理空间数据处理和分析中扮演重要角色的技术。但是我们总是会分不清二者,本文就带大家从不同角度了解二者之间的关系。 概念 GIS是一种用来捕获、存储、分析和展示地理空间数据的技术,它可以…

Java课题笔记~ Spring 集成 MyBatis

Spring 集成 MyBatis 将 MyBatis 与 Spring 进行整合,主要解决的问题就是将 SqlSessionFactory 对象交由 Spring 来管理。所以该整合,只需要将 SqlSessionFactory 的对象生成器SqlSessionFactoryBean 注册在 Spring 容器中,再将其注入给 Dao…

Apollo让自动驾驶如此简单

前言: 最近被新能源的电价闹的不行,买了电车的直呼上当了、不香了。但电车吸引人不只是公里油耗低,还有良好的驾车使用感。比如辅助驾驶、甚至是自动驾驶。今天来介绍一个头部自动驾驶平台Apollo,Apollo是一个开源的、自动驾驶的软…

【Hystrix技术指南】(4)故障切换的运作流程

[每日一句] 也许你度过了很糟糕的一天,但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加,随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中,【熔断、隔离、降级、限流】是经常被使…

iperf3-性能测试

iperf3-性能测试 安装1.apt安装2.源码安装 使用方法iperf原理测试参考文档性能测试客户端服务端 官方文档:https://iperf.fr/iperf-doc.php 安装 1.apt安装 sudo apt-get install iperf32.源码安装 # 按照官方说明安装 ./configure make sudo make install执行编…

OceanBase 4.1.0 clog 目录探究

基于OceanBase 4.x 版本如何统计租户每日 clog 日志生成量的背景下,探究以及如何查看租户 clog 的使用情况。 作者:姜宇 爱可生 DBA 团队成员,擅长数据库故障排查和处理。对技术抱有热忱,实践是检验真理的唯一标准~ 本文来源&…