写点什么

基于 Prometheus 构建黑盒监控体系(已用于线上环境)

  • 2020-05-03
  • 本文字数:4842 字

    阅读完需:约 16 分钟

基于Prometheus构建黑盒监控体系(已用于线上环境)

本文由 dbaplus 社群授权转载。

概述

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



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


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


白盒监控:有很多种,有中间件,有存储,有 web 服务器例如 redis 可以使用 info 暴露内部的指标信息;例如 mysql 可以使用 show variables 暴露内部指标信息;例如 nginx 可以使用 nginx_status 来暴露内部信息,系统业务指标可以通过埋点或者命令进行采集。

Blackbox Exporter

在前面的知识中,我们介绍 Prometheus 下如何进行白盒监控,我们监控主机的资源用量、容器的运行状态、数据库中间件的运行数据,通过采集相关指标来预测我们的服务健康状态。


在黑盒健康方面。Blackbox Exporter 是 Prometheus 社区提供的官方黑盒监控解决方案,其允许用户通过:HTTP、HTTPS、DNS、TCP 以及 ICMP 的方式对网络进行探测,目前我司相关业务监控接口也是基于 Blockbox 来进行的,下面我们开始。

Blackbox_exporter 应用场景

1、HTTP 测试


  • 定义 Request Header 信息

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


2、TCP 测试


  • 业务组件端口状态监听

  • 应用层协议定义与监听


3、ICMP 测试


  • 主机探活机制


4、POST 测试


  • 接口联通性


5、SSL 证书过期时间

结合 grafana 生成的相关模板

1、首先看下我们这边的相关图表,门户多项指标与 ssl 监控



2、机房线路监控



3、接口状态监控


Blackbox Exporter 部署

1、安装 Exporter


[root@cinder1 src]# wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.16.0/blackbox_exporter-0.16.0.linux-amd64.tar.gz[root@cinder1 src]#tar -zxvf blackbox_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local[root@cinder1 src]#mv /usr/local/blackbox_exporter-0.16.0.linux-amd64 /usr/local/blackbox_exporter
复制代码


2、添加到启动项


[root@cinder1 src]# cat /etc/systemd/system/blackbox_exporter.service [Unit]Description=blackbox_exporterAfter=network.target 
[Service]WorkingDirectory=/usr/local/blackboxExecStart=/usr/local/blackbox/blackbox_exporter \ --config.file=/usr/local/blackbox/blackbox.yml[Install]WantedBy=multi-user.target
复制代码


3、检测是否正常启动


[root@cinder1 src]# ss -tunlp|grep 9115tcp    LISTEN     0      128      :::9115                 :::*                   users:(("blackbox_export",pid=2517722,fd=3))
复制代码

icmp 监控

通过 icmp 这个指标的采集,我们可以确认到对方的线路是否有问题。这个也是监控里面比较重要的一个环节。我们要了解全国各地到我们机房的线路有哪条有问题我们总结了两种方案:


  • 全国各地各节点 ping 和访问数据采集。这种类似听云运营商有提供这类服务,但是要花钱;

  • 我现在用的方法就是:找各地测试 ping 的节点,我们从机房主动 ping 看是否到哪个线路有故障,下面我们开始。


1、prometheus 添加相关监控,Blackbox 使用默认配置启动即可


- job_name: "icmp_ping"    metrics_path: /probe    params:      module: [icmp]  # 使用icmp模块    file_sd_configs:    - refresh_interval: 10s      files:      - "/home/prometheus/conf/ping_status*.yml"  #具体的配置文件    relabel_configs:    - source_labels: [__address__]      regex: (.*)(:80)?      target_label: __param_target      replacement: ${1}    - source_labels: [__param_target]      target_label: instance    - source_labels: [__param_target]      regex: (.*)      target_label: ping      replacement: ${1}    - source_labels: []      regex: .*      target_label: __address__      replacement: 192.168.1.14:9115
复制代码


2、相关 ping 节点配置


[root@cinder1 conf]# cat ping_status.yml - targets: ['220.181.38.150','14.215.177.39','180.101.49.12','14.215.177.39','180.101.49.11','14.215.177.38','14.215.177.38']  labels:    group: '一线城市-电信网络监控'- targets: ['112.80.248.75','163.177.151.109','61.135.169.125','163.177.151.110','180.101.49.11','61.135.169.121','180.101.49.11']  labels:    group: '一线城市-联通网络监控'- targets: ['183.232.231.172','36.152.44.95','182.61.200.6','36.152.44.96','220.181.38.149']  labels:    group: '一线城市-移动网络监控' 
复制代码


这些数据是从全国各地 ping 网站进行采集,大家可以从那些网站获取.


3、添加 grafana


这个 grafana 是自己定义的,看到网上没有就自己定义了一个。大家可以从 github 上下载,再看看效果,可以看到我们通过 Ping 就获取到了全国各地的线路运行情况,可以有效的检测到我们线路异常问题:


http 相关指标监控

1、prometheus 配置 http_get 访问


  - job_name: "blackbox"    metrics_path: /probe    params:      module: [http_2xx]  #使用http模块    file_sd_configs:     - refresh_interval: 1m      files:       - "/home/prometheus/conf/blackbox*.yml"    relabel_configs:    - source_labels: [__address__]      target_label: __param_target    - source_labels: [__param_target]      target_label: instance    - target_label: __address__      replacement: 192.168.1.14:9115
复制代码


2、相关配置文件,类似举例如下


[root@cinder1 conf]# cat /home/prometheus/conf/blackbox-dis.yml - targets:  - https://www.zhibo8.cc  - https://www.baidu.com#配置相关URL
复制代码


3、添加 grafana 模板


可以选择模板的 9965 模板,这个模板我们也看到前面的,提供了相关的 ssl 过期检测,这里以两个常见的网站为例。

接口 get 请求检测

1、prometheus 配置,其实跟我们之前的配置一样,我们直接看配置文件


  - job_name: "check_get"    metrics_path: /probe    params:      module: [http_2xx]  # Look for a HTTP 200 response.    file_sd_configs:    - refresh_interval: 1m      files:      - "/home/prometheus/conf/service_get.yml"    relabel_configs:    - source_labels: [__address__]      target_label: __param_target    - source_labels: [__param_target]      target_label: instance    - target_label: __address__      replacement: 192.168.1.14:9115
复制代码


2、相关接口配置参考


[root@cinder1 conf]# cat service_get.yml - targets:  - http://10.10.1.123:10000/pmkb/atc_tcbi  - http://10.10.1.123:10000/pmkb/get_ship_lock_count  - http://10.10.1.123:10000/pmkb/get_terminal_count_by_city  - http://10.10.1.123:10000/pmkb/get_terminal_monitor?industry=1  - http://10.10.1.123:10000/pmkb/get_terminal_comparison?industry=1  - http://10.10.1.123:10000/pmkb/get_terminal_city_count_industry?industry=1  - http://10.10.1.123:10000/pmkb/industry_stat?industry=1  - http://10.10.1.123:10000/pmkb/get_company_car_count?industry=1  - http://10.10.1.123:10000/pmkb/get_terminal_month_countbyi?industry=1  labels:    group: 'service'
复制代码


3、grafana 和前面一样自己订制的,可以从 github 上下载

接口 post 请求状态检测

1、这里首先我们要改一下 post 相关接口的 blackbox.yml 配置,我们自己定义一个模块


[root@cinder1 blackbox]# cat blackbox.yml modules:  http_2xx:    prober: http  http_post_2xx:   #这个模块名称可以自己定义    prober: http    http:      method: POST      headers:        Content-Type: application/json   #添加头部      body: '{"username":"admin","password":"123456"}'  #发送的相关数据,这里我们以登录接口为例
复制代码


2、添加到 prometheus


  - job_name: "check_service"    metrics_path: /probe    params:      module: [http_post_2xx]  # 这里要对应配置文件里,定义的模块    file_sd_configs:     - refresh_interval: 1m      files:       - "/home/prometheus/conf/service_post.yml"    relabel_configs:    - source_labels: [__address__]      target_label: __param_target    - source_labels: [__param_target]      target_label: instance    - target_label: __address__      replacement: 192.168.1.14:9115
复制代码


3、相关配置查看


[root@cinder1 conf]# cat service_post.yml - targets:  - http://10.2.4.103:5000/devops/api/v1.0/login  labels:    group: 'service'
复制代码


4、添加 grafana 相关配置,这个也是自己定义的,可以从 github 上下载

tcp 端口状态检测

个人理解的是这个跟 telnet 差不多都是检测端口是否在线


1、prometheus 配置


  - job_name: 'port_status'    metrics_path: /probe    params:      module: [tcp_connect]  #使用tcp模块    static_configs:      - targets: ['10.10.1.35:8068','10.10.1.35:8069']  #对应主机接口        labels:          instance: 'port_status'          group: 'tcp'    relabel_configs:    - source_labels: [__address__]      target_label: __param_target     - target_label: __address__      replacement: 192.168.1.14:9115 
复制代码


2、图表


图表可以集成到前面的 grafana 9965 模板。

告警规则定义

1、业务正常性


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

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

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

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



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


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



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



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


[root@cinder1 rules]# cat blackbox.yml groups:- name: blackbox_network_stats  rules:  - alert: blackbox_network_stats    expr: probe_success == 0    for: 1m    labels:      severity: critical    annotations:      summary: "接口/主机/端口 {{ $labels.instance }}  无法联通"      description: "请尽快检测"
复制代码


##ssl 检测


[root@cinder1 rules]# cat ssl.yml groups:- name: check_ssl_status  rules:  - alert: "ssl证书过期警告"    expr: (probe_ssl_earliest_cert_expiry - time())/86400 <30    for: 1h    labels:      severity: warn    annotations:      description: '域名{{$labels.instance}}的证书还有{{ printf "%.1f" $value }}天就过期了,请尽快更新证书'      summary: "ssl证书过期警告"
复制代码


4、重启完成之后我们可以登录 web 界面查看下




5、我们发现有个接口已经存在问题,这个时候我们也收到了一条相应的微信告警


总结

黑盒监控相较于白盒监控最大的不同在于黑盒监控是以故障为导向当故障发生时,黑盒监控能快速发现故障,所以我们监控时候以粒度比较细的,如端口、接口、线路等进行监控。


通过 Prometheus Blackbox Exporter 可以快速实现和定制我们很多相关策略,大家线上环境可以基于以上做配置即可。


作者介绍


罗辉,原荔枝 FM 运维工程师,现任北方激光研究院广西分公司运维总监。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650787711&idx=1&sn=0f9cf318b1c94eb00ece6203b20c8da2&chksm=f3f97aeac48ef3fc58505339af481106b66b4df138d1a70b74b72033ea06dad65b2db0656889&scene=27#wechat_redirect


2020-05-03 14:068519

评论

发布
暂无评论
发现更多内容

什么是WAAP,对提高网络安全具有哪些重要的意义

德迅云安全杨德俊

性能测试中唯一标识的JMH测试

FunTester

革新鞋服零售:数据驱动的智能商品管理 解锁库存优化与高效增长

第七在线

比特币减半:挑战与机遇

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

实现iOS App代码混淆

雪奈椰子

静态代码分析的这些好处,我竟然都不知道?

禅道项目管理

程序员 软件开发 自动化测试 知识分享 静态代码分析

ODI(境外投资备案)作用、类别和申请流程详解

Ghost Buster Pro for Mac v3.2.2 内存清理工具 激活版

iMac小白

Ghost Buster Pro下载 Ghost Buster Pro mac Ghost Buster Pro破解

海外云手机怎么解决tiktok运营难题?

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 海外原生IP

2024上海国际智能汽车电子展览会

AIOTE智博会

自动驾驶展 智能驾驶展 汽车电子展

ON1 NoNoise AI 2024 for Mac v18.3.0.15302 AI图片降噪工具 激活版

iMac小白

你会拆分产品待办项(PBI)吗?

敏捷开发

项目管理 敏捷开发 软件开发 产品管理 用户故事

CADintosh X for Mac v8.8.6.736 CAD绘图软件直装版

iMac小白

CADintosh X 8 CADintosh X下载 CADintosh X直装版 CADintosh X mac CADintosh X 破解

Pixelmator Pro for Mac v3.5.8 图像编辑软件 直装激活版

iMac小白

Pixelmator Pro破解 Pixelmator Pro中文 Pixelmator Pro下载

运维数字化转型必备宝典,13位行业资深运维专家力荐之作

嘉为蓝鲸

数字化转型 数字化运维 IT 运维

一款功能齐全的iOS混淆工具介绍及功能详解

元太科技携手生态圈伙伴合作开发新一代电子纸货架标签

财见

Topaz Photo AI for Mac v3.0.0 智能AI降噪软件 照片清晰度修复

iMac小白

Topaz Photo AI下载 Topaz Photo AI mac Topaz Photo AI破解

AlDente Pro for Mac v1.26.1 电池优化工具 限制最大充电比例 激活版

iMac小白

AlDente Pro下载 AlDente Pro破解版 AlDente Pro mac

4K Video Downloader Plus Pro for Mac v1.5.2 4K视频下载器 激活版

iMac小白

4K Video Downloader Plus

DoubleTake for Mac v2.7.0 全景图制作软件 激活版

iMac小白

DoubleTake下载 DoubleTake mac DoubleTake直装版

智能写手GPT出击!生成测试报告技巧大公开!

测吧(北京)科技有限公司

测试

爆火 AI 硬件遭差评,Ai Pin 上市即翻车;Grok 推出首个多模态模型丨 RTE 开发者日报 Vol.184

声网

Python机器学习实战教程含代码

技术冰糖葫芦

api 货币化 API 测试 pinduoduo API

嘉为蓝鲸WeOps认证体系全面升级:构建专业本地化服务中心网络

嘉为蓝鲸

weops 嘉为蓝鲸

全民国家安全教育日,天翼云“红盾”筑牢数字安全防线

编程猫

Tinderbox 9 for Mac v9.7.3 可视化个人笔记工具 激活版

iMac小白

Tinderbox 9下载 Tinderbox 9 mac Tinderbox 9破解

企业网络日益突出的难题与SD-WAN解决方案

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

基于Prometheus构建黑盒监控体系(已用于线上环境)_容器_dbaplus社群_InfoQ精选文章