如何利用categraf的exec插件实现对Linux主机系统用户及密码有效期进行监控及告警?

article/2025/8/22 7:45:33

需求描述

Categraf作为夜莺监控平台的数据采集工具,为了保障Linux主机的安全,需要实现对系统用户密码有效期的监控,并在密码即将到期时及时告警,以提醒运维人员更改密码。本章将详细介绍如何利用Categraf的exec插件来实现这一功能,并确保告警信息能够通过企业微信、飞书等渠道准确地推送给相关运维人员。

exec插件exec.toml文件配置

这个配置文件定义了exec插件定期执行/opt/categraf/scripts/check_password_expiry.shjiao脚本文件,并且输出的数据格式为influx格式。

# # collect interval
# interval = 15[[instances]]
# # commands, support glob
commands = ["/opt/categraf/scripts/check_password_expiry.sh"
]# # timeout for each command to complete
# timeout = 5# # interval = global.interval * interval_times
# interval_times = 1# # choices: influx prometheus falcon
# # influx stdout example: mesurement,labelkey1=labelval1,labelkey2=labelval2 field1=1.2,field2=2.3data_format = "influx"

influx格式及格式说明:

mesurement,labelkey1=labelval1,labelkey2=labelval2 field1=1.2,field2=2.3
  • mesurement,定义指标名称(或者前缀),比如 connections;
  • mesurement后面是逗号,逗号后面是标签,如果没有标签,则mesurement后面不需要逗号
  • 标签是k=v的格式,多个标签用逗号分隔,比如region=beijing,env=test
  • 标签之后是空格
  • 空格之后是属性字段,多个属性字段用逗号分隔
  • 属性字段是字段名=值的格式,在categraf里只能是数字

最终,mesurement和各个属性字段名称拼接成metric名字

监控Shell脚本check_password_expiry.sh

#!/bin/bash# 定义需要检查的用户名数组
users=("app" "root" "weihu" "mysql" "nginx")# 循环处理每个用户名
for user in "${users[@]}"
do# 设置 LANG 环境变量以确保 chage -l 的输出为英文export LANG=en_US.UTF-8# 获取密码过期时间,并去除前后空格EXPIRY_DATE_RAW=$(chage -l $user | grep "Password expires")EXPIRY_DATE=$(echo "$EXPIRY_DATE_RAW" | awk -F: '{print $2}' | awk '{$1=$1};1')# 检查是否密码永不过期if [[ "$EXPIRY_DATE" =~ ^(never|从不)$ ]]; thenEXPIRY_DATE_TS=99999 # 使用一个很大的数字表示永远不会过期的时间戳EXPIRY_DATE_FORMATTED="99999" # 使用一个很大的日期来表示永不过期DAYS_LEFT=99999 # 表示永不过期else# 将过期日期转换为时间戳EXPIRY_DATE_TS=$(date --date="$EXPIRY_DATE" +%s 2>/dev/null)# 获取今天的日期时间戳TODAY_TS=$(date +%s)# 计算剩余过期天数DAYS_LEFT=$(( (EXPIRY_DATE_TS - TODAY_TS) / 86400 ))# 将过期日期转换为 yyyymmdd 格式EXPIRY_DATE_FORMATTED=$(date --date="$EXPIRY_DATE" "+%Y%m%d" 2>/dev/null)fi# 清除 LANG 环境变量以恢复之前的设置unset LANG# 输出符合 InfluxDB line protocol 的格式echo "password_expiry,account=$user,password_expires_time=$EXPIRY_DATE_FORMATTED days_until_expiry=$DAYS_LEFT"
done

注意:

脚本执行输出结果一定要满足前面exec.toml配置文件中定义的data_format = "influx"数据格式,这样categraf截获的stdout内容,才能成功解析并传给服务端,上述脚本执行输出如下:

[root@localhost categraf]# ./categraf --test --inputs exec
......
18:44:10 password_expiry_days_until_expiry account=app agent_hostname=localhost password_expires_time=20241026 6
18:44:10 password_expiry_days_until_expiry account=root agent_hostname=localhost password_expires_time=99999 99999
18:44:10 password_expiry_days_until_expiry account=weihu agent_hostname=localhost password_expires_time=99999 99999
18:44:10 password_expiry_days_until_expiry account=mysql agent_hostname=localhost password_expires_time=99999 99999
18:44:10 password_expiry_days_until_expiry account=nginx agent_hostname=localhost password_expires_time=99999 99999
......

监控策略规则usermanager.json

上述测试确认数据及格式无误后在夜莺监控平台配置关于Linux系统用户密码有效期的监控大盘,直接导入如下json内容,完成监控策略配置。

{"name": "LInux系统账号密码有效期检查","tags": "usermanager","ident": "","configs": {"var": [{"name": "prom","label": "数据源","type": "datasource","definition": "prometheus","defaultValue": ""},{"name": "user","label": "用户","type": "query","datasource": {"cate": "prometheus","value": 1},"definition": "label_values(account)"}],"panels": [{"type": "table","id": "2d96fa01-57a2-4ba1-b1a2-8369c3bf34f2","layout": {"h": 12,"w": 24,"x": 0,"y": 0,"i": "2d96fa01-57a2-4ba1-b1a2-8369c3bf34f2","isResizable": true},"version": "3.0.0","datasourceCate": "prometheus","datasourceValue": 1,"targets": [{"refId": "A","expr": "password_expiry_days_until_expiry","legend": "","time": {"start": "now-1m","end": "now"},"instant": false}],"transformations": [{"id": "organize","options": {"excludeByName": {"__name__": true,"value": false,"password_expires_on": true,"password_expires_time": false,"account": false,"ident": false},"renameByName": {"account": "系统用户","ident": "主机节点","password_expires_on": "","value": "密码过期剩余天数","password_expires_time": "密码过期时间"},"indexByName": {"ident": 0,"account": 1,"password_expires_time": 2,"value": 3}}}],"name": "系统用户密码过期检查","maxPerRow": 4,"custom": {"showHeader": true,"colorMode": "value","calc": "last","displayMode": "labelsOfSeriesToRows","columns": ["ident","account","password_expires_time","value"],"sortColumn": "value","sortOrder": "ascend","linkMode": "appendLinkColumn"},"options": {"valueMappings": [{"type": "special","result": {"color": "#000000","text": "never"},"match": {"special": 99999}},{"type": "range","result": {"color": "rgba(253, 0, 0, 1)"},"match": {"from": -1000,"to": 15}}],"standardOptions": {"util": "none"}},"overrides": [{"matcher": {"id": "byName","value": "password_expires_time"},"properties": {"valueMappings": [{"type": "special","result": {"color": "#000000","text": "never"},"match": {"special": 99999}}],"standardOptions": {"util": "none"}}}]}],"version": "3.0.0","graphTooltip": "default","graphZoom": "default"}
}

告警策略规则alertrule.json

在夜莺监控平台配置关于Linux系统用户密码有效期的告警策略(在密码过期前7天通过企业微信、飞书渠道每24小时推送告警提醒信息),直接导入如下json内容,完成告警策略配置。

[{"cate": "prometheus","datasource_ids": [0],"name": "Linux系统账号过期告警提醒","note": "你的主机系统账号  {{$labels.account}}  即将过期,请及时修改密码!!!","prod": "metric","algorithm": "","algo_params": null,"delay": 0,"severity": 0,"severities": [3],"disabled": 0,"prom_for_duration": 60,"prom_ql": "","rule_config": {"queries": [{"keys": {"labelKey": "","valueKey": ""},"prom_ql": "password_expiry_days_until_expiry<7","severity": 3}]},"prom_eval_interval": 30,"enable_stime": "00:00","enable_stimes": ["00:00"],"enable_etime": "00:00","enable_etimes": ["00:00"],"enable_days_of_week": ["0","1","2","3","4","5","6"],"enable_days_of_weeks": [["0","1","2","3","4","5","6"]],"enable_in_bg": 0,"notify_recovered": 1,"notify_channels": ["wecom","feishu"],"notify_repeat_step": 1440,"notify_max_number": 0,"recover_duration": 0,"callbacks": [],"runbook_url": "","append_tags": [],"annotations": {},"extra_config": null}
]

效果展示

监控结果展示
在这里插入图片描述
告警推送结果展示

【❌测试平台-告警❌】
级别状态: S3 
规则名称: Linux系统账号不足7天过期告警提醒
规则备注: 你的主机系统账号  app  即将过期,请及时修改密码!!!
告警主机: localhost
触发时间: 2024-10-19 14:17:34
触发时值: 7
发送时间: 2024-10-19 14:17:35


http://www.hkcw.cn/article/vvPVEZwCRX.shtml

相关文章

Houdini POP入门学习02

本篇继续随教程学习POP&#xff0c;并附带学习一些wrangle知识点等。 1.新建空项目&#xff0c;添加Geometry sphere小球。 2.连接popnet&#xff0c;现在粒子随小球形态发射 3.双击进入popnet&#xff0c;在wire_pops_into_here处连接popwind&#xff0c;添加风力 4.设置Wind…

《藏海传》平津侯被斩首!着实让人恨的牙痒痒

《藏海传》平津侯被斩首。藏海传演到今天,目前最大的反派就是平津侯,他霸道强势,杀人如麻,掌控许多人的命运,又有实力派演员黄觉演绎,着实让人恨的牙痒痒。平津侯名字庄芦隐,战功赫赫,他一副正义凛然不信鬼神之说的样子,其实并不是。他逼杀藏海父母,都知道是为了癸玺…

哪吒汽车总部LOGO被连夜拆除?公司回应!原CEO张勇名下超4000万股权被冻结 搬迁与股权冻结引关注

哪吒汽车上海总部外墙的“哪吒汽车”LOGO已被拆除,一同被拆除的还有位于总部的哪吒体验中心标志。据透露,拆除原因是场地到期,公司即将搬家。具体的新办公室地址尚未公布。哪吒汽车原CEO张勇名下股权被冻结,金额为4050万元,冻结期限从2025年5月13日至2028年5月12日。张勇是…

特朗普政府请求上诉法院暂停关税裁决 裁决暂时搁置

5月29日,美国联邦巡回上诉法院批准了特朗普政府的请求,暂时搁置了美国国际贸易法院此前做出的禁止执行依据《国际紧急经济权力法》对多国加征关税措施的裁决。联邦巡回上诉法院表示,在审议相关动议文件期间,美国国际贸易法院在这些案件中作出的判决和永久性禁令将暂时中止,…

禁招国际生案哈佛再获胜 美政府改立场

禁招国际生案哈佛再获胜 美政府改立场提出“30天限期”当地时间29日,美国马萨诸塞州联邦地区法院一名法官批准了哈佛大学提出的发布初步禁令请求,“叫停”特朗普政府取消哈佛大学招收外国学生资质的政策。该法院法官艾莉森伯勒斯29日就该案举行听证会。法院网站最新信息显示,…

中国对沙特等4国试行免签!欢迎说走就走的中国行

5月28日,外交部发言人毛宁主持例行记者会。有记者提问称,中方在东盟-中国-海合会峰会期间宣布对沙特等四国试行免签政策,希望了解具体情况。毛宁表示,为便利中外人员往来,中方决定扩大免签国家范围。自2025年6月9日至2026年6月8日,对沙特、阿曼、科威特、巴林持普通护照人…

【Unity基础】Unity新手实战教程:用ScriptableObject控制Cube颜色

目录 项目概述&#x1f6e0;️ 完整操作步骤&#xff08;10分钟内完成&#xff09;步骤1&#xff1a;创建ScriptableObject类步骤2&#xff1a;创建颜色配置资产步骤3&#xff1a;创建Cube控制器步骤4&#xff1a;设置场景和Cube步骤5&#xff1a;添加简单UI提示步骤6&#xff…

美宣布撤销中国留学生签证 我使馆:已提出严正交涉

美方宣布撤销中国留学生签证 我使馆:已提出严正交涉关于美国务院发表声明称将撤销有关中国在美留学生签证一事,中国驻美使馆发言人5月29日在回答媒体提问时表示,中方坚决反对美方这一政治性、歧视性做法。中国驻美使馆表示,美方此举将严重损害中国在美留学人员正当合法权益…

硅基计划2.0 学习总结 伍 类的继承 初稿

文章目录 一、 继承1. 为什么要继承2. 如何继承3. 情况一&#xff1a;子父类成员变量重名4. 情况二&#xff1a;子父类成员方法重名5. 子父类构造方法问题6. 继承中代码块调用顺序7. protected关键字7. 继承方式8. final关键字9. 继承和组合 一、 继承 1. 为什么要继承 假设一…

长安链合约操作 查询合约命令解析

这个命令使用 ChainMaker 的 cmc 客户端工具查询智能合约 fact 的 find_by_file_hash 方法&#xff0c;通过文件哈希值检索链上存储的数据。以下是详细解析&#xff1a; 命令功能 调用合约 fact 的 查询方法 find_by_file_hash&#xff0c;根据文件哈希值 ab3456df5799b87c77…

嵌入式开发之STM32学习笔记day15

STM32F103C8T6 USART串口协议 1 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 名称 引脚 双工 时钟 电平 设备 USART TX、RX 全双工 …

Java版本的VPN(wlcn)1.3.1-JDK17-SNAPSHOT

项目介绍 wu-lazy-cloud-network 是一款基于&#xff08;wu-framework-parent&#xff09;孵化出的项目&#xff0c;内部使用Lazy ORM操作数据库&#xff0c;主要功能是网络穿透&#xff0c;对于没有公网IP的服务进行公网IP映射 使用环境JDK17 Spring Boot 3.0.2 版本更新 1…

javaweb 前言

Web的发展历史 Web的诞生 (1989-1991)&#xff1a; 1989年&#xff0c;欧洲核子研究组织&#xff08;CERN&#xff09;的蒂姆伯纳斯-李提出了World Wide Web的概念&#xff0c;并发明了统一资源定位符&#xff08;URL&#xff09;、超文本传输协议&#xff08;HTTP&#xff09…

<el-date-picker>配置禁用指定日期之前的时间选择(Vue2+Vue3)

今天突然接受到一个离谱的需求&#xff1a;有一个需要配置定时任务开始执行时间的组件&#xff0c;之前的做法都是用<el-form>的rules定义校验规则&#xff0c;也能实现效果&#xff0c;但是今天产品突发奇想&#xff1a;不能选的时间就置灰&#xff08;就是我们说的禁用…

Redis 主从节点

Redis 主从节点的核心区别 特性主节点 (Master)从节点 (Slave/Replica)读写权限可读可写只读&#xff08;默认配置&#xff09;数据流向数据来源从主节点同步数据连接关系可连接多个从节点只能连接一个主节点故障切换故障时需要手动/自动提升从节点可被提升为新的主节点命令执…

[NOIP 2001 普及组] 数的计算 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();sc.close();int[] arr new int[n 1]; // 存储第i个数对应的合法数列数for (int i 1; i < n; i) {arr[i]; // 只有一个数n的数列…

【NATURE氮化镓】GaN超晶格多沟道场效应晶体管的“闩锁效应”

2025年X月X日,布里斯托大学的Akhil S. Kumar等人在《Nature Electronics》期刊发表了题为《Gallium nitride multichannel devices with latch-induced sub-60-mV-per-decade subthreshold slopes for radiofrequency applications》的文章,基于AlGaN/GaN超晶格多通道场效应晶…

Vue-Router 基础使用

Vue Router 是 Vue 官方的客户端路由解决方案。 客户端路由的作用是在单页应用 SPA 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时&#xff0c;URL 会随之更新&#xff0c;但页面不需要从服务器重新加载。 Vue Router 基于 Vue 的组件系统构建&a…

Linux服务器时间同步——Chronyd

需求&#xff1a;现有三台服务器&#xff0c;想要确保服务器间时间保持一致。 一、安装Chronyd 确认是否安装了chronyd服务 systemctl status chronyd 如果Linux系统中没有安装&#xff0c;可以通过如下命令进行安装&#xff1a; yum install chrony -y 注&#xff1a;确保…

手机实名认证接口如何用C#进行调用?

一、什么是手机实名认证接口&#xff1f; 通过输入用户的姓名与手机号码&#xff0c;或手机号与身份证号码&#xff0c;验证三者之间的匹配关系&#xff0c;从而判断该手机号是否属于指定用户本人。 二、为什么需要运营商二要素验证&#xff1f;传统方式有哪些局限&#xff1…