Prometheus(八)-网络嗅探-黑盒监控

这篇具有很好参考价值的文章主要介绍了Prometheus(八)-网络嗅探-黑盒监控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

Blackbox Exporter是Prometheus社区提供的官方黑盒监控解决方案,其允许用户通过:HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测。用户可以直接使用go get命令获取Blackbox Exporter源码并生成本地可执行文件:

go get prometheus/blackbox_exporter

github 地址:
https://github.com/prometheus/blackbox_exporter

部署

1 二进制方式

1.1 下载解压

curl -o blackbox_exporter-0.24.0.linux-amd64.tar.gz https://github.com/prometheus/blackbox_exporter/releases/download/v0.24.0/blackbox_exporter-0.24.0.linux-amd64.tar.gz

tar -xf blackbox_exporter-0.24.0.linux-amd64.tar.gz  -C /usr/local/
mv /usr/local/blackbox_exporter-0.24.0.linux-amd64 /usr/local/blackbox_exporter-0.24.0

1.2 配置 systemd

[Unit]
Description=The blackbox exporter
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/blackbox_exporter-0.24.0/blackbox_exporter --config.file=/usr/local/blackbox_exporter-0.24.0/blackbox.yml

KillSignal=SIGQUIT

Restart=always

RestartPreventExitStatus=1 6 SIGABRT

TimeoutStopSec=5
KillMode=process
PrivateTmp=true
LimitNOFILE=1048576
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target

1.3 配置文件 blackbox.yml

2 容器方式

docker 镜像地址
https://hub.docker.com/r/prom/blackbox-exporter/tags

docker pull prom/blackbox-exporter:v0.23.0

运行Blackbox Exporter时,需要用户提供探针的配置信息,这些配置信息可能是一些自定义的HTTP头信息,也可能是探测时需要的一些TSL配置,也可能是探针本身的验证行为。在Blackbox Exporter每一个探针配置称为一个module,并且以YAML配置文件的形式提供给Blackbox Exporter。 每一个module主要包含以下配置内容,包括探针类型(prober)、验证访问超时时间(timeout)、以及当前探针的具体配置项:

  # 探针类型:http、 tcp、 dns、 icmp.
  prober: <prober_string>

  # 超时时间
  [ timeout: <duration> ]

  # 探针的详细配置,最多只能配置其中的一个
  [ http: <http_probe> ]
  [ tcp: <tcp_probe> ]
  [ dns: <dns_probe> ]
  [ icmp: <icmp_probe> ]

下面是一个简化的探针配置文件blockbox.yml,包含两个HTTP探针配置项:

modules:
  http_2xx:
    prober: http
    timeout: 10s
    http:
      method: GET
      preferred_ip_protocol: "ip4"
  http_post_2xx:
    prober: http
    http:
      method: POST

通过运行以下命令,并指定使用的探针配置文件启动Blockbox Exporter实例:

blackbox_exporter --config.file=/etc/prometheus/blackbox.yml

启动成功后,就可以通过访问http://127.0.0.1:9115/probe?module=http_2xx&target=baidu.com对baidu.com进行探测。这里通过在URL中提供module参数指定了当前使用的探针,target参数指定探测目标,探针的探测结果通过Metrics的形式返回:

# HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds
# TYPE probe_dns_lookup_time_seconds gauge
probe_dns_lookup_time_seconds 0.011633673
# HELP probe_duration_seconds Returns how long the probe took to complete in seconds
# TYPE probe_duration_seconds gauge
probe_duration_seconds 0.117332275
# HELP probe_failed_due_to_regex Indicates if probe failed due to regex
# TYPE probe_failed_due_to_regex gauge
probe_failed_due_to_regex 0
# HELP probe_http_content_length Length of http content response
# TYPE probe_http_content_length gauge
probe_http_content_length 81
# HELP probe_http_duration_seconds Duration of http request by phase, summed over all redirects
# TYPE probe_http_duration_seconds gauge
probe_http_duration_seconds{phase="connect"} 0.055551141
probe_http_duration_seconds{phase="processing"} 0.049736019
probe_http_duration_seconds{phase="resolve"} 0.011633673
probe_http_duration_seconds{phase="tls"} 0
probe_http_duration_seconds{phase="transfer"} 3.8919e-05
# HELP probe_http_redirects The number of redirects
# TYPE probe_http_redirects gauge
probe_http_redirects 0
# HELP probe_http_ssl Indicates if SSL was used for the final redirect
# TYPE probe_http_ssl gauge
probe_http_ssl 0
# HELP probe_http_status_code Response HTTP status code
# TYPE probe_http_status_code gauge
probe_http_status_code 200
# HELP probe_http_version Returns the version of HTTP of the probe response
# TYPE probe_http_version gauge
probe_http_version 1.1
# HELP probe_ip_protocol Specifies whether probe ip protocol is IP4 or IP6
# TYPE probe_ip_protocol gauge
probe_ip_protocol 4
# HELP probe_success Displays whether or not the probe was a success
# TYPE probe_success gauge
probe_success 1

从返回的样本中,用户可以获取站点的DNS解析耗时、站点响应时间、HTTP响应状态码等等和站点访问质量相关的监控指标,从而帮助管理员主动的发现故障和问题。

与Prometheus集成

接下来,只需要在Prometheus下配置对Blockbox Exporter实例的采集任务即可。最直观的配置方式

- job_name: baidu_http2xx_probe
  params:
    module:
    - http_2xx
    target:  
    - baidu.com
  metrics_path: /probe
  static_configs:
  - targets:
    - 127.0.0.1:9115
- job_name: prometheus_http2xx_probe
  params:
    module:
    - http_2xx
    target:
    - prometheus.io
  metrics_path: /probe
  static_configs:
  - targets:
    - 127.0.0.1:9115

假如我们有N个目标站点且都需要M种探测方式,那么Prometheus中将包含N * M个采集任务,从配置管理的角度来说显然是不可接受的。

这里我们也可以采用Relabling的方式对这些配置进行简化,配置方式如下:

scrape_configs:
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://prometheus.io    # Target to probe with http.
        - https://prometheus.io   # Target to probe with https.
        - http://example.com:8080 # Target to probe with http on port 8080.
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115 

http://127.0.0.1:9115/probe?module=http_2xx&target=baidu.com

  • 第1步,根据 static_configs.targets 实例的地址,写入 __param_target 标签中。__param_<name> 形式的标签表示,采集任务时会在请求目标地址中添加<name>参数的值,等同于params的设置;
  • 第2步,获取 __param_target的值,并覆写到 instance 标签中;
  • 第3步,覆写Target实例的__address__标签值为BlockBox Exporter实例的访问地址。

blackbox.yml

modules:
  http_2xx:
    prober: http
  http_post_2xx:
    prober: http
    http:
      method: POST
      preferred_ip_protocol: "ip4"
  tcp_connect:
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  grpc:
    prober: grpc
    grpc:
      tls: true
      preferred_ip_protocol: "ip4"
  grpc_plain:
    prober: grpc
    grpc:
      tls: false
      service: "service1"
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
      - send: "SSH-2.0-blackbox-ssh-check"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
      - send: "NICK prober"
      - send: "USER prober prober prober :prober"
      - expect: "PING :([^ ]+)"
        send: "PONG ${1}"
      - expect: "^:[^ ]+ 001" 
  icmp:
    prober: icmp
  icmp_ttl5:
    prober: icmp
    timeout: 5s
    icmp:
      ttl: 5

example.yml文章来源地址https://www.toymoban.com/news/detail-628595.html

modules:
 http_2xx_example:
   prober: http
   timeout: 5s
   http:
     valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
     valid_status_codes: []  # Defaults to 2xx
     method: GET
     headers:
       Host: vhost.example.com
       Accept-Language: en-US
       Origin: example.com
     no_follow_redirects: false
     fail_if_ssl: false
     fail_if_not_ssl: false
     fail_if_body_matches_regexp:
       - "Could not connect to database"
     fail_if_body_not_matches_regexp:
       - "Download the latest version here"
     fail_if_header_matches: # Verifies that no cookies are set
       - header: Set-Cookie
         allow_missing: true
         regexp: '.*'
     fail_if_header_not_matches:
       - header: Access-Control-Allow-Origin
         regexp: '(\*|example\.com)'
     tls_config:
       insecure_skip_verify: false
     preferred_ip_protocol: "ip4" # defaults to "ip6"
     ip_protocol_fallback: false  # no fallback to "ip6"
 http_with_proxy:
   prober: http
   http:
     proxy_url: "http://127.0.0.1:3128"
     skip_resolve_phase_with_proxy: true
 http_with_proxy_and_headers:
   prober: http
   http:
     proxy_url: "http://127.0.0.1:3128"
     proxy_connect_header:
       Proxy-Authorization:
         - Bearer token
 http_post_2xx:
   prober: http
   timeout: 5s
   http:
     method: POST
     headers:
       Content-Type: application/json
     body: '{}'
 http_basic_auth_example:
   prober: http
   timeout: 5s
   http:
     method: POST
     headers:
       Host: "login.example.com"
     basic_auth:
       username: "username"
       password: "mysecret"
 http_custom_ca_example:
   prober: http
   http:
     method: GET
     tls_config:
       ca_file: "/certs/my_cert.crt"
 http_gzip:
   prober: http
   http:
     method: GET
     compression: gzip
 http_gzip_with_accept_encoding:
   prober: http
   http:
     method: GET
     compression: gzip
     headers:
       Accept-Encoding: gzip
 tls_connect:
   prober: tcp
   timeout: 5s
   tcp:
     tls: true
 tcp_connect_example:
   prober: tcp
   timeout: 5s
 imap_starttls:
   prober: tcp
   timeout: 5s
   tcp:
     query_response:
       - expect: "OK.*STARTTLS"
       - send: ". STARTTLS"
       - expect: "OK"
       - starttls: true
       - send: ". capability"
       - expect: "CAPABILITY IMAP4rev1"
 smtp_starttls:
   prober: tcp
   timeout: 5s
   tcp:
     query_response:
       - expect: "^220 ([^ ]+) ESMTP (.+)$"
       - send: "EHLO prober\r"
       - expect: "^250-STARTTLS"
       - send: "STARTTLS\r"
       - expect: "^220"
       - starttls: true
       - send: "EHLO prober\r"
       - expect: "^250-AUTH"
       - send: "QUIT\r"
 irc_banner_example:
   prober: tcp
   timeout: 5s
   tcp:
     query_response:
       - send: "NICK prober"
       - send: "USER prober prober prober :prober"
       - expect: "PING :([^ ]+)"
         send: "PONG ${1}"
       - expect: "^:[^ ]+ 001"
 icmp_example:
   prober: icmp
   timeout: 5s
   icmp:
     preferred_ip_protocol: "ip4"
     source_ip_address: "127.0.0.1"
 dns_udp_example:
   prober: dns
   timeout: 5s
   dns:
     query_name: "www.prometheus.io"
     query_type: "A"
     valid_rcodes:
       - NOERROR
     validate_answer_rrs:
       fail_if_matches_regexp:
         - ".*127.0.0.1"
       fail_if_all_match_regexp:
         - ".*127.0.0.1"
       fail_if_not_matches_regexp:
         - "www.prometheus.io.\t300\tIN\tA\t127.0.0.1"
       fail_if_none_matches_regexp:
         - "127.0.0.1"
     validate_authority_rrs:
       fail_if_matches_regexp:
         - ".*127.0.0.1"
     validate_additional_rrs:
       fail_if_matches_regexp:
         - ".*127.0.0.1"
 dns_soa:
   prober: dns
   dns:
     query_name: "prometheus.io"
     query_type: "SOA"
 dns_tcp_example:
   prober: dns
   dns:
     transport_protocol: "tcp" # defaults to "udp"
     preferred_ip_protocol: "ip4" # defaults to "ip6"
     query_name: "www.prometheus.io"

Granfana

到了这里,关于Prometheus(八)-网络嗅探-黑盒监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Prometheus监控实战之Prometheus监控K8S

    Cadvisor + node-exporter + prometheus + grafana Cadvisor:数据采集 node-exporter:汇总 prometheus:处理、存储 grafana:展示 容器监控:Prometheus使用cadvisor采集容器监控指标,而 cadvisor集成在K8S的kubelet中所以无需部署 ,通过Prometheus进程存储,使用grafana进行展示。 node节点监控:node端的监控通

    2023年04月21日
    浏览(59)
  • Prometheus详解(十)——Prometheus容器监控

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Prometheus容器监控。 我们有时需要使用Prometheus监控Kubernetes集群中的容器,包括容器的内存、CPU、网络I/O等资源。在Kubernetes中,有内置的cAdvisor组件,用于Prometheus的容器监控设置。 接下来,我们就开始Prometheus利用cAdvis

    2024年02月06日
    浏览(64)
  • Prometheus实战篇:Prometheus监控rabbitmq

    docker-compose安装rabbitmq 这里注意rabbitmq需要暴露2个端口 docker-compose.yaml docker安装exporter docker直接运行 docker-compose方式 启动 检查 参数解释 Environment variable 值 描述 RABBIT_URL localhost:15672 rabbitmq管理插件的url(必须以http(2)开头) RABBIT_USER guest rabbitmq管理插件的用户名 REDIS_PASSWORD gues

    2024年01月24日
    浏览(36)
  • [从零构建Prometheus监控] 第一节:设计思路与prometheus监控架构

    Prometheus 是一款开源的系统监控和警报工具,最初由SoundCloud开发并贡献给开源社区,目前已成为云原生监控领域的主流工具。它能够收集、存储、查询和可视化各种系统和应用程序的度量数据,并提供强大的警报机制以及灵活的查询语言( PromQL )。 Prometheus 采用pull方式,通

    2024年02月06日
    浏览(70)
  • 云原生监控系统Prometheus:基于Prometheus构建智能化监控告警系统

    目录 一、理论 1.Promethues简介 2.监控告警系统设计思路 3.Prometheus监控体系 4.Prometheus时间序列数据 5.Prometheus的生态组件 6.Prometheus工作原理 7.Prometheus监控内容 8.部署Prometheus 9.部署Exporters 10.部署Grafana进行展示 二、实验 1.部署Prometheus 2.部署Exporters 2.监控远程MySQL 3.部署Grafana进行

    2024年02月07日
    浏览(49)
  • Prometheus-06 Prometheus与其他监控解决方案的对比

    在现代技术环境中,监控和管理系统的健康状态至关重要。许多监控解决方案可供选择,其中Prometheus作为一种开源系统监控解决方案,逐渐崭露头角。本文将对Prometheus与其他主流监控解决方案进行比较,并探讨其优势和劣势。 Prometheus Prometheus是一种开源的监控系统,由Sou

    2024年02月10日
    浏览(37)
  • 【监控】Prometheus(普罗米修斯)监控概述

    监控系统在这里特指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警。企业的 IT 架构逐步从传统的物理服务器,迁移到以虚拟机为主导的 IaaS 云。无论基础架构如何调整,都离不开监控系统的支持。 不仅如此。越来越复杂的数据中心环境对监控系统提

    2024年02月07日
    浏览(41)
  • Prometheus监控实战之Docker容器监控

    容器的使用已经非常普及,将服务迁移到容器上正成为了越来越多公司的选择。而对于运维人员而言,熟悉容器的使用与监控,也已成为一项必不可少的专业技能。 关于容器的开源产品,目前知名的有Docker、Containerd、CoreOS rkt、LXC 等,在这其中Docker占据了绝对的统治地位,也

    2024年02月06日
    浏览(40)
  • Prometheus监控Elasticsearch指标

    Prometheus 可以很方便的监控 Elasticsearch 的指标。 方式一: 通过启动ES自带的监控模块暴露指标数据,主要步骤如下: 在 Elasticsearch 中启用监控模块修改 Elasticsearch 的配置文件,加入监控相关配置: 重启 Elasticsearch 实例后,监控相关 API 会自动启用。 配置 Prometheus 监控 Elasticsearch 在

    2024年02月09日
    浏览(39)
  • prometheus监控RabbitMQ策略

    一般用官方的rabbitmq_exporter采取数据即可,然后在普米配置。但如果rabbitmq节点的队列数超过了5000,往往rabbitmq_exporter就会瘫痪,因为rabbitmq_exporter采集的信息太多,尤其是那些队列的细节,所以队列多了,rabbitmq_exporter就没法用了。所以我们不得不自己写脚本探测MQ,脚本分享

    2024年01月25日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包