最新要闻
- 医保缴费多少年才可以终身享受待遇?多少钱一年?
- 欧盟将强制禁用华为5G设备 热点在线
- 性价比口碑双冠王!魅族20 PRO成618四千档性能神机 天天热资讯
- 雾霾笼罩纽约 自由女神像被“吞没” :美国大片地区昏黄烟雾 宛如末日降临-世界热头条
- 世界头条:高考时没有一个孔子是饿着的:学子争相给先贤送吃的 期盼金榜题名
- 女子开门杀致骑手摔倒被罐车卷入车底:第一反应竟是观察车门|天天速递
- Adata 展示其 1600W PSU 可以为四个 450W RTX 4090 供电
- 关注2023年河南高考丨免费午餐温暖高考学子
- 西安李姐茶叶蛋的家常做法?
- 有人在麦田插钢筋损坏收割机:钢筋还特意用麦子包裹 天天报道
- 帅不过3秒!RTX 4060游戏本挑战全景光追惨败 天天实时
- 黑龙江黑河村庄遭龙卷风袭击:多处房屋损毁|焦点关注
- 安卓阵营早已实现:iOS 17相机终于引入“水平”辅助线_天天报资讯
- 天天看点:买显卡“送”橘猫!COLORFIRE RTX 4060 Ti橘影橙8GB 评测:比公版强2%
- 热讯:工会代表候选人初步人选推荐情况的报告_人选和候选人的区别是什么
- 组图|2023年海南陵水黎安国际教育创新试验区知识产权沙龙活动举行
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界微头条丨太卷了,史上最简单的监控系统 catpaw 简介
指标监控的痛点
当下比较流行的监控系统,比如 Prometheus、Nightingale、VictoriaMetrics,都是基于数值型指标的监控系统,这类监控系统的痛点在于:告警的时候只能拿到异常值,以及有限的几个标签,难以拿到更详细的信息。比如 HTTP 探测监控,通常用监控值表示不同的错误:
(资料图片仅供参考)
Success = 0ConnectionFailed = 1Timeout = 2DNSError = 3AddressError = 4BodyMismatch = 5CodeMismatch = 6
告警的时候,比如你收到一个异常值,说访问 http://x.com 异常了,异常值是 3,需要比较资深的人才能知道这个异常是 DNS 解析失败,对于普通研发,就会很懵。当然了,我们可以在告警规则的备注里把这个异常值和错误消息的对应关系写上,但总觉得这样不太优雅。如果我们能在告警的时候,把详细错误信息也一并告诉接收者,那就更好了。比如,我们更希望的是收到类似下面的信息:
本文看完,就可以做到上图的效果了,我们继续。
当然了,也可以用日志系统来做这类监控,比如 ElasticSearch、Loki,然后辅以一个周期性查询的告警引擎就可以了。但是整个架构就复杂了,另外,如果还要考虑告警接收人管理、告警媒介对接管理、告警触达策略、降噪规则、静默规则、抑制规则、排班、认领、升级等等,那就更复杂了,有没有轻量的工具可用?
思路
最轻量的工具,显然是 SaaS 类工具,无需部署、维护,即开即用,快猫星云提供了 FlashDuty,用于聚合接收各个监控系统的告警事件,比如 Prometheus、Zabbix、Nightingale、公有云云监控,提供告警事件的统一纳管、灵活派发、静默、排班认领升级等功能,这里不再赘述。基本上,可以认为 FlashDuty 已经完成了事件后续处理的所有功能。如果我们能有一个工具,可以产出告警事件,然后把告警事件推送到 FlashDuty,那就可以实现非常完备的功能了。而且 FlashDuty 是 SaaS 化的,无需维护,我们只需要搞一个轻量的小工具跑在自己的环境下采集异常事件即可,这个小工具就是 catpaw。
适合的场景
catpaw 不能取代指标监控和日志系统,它只是一个轻量的 check 工具,一些场景举例:
- 探测某个 HTTP 地址,如果不可用,把不可用的原因发出来
- 探测某个 TCP 地址,如果不可用,把不可用的原因发出来
- 探测某个文件,如果文件不存在,或者 MD5 发生变化,发出告警事件
- 探测 ulimit 配置,如果发现不合理,发出告警事件
- 探测目录是否可读可写,如果异常发出告警事件
- 探测是否有目录已写满,如果写满的目录,发出告警事件,把
df -h
的结果一并发出来 - 探测某个进程是否存在,如果不存在,发出告警事件
- 探测 MySQL 慢查询,如果发现慢SQL,发出告警事件,事件中带上SQL
- 探测 MySQL 主从延迟,如果延迟超过阈值,发出告警事件,事件中带上延迟时间以及两个 Thread 的情况
- 接收 SNMP Trap 消息,如果消息中包含某个关键字,发出告警事件
- 检查系统日志,如果出现某个关键字,告警,把日志详情一并发出来
- ....
更多场景不再赘述,其特点基本上可以概括为:
- check 的时候已经可以知道是否正常
- check 的时候大概率可以拿到异常原因或者现场值,把这些信息一并发出来
其实吧,这就是 nagios 的逻辑,只不过 nagios 安装复杂、组件散乱、缺少 FlashDuty 这样的事件后续处理能力。我更想要的是一个轻量的事件采集器,配置 FlashDuty,完美。
catpaw 的安装
catpaw 刚刚开始,目前只提供了 Linux 版本,下载地址:https://download.flashcat.cloud/catpaw-v0.1.1-linux-amd64.tar.gz
下载解压缩,可以看到如下文件:
catpaw-v0.1.1-linux-amd64├── catpaw├── conf.d│ ├── config.toml│ ├── p.exec│ │ └── exec.toml│ └── p.http│ └── http.toml└── scripts ├── demo.sh └── ulimit.sh5 directories, 6 files
其中:
- catpaw:二进制文件
- conf.d:配置文件目录,下面的 config.toml 是主配置,p.exec 和 p.http 是插件配置,目前只提供了这两个插件,exec 插件可以自定义脚本,提供了无限可能
- scripts:一些示例脚本
主配置
config.toml 的内容:
[global]# 全局采集频率,如果插件没有配置采集频率,就使用全局的interval = "30s"# 全局附加标签,这些标签会附加到所有的事件上# $hostname $ip 是特殊变量,会被替换为当前主机的 hostname 和 ip[global.labels]from_agent = "catpaw"from_hostname = "$hostname"from_hostip = "$ip"# 日志配置,默认是 json 格式的日志,打印到标准输出# 一般用 systemd 托管,日志写在 /var/log/messages,自动切分[log]level = "info"# format = "json"# output = "stdout"# fields = {}# 事件通知地址,目前只支持 flashduty,当然,你也可以模仿 flashduty 的接口,自己实现一个事件接收服务[flashduty]url = "https://api.flashcat.cloud/event/push/alert/standard?integration_key=x"timeout = "10s"
flashduty.url 需要去 FlashDuty 获取,地址在这里:https://console.flashcat.cloud/,可以免费注册,注册之后,系统会自动引导你创建一个协作空间,然后在协作空间下,添加告警接入专属集成就可以了:
点击刚才创建的自定义集成,我的自定义集成取名为 catpaw,点击之后出现右侧抽屉侧拉板。
FlashDuty 如果使用过程有问题,可以联系我,我会帮助你解决。注册进来默认有两周的全功能免费试用期,试用期过后,如果你觉得不错,可以继续使用(有免费版、标准版、专业版三个版本),如果你觉得不好用,扔一边就好,无需有压力。
插件配置
当前是 v0.1.1 版本,只提供了两个插件,http 插件和 exec 插件,exec 插件可以自定义脚本,所以,提供了无限扩展可能,下面我们分别介绍。
http 插件
http 插件的配置文件是 conf.d/p.http/http.toml,内容如下:
[[instances]]targets = [ "https://baidu.com",]# # Concurrent requests to make per instance# concurrency = 10# # gather interval# interval = "30s"# # Optional append labels# labels = { env="production", team="devops" }## Set http_proxy (catpaw uses the system wide proxy settings if it"s is not set)# http_proxy = "http://localhost:8888"## Interface to use when dialing an address# interface = "eth0"## HTTP Request Method# method = "GET"## Set timeout (default 5 seconds)# timeout = "5s"## Whether to follow redirects from the server (defaults to false)# follow_redirects = false## Optional HTTP Basic Auth Credentials# basic_auth_user = "username"# basic_auth_pass = "pa$$word"## Optional headers# headers = ["Header-Key-1", "Header-Value-1", "Header-Key-2", "Header-Value-2"]## Optional HTTP Request Body# payload = """# {"fake":"data"}# """## Optional TLS Config# use_tls = false# tls_ca = "/etc/catpaw/ca.pem"# tls_cert = "/etc/catpaw/cert.pem"# tls_key = "/etc/catpaw/key.pem"## Use TLS but skip chain & host verification# insecure_skip_verify = false[instances.expect]## Optional expected response status code.response_status_code = ["20*", "30*"]## Optional substring match in body of the response (case sensitive)response_substring = "html"## Optional alert when cert will expire in x hourscert_expire_threshold = "72h"[instances.alerting]## Enable alerting or notenabled = true## Same functionality as Prometheus keyword "for"for_duration = 0## Minimum interval duration between notificationsrepeat_interval = "5m"## Maximum number of notificationsrepeat_number = 3## Whether notify recovery eventrecovery_notification = true## Choice: Critical, Warning, Infoseverity = "Warning"
看起来配置很多,实际非常清晰,我做一个简单讲解。要探测 HTTP 地址,只需要在 targets 里面填写即可,可以填写多个,每个地址用双引号包裹,多个地址用逗号分隔,如下:
[[instances]]targets = [ "https://baidu.com", "http://a.cn",]
比如我们把公司依赖的所有第三方接口都配置在这里,那可能有好几百个,探测的时候最好要控制一下并发度,所以提供了 concurrency 配置,可以控制并发度。interval 是探测频率,如果不配置,就使用全局的探测频率。labels 是附加标签,这些标签会附加到这个 [[instances]]
产生的所有事件上。
下面的 http_proxy、interface、method、timeout、follow_redirects、basic_auth_user、basic_auth_pass、headers、payload、use_tls、tls_ca、tls_cert、tls_key、insecure_skip_verify 这些都是 http 客户端的配置,catpaw 作为一个 http 客户端,向 targets 中的地址发探测请求,需要有一些基本的配置,看起来配置项挺多,都可以维持默认值,不需要修改。
其中,有些公司会使用自签证书,此时需要配置:
use_tls = trueinsecure_skip_verify = true
接下来是 [instances.expect]
部分,配置了一些期望,比如期望返回状态码是 20x 或者 30x,期望返回的 body 中包含 html 字符串,期望证书过期时间大于 72 小时,如果不满足期望,就会触发告警。
接下来是 [instances.alerting]
部分,配置了告警的一些参数,比如告警是否启用、告警触发要求的持续时长(类似 Prometheus 的 for 关键字)、告警的级别、告警的重复次数、告警的重复间隔、是否通知恢复等等。
targets 中可以配置一个假地址,比如 http://a.cn
,这样待会启动 catpaw 之后立马就可以看到效果。
exec 插件
exec 插件核心是指定要执行的脚本路径,比如我的一个配置样例:
[[instances]]commands = [ "/root/works/catpaw/dist/catpaw-v0.1.1-linux-amd64/scripts/*.sh"]
其他都可以维持默认,exec 插件的 [instances.alerting]
没有指定 severity,因为 exec 插件的脚本是自行控制 severity(通过脚本的 stdout),大家看一下 scripts 目录下的样例脚本就知道了。
比如 ulimit.sh :
#!/bin/shif [ "$1" ]; then threshhold=$1else threshhold=2048ficount=$(ulimit -n)status="Ok"if [ $count -lt $threshhold ]; then status="Warning"fiecho "[ { "event_status": ""${status}"", "labels": { "check": "ulimit check" }, "title_rule": "$check", "description": "ulimit -n: "${count}", too low, should be greater than "${threshhold}"" }]"
这个脚本的作用是 check 系统的 ulimit 配置,默认 Linux 句柄限制是 1024,生产环境显然是不够用的,所以我们可以通过这个脚本来检查 ulimit 配置,如果低于 2048,就触发告警。
脚本的输出是一个 json 数组,每个元素是一个事件,事件的字段有:
- event_status:事件状态,可选值:Ok、Info、Warning、Critical
- labels:附加标签,这些标签会附加到这个事件上,不同的事件就是通过 labels 来区分的
- title_rule:事件标题,支持模板,模板中的变量是 labels 中的字段(具体可以查阅刚才提到的 FlashDuty 的文档)
- description:事件描述,可以使用 markdown 格式
启动测试
我们只是修改了 config.toml 中的 flashduty.url,exec.toml 中的 scripts 路径,其他都维持不变,启动测试:
./catpaw --configs conf.d
启动之后,可以看到控制台输出了一些信息,产生了 3 条告警事件,推给了 FlashDuty,FlashDuty 也收到了告警,如下图:
这里我点击 HTTP check failed 这个告警,可以看到详情:
描述信息是 markdown 的,可以明显看到是 DNS 的问题(lookup x on x:53: no such host 是典型的 DNS 报错),非常清晰。
测试恢复消息
这里我手工修改 scripts 下的 demo.sh,把 event_status 返回 Ok:
#!/bin/shecho "[ { "event_status": "Ok", "labels": { "check": "script demo" }, "title_rule": "$check", "description": "this is description, support markdown" }]"
稍等一下下,FlashDuty 就会收到恢复消息:
点击告警详情,点开关联事件,可以看到 Ok 的事件:
总结
Catpaw 是一个非常简单的告警工具,它的核心是插件机制,插件机制使得 Catpaw 可以很容易地扩展,比如我想要一个插件,可以检查 MySQL 的连接数,那么我只需要写一个脚本,输出事件 json 数组,然后配置到 exec 插件中,就可以了。
当然,后面我们也会把更多常见的场景直接内置到 catpaw 的二进制中,开箱即用。各位老铁,有好的脚本,欢迎提交到 https://github.com/flashcatcloud/catpaw-scripts,群策群力,争取搞个牛逼的脚本库,我们会把好的脚本合并到 catpaw 的二进制中,方便大家使用,一起来吧!
关键词:
世界微头条丨太卷了,史上最简单的监控系统 catpaw 简介
小车PID巡线调节 全球报资讯
易基因|一种全新的检测DNA羟甲基化的技术:ACE-Seq 环球时快讯
JPA单表存储List与模糊查询
医保缴费多少年才可以终身享受待遇?多少钱一年?
欧盟将强制禁用华为5G设备 热点在线
性价比口碑双冠王!魅族20 PRO成618四千档性能神机 天天热资讯
雾霾笼罩纽约 自由女神像被“吞没” :美国大片地区昏黄烟雾 宛如末日降临-世界热头条
世界头条:高考时没有一个孔子是饿着的:学子争相给先贤送吃的 期盼金榜题名
女子开门杀致骑手摔倒被罐车卷入车底:第一反应竟是观察车门|天天速递
Adata 展示其 1600W PSU 可以为四个 450W RTX 4090 供电
java~如何使用无符号整型 看热讯
文字效果 用背景渐变实现 波浪背景文字
P1585 魔法阵 题解
关注2023年河南高考丨免费午餐温暖高考学子
西安李姐茶叶蛋的家常做法?
有人在麦田插钢筋损坏收割机:钢筋还特意用麦子包裹 天天报道
帅不过3秒!RTX 4060游戏本挑战全景光追惨败 天天实时
黑龙江黑河村庄遭龙卷风袭击:多处房屋损毁|焦点关注
安卓阵营早已实现:iOS 17相机终于引入“水平”辅助线_天天报资讯
天天看点:买显卡“送”橘猫!COLORFIRE RTX 4060 Ti橘影橙8GB 评测:比公版强2%
当前时讯:文档在线预览(四)将word、txt、ppt、excel、图片转成pdf来实现在线预览
热讯:工会代表候选人初步人选推荐情况的报告_人选和候选人的区别是什么
组图|2023年海南陵水黎安国际教育创新试验区知识产权沙龙活动举行
多家饭店因在凉皮内放黄瓜丝被罚 网友吵翻:专家科普为大家好
第27次参加!高考钉子户梁实愁眉苦脸出考场 直言考得不好_世界今日报
天天实时:Epic祝福高考学子被指配图不佳 随后换成《原神》截图
天天信息:灵商的组成中包括(灵商)
吉视传媒:公司目前没有发展和推动有esim卡业务 今日精选
全球短讯!青海省邮政管理局联合相关部门调研“客货邮”融合发展情况
世界即时看!福达合金:截至本公告披露日 公司及其控股子公司担保余额为人民币约7.86亿元
职业发展战术设计:构建可持续积累的职业优势 每日关注
微控制器实时操作系统实践3任务信令和通信机制
癫痫一年发作一次严重吗
什么海鱼内脏比较好吃?
魔域私服有合宝宝挂吗_457833415@ com 求个 有的给个 谢谢啦|今日视点
全球滚动:卡霍夫卡水电站大坝遭袭 扎波罗热地方官员:核电站情况稳定
万亿美元发债潮将至 美国金融体系或酝酿流动性风险 环球新动态
新兴产业加速崛起 海洋经济破浪前行
江苏黄沙港特大桥顺利合龙 预计6月底完工
高温范围扩大 这些地区的高考考生和家长需注意_当前资讯
雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警 焦点短讯
临川区气象台发布雷电黄色预警信号【III级/较重】【2023-06-07】 每日速讯
世界看热讯:不回巴萨!曝梅西已决定加盟美国球队迈阿密国际
Mac游戏看齐Win系统 苹果新工具可快速移植游戏
2023高考来临 大学生考点摆摊卖9.85与21.1元花束:给学弟学妹加油
暗黑满级号死于掉线
梅西官宣加盟迈阿密国际 老板是贝克汉姆:5000万欧年薪+苹果分成等
【独家焦点】长城电工:6月7日融资买入130.37万元,融资融券余额8601.6万元
按照评价的不同目的可将课程评价分为-要闻
资讯推荐:金发科技:公司目前材料可应用于航天、军工领域,但暂无相关订单
手机版生存游戏推荐 自己采集物资生存
全球快资讯:读改变未来的九大算法笔记06_图形识别
麻江县气象台发布雷电黄色预警信号【Ⅲ/较重】【2023-06-07】
优博讯:公司目前生物识别技术主要为人脸识别 每日简讯
pdca管理体系是什么_pdca管理是什么意思
信濠光电:公司的3D玻璃产品销量保持快速增长,但目前收入占比相对不高-时快讯
世界热推荐:《蜘蛛侠:纵横宇宙》口碑登顶 用AI绘制自己的格温女友
最新预警!雷雨大风!|环球焦点
观焦点:中国奇谭、宝可梦、姆明……上海电视节线下放映排片来了,你最想看哪一部?
新中港06月07日主力资金大幅流出 当前热门
今日关注:B站刚崩,唯品会又崩:亿级用户网站的架构硬伤与解决方案
使用THREEJS实现一个可调节档位、可摇头的电风扇 世界短讯
【环球速看料】西力科技:中标1.26亿元国家电网电能表采购项目
焦点信息:中国的油车时代过去了!大众关闭在中国建的第一座工厂
只用45分钟!女驴友被秃鹫吃得只剩一副白骨
近6成应届生没工作 企业招聘要求扎心:名校出身仅排第5 更高学历根本不重要
天天微速讯:7大AI比拼高考作文 语文老师打分:一大批学生该恐慌了
腾讯《无畏契约》国服今日终测:服务器全天开放、20名英雄爽玩
小摩:予招商银行(03968)“增持”评级 目标价70港元
南开区市场监管局强化高考、中考期间食品安全监管保障工作
环球快看:广丰区气象台更新雷电黄色预警信号【III级/较重】【2023-06-08】
氧化铝6月19日期货挂牌交易 后市铝价走向如何?
聚焦:雷阵雨+8级阵风,将影响晚高峰!天津发布雷雨大风蓝色预警
每日视讯:天津向渤海湾增殖放流各种苗种超100万尾
宇宙最多的两个元素是氢和什么_宇宙最多的两个元素是什么
解析2023年高考北京数学卷:追根溯源考“四基” 创新情境查能力_环球要闻
2023年6月7日河南省铝矿石价格最新行情预测
每日热讯!佳木斯领导调研地面站项目
国网陇南供电公司:机械化施工助重点工程建设
全球快消息!珲春市气象台发布雷电黄色预警【III级/较大】【2023-06-07】
【全球新视野】@所有人 一起为每一位考生送上祝福!
南向资金今日净买入2.41亿港元|每日报道
散文丨水运宪:我的峡谷我的村
金百泽:公司未直接向英伟达供货
通光线缆:目前暂无产品应用在大模型计算的配套中
每日热文:吉视传媒:公司目前没有发展和推动有esim卡业务
今日热文:2012年以来首次下跌!英国5月Halifax房价同比下降1%
生活歌手_关于生活歌手介绍|每日报道
【机构关注】6月6日机构评级调高的个股 天天观察
天龙集团:公司四大系统平台已初步实现AI升级植入的运营模式 热讯
黑龙江汤原交通运输执法大队开展爱心送考
与其争夺国内第三座迪士尼,不如自己“支棱起来”
天天看热讯:中消协提示警惕培训班退费骗局
环球新动态:广东省发文进一步完善和落实积极生育支持措施
中国电信e8套餐可以用吗(中国电信e8套餐)_每日热点
世界滚动:世界房车锦标赛历届冠军(瑞典房车锦标赛2)
快看点丨各方详解公募REITs价格波动:长期投资者更看重产品分红
澳第一大行澳大利亚联邦银行禁止员工使用ChatGPT 采用自有AI系统|世界最新
创新“三问”工作法 激发人才工作“调研力”