写点什么

基于 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:069210

评论

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

【LeetCode】实现 Trie (前缀树)Java题解

Albert

算法 LeetCode 4月日更

「 留言参与 」—— InfoQ 写作平台【 1 周年盛典 】

InfoQ写作社区官方

1 周年盛典 热门活动

防晒衣专用水性油墨说明书

C13713145387

防晒衣专用水性油墨 防水尼龙水性油墨

华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致

华为云开发者联盟

redis 华为云 GaussDB(for Redis) 强一致 PB级数据库

云原生势不可挡,华为云GaussDB加速企业数字化转型

华为云开发者联盟

华为云 GaussDB

第一篇测试

童童

架构训练营

1小时破千万点击量!阿里巴巴首发:Java核心框架指导手册

Java架构追梦

Java 阿里巴巴 架构 面试 核心框架

CloudQuery v1.3.6发布,更加完善的数据操作支持

BinTools图尔兹

数据库 sql 数据安全 数据管理工具

全球案例 | NTT:Atlassian 帮助我们重塑危机中的可能性

Atlassian

敏捷 团队协作 数字化转型 Atlassian Jira

Modbus协议在串行链路上的实现

不脱发的程序猿

通信协议 物联网常用协议 4月日更 Modbus 串行通信

重读《重构2》- 提炼变量

顿晓

重构 4月日更

Modus串行链路系统电气特性:2线-Modus、4线-Modus、RS232-Modus和RS485-Modus的特性

不脱发的程序猿

通信协议 4月日更 Modus 串行链路 RS232、RS485

应对海量时序数据,华为云GaussDB(for Influx)有妙招

华为云开发者联盟

云原生 数字化转型 时序数据 华为云GaussDB

智慧城市:大数据运营中心 IOC —— Web GIS 地图应用

一只数据鲸鱼

WebGIS ioc 数据可视化 智慧城市 数据运营

透气胶浆、无手感透气胶浆

C13713145387

透气胶浆 仿拔印浆 无手感透气浆

多年后,我终于看清了比特币的本质

陈东泽 EuryChen

比特币 区块链

联邦学习,为何而生?

博文视点Broadview

避免人工智能存在“歧视”,要从这8大方法入手

澳鹏Appen

人工智能 机器学习 大数据 人脸识别

爽面数码打底浆说明书

C13713145387

爽面数码打底浆 哑面数码打底浆 数码打底浆

对混沌工程的五个常见误解

混沌工程实践

混沌工程 故障注入 误区 生产事故 监管合规

基于深度神经网络的噪声标签学习

华为云开发者联盟

神经网络 损失函数 深度神经网络 噪声 噪音数据

PHP自动加载原理

Sakura

4月日更

最全 MongoDB 基础教程

若尘

数据库 mongodb mongo

SpringCloud(Netflix)-技术专题-自定义配置Ribbon

码界西柚

SpringCloud Ribbon

KubeVela 1.0 :开启可编程式应用平台的未来

阿里巴巴云原生

容器 云原生 k8s 消息中间件 Go 语言

投资的狠人,往往是这样的

陈东泽 EuryChen

比特币 区块链 投资 李笑来 debank

《采访彩食鲜 CTO 乔新亮:如何从一名程序员晋阶为CTO》(采访提纲)

石云升

28天写作 4月日更 调查采访能力考核

SpringCloud(Netfix)-技术专题-服务注册与发现

码界西柚

SpringCloud

Linux grep 命令

一个大红包

4月日更

BOE(京东方)2020年报发布: 营收1355.53亿元 净利润大幅增长162.46%

LeetCode题解:剑指 Offer 49. 丑数,三指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

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