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

需求描述

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.pswp.cn/pingmian/82755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RV1126-OPENCV 交叉编译

一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包&#xff0c;并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…

如何加载私钥为 SecKeyRef

本文介绍如何在 iOS/macOS 下将私钥加载为 SecKeyRef&#xff0c;涵盖 PEM 格式的 ECC 密钥读取、X9.63 数据构建、以及与 Keychain 的集成。 1. 使用 SecKeyCreateWithData 加载私钥 Apple 提供的 SecKeyCreateWithData 方法可以直接将密钥数据加载为 SecKeyRef 对象。 SecK…

Missashe考研日记—Day44-Day50

Missashe考研日记—Day44-Day50 写在面前 本系列博客用于记录博主一周的学习进度&#xff0c;具体知识总结在目前已有的笔记中&#xff1a;1.高数强化学习笔记2.计网复习笔记3.新增&#xff1a;线代题型总结 专业课408 这周先是把计网第三章数据链路层剩下的局域网以及之后…

Windows下安装并使用kubectl查看K8S日志

【1】安装kubectl 官网文档&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/ 下载后得到 kubectl.exe&#xff0c;放到一个目录下&#xff0c;然后配置环境变量。 此时CMD 进入DOS命令窗口 kubectl version【2】配置config文件 其实就是…

攻防世界János-the-Ripper

打开压缩包是一个文件&#xff0c;用010Editor打开可以发现里面有隐藏文件flag.txt 此时想到分离文件&#xff0c;利用binwalk工具 利用binwalk生成出的是一个压缩包&#xff0c;解压缩但是发现竟然解压需要密码 这里就可以开始暴力破解密码了&#xff0c;这里我用的是ARCHPR工…

XPlifeapp:高效打印,便捷生活

在数字化时代&#xff0c;虽然电子设备的使用越来越普遍&#xff0c;但打印的需求依然存在。无论是学生需要打印课表、资料&#xff0c;还是职场人士需要打印名片、报告&#xff0c;一个高效便捷的打印软件都能大大提高工作效率。XPlifeapp就是这样一款超级好用的手机打印软件&…

【计算机网络】第2章:应用层—Web and HTTP

目录 一、Web 与 HTTP 二、总结 &#xff08;一&#xff09;Web 的定义与功能 &#xff08;二&#xff09;HTTP 协议的定义与功能 &#xff08;三&#xff09;HTTP 协议的核心机制 1. HTTP 请求与响应流程 2. HTTP 的连接类型 3. HTTP 的状态码 &#xff08;四&#xf…

如何实现 LRU 缓存:基于LinkedHashMap?

全文目录&#xff1a; 开篇语前言1. LinkedHashMap 简介1.1 LinkedHashMap 的构造方法 2. 基于 LinkedHashMap 实现 LRU 缓存2.1 设计思路2.2 实现步骤2.3 代码说明2.4 测试案例2.5 解释 3. LRU 缓存优化3.1 removeEldestEntry() 方法的灵活性3.2 内存管理 4. 总结文末 开篇语 …

Spring Boot测试框架全面解析

Spring Boot测试框架基础 Spring Boot通过增强Spring测试框架的能力,为开发者提供了一系列简化测试流程的新注解和特性。该框架建立在成熟的Spring测试基础之上,通过自动化配置和专用注解显著提升了测试效率。 核心依赖配置 要使用Spring Boot的全部测试功能,只需在项目中…

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

DAY29.2 Java核心基础 Spring Boot 整合 Spring Data JPA Spring Data JPA根据具体的数据库分为不同的子模块&#xff0c;无论是关系型数据库和非关系型数据库&#xff0c;Spring Data都提供了支持 Mysql&#xff1a;Spring Data JPA Redis&#xff1a;Spring Data Redis …

Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南 免费内网穿透家用服务器

Ubuntu 服务器配置与 Cloudflare Tunnel 部署指南 本文档总结了服务器配置相关内容&#xff0c;包括 Ubuntu 服务器配置、硬盘扩容、静态 IP 设置以及 Cloudflare Tunnel 的部署步骤。 目录 硬盘分区与扩容设置静态 IPCloudflare Tunnel 部署SSH 通过 Cloudflare Tunnel常见…

降低实验检测报告编制耗时 质检LIMS系统的应用策略

在质检工作流程中&#xff0c;检测报告编制往往是耗时耗力的关键环节。传统人工编制报告不仅效率低下&#xff0c;还容易出现数据错误、格式不统一等问题。质检 LIMS 系统凭借其强大的自动化、智能化功能&#xff0c;为检测报告编制带来革命性变革&#xff0c;能够将编制时间减…

同为.net/C#的跨平台运行时的mono和.net Core有什么区别?

Mono 和 .NET Core&#xff08;现已统一为 .NET&#xff09;都是 .NET 生态的跨平台实现&#xff0c;但它们在设计目标、技术特性和应用场景上有显著区别。以下是详细对比&#xff1a; ​​1. 历史背景​​ ​​项目​​​​诞生时间​​​​开发者​​​​当前状态​​​​Mo…

Android AIDL Hal最低保证出现的问题

1. AIDL HAL 的“最低保证”特性 &#xff08;1&#xff09;协议层级的强制支持 在 IComposer AIDL 接口定义中&#xff08;如 android.hardware.graphics.composer3&#xff09;&#xff0c;Google 已经将部分功能列为 必须支持的特性&#xff08;MUST&#xff09;。例如&am…

苹果FINDMY和谷歌FIND HUB增强共享位置功能

近期&#xff0c;苹果Findmy增强了追踪和分享丢失物品位置方面的功能&#xff0c;“共享物品位置”&#xff0c;用户可以安全地与航空a公司等第三方分享丢失物品的位置&#xff0c;以便于行李找回。 iOS 18.2的这一新功能使用户可以轻松、安全地与航空公司等第三方分享AirTag或…

基于GA遗传优化的FIR滤波器幅频相频均衡补偿算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 在数字信号处理领域&#xff0c;有限冲激响应&#xff08;FIR&#xff09;滤波器因其结构简单、稳定性好且易于实现线性相位等优点被广泛应用。然而&#xff0c;实…

双路物理CPU机器上安装Ubuntu并部署KVM以实现系统多开

在双路物理CPU机器上安装Ubuntu并部署KVM以实现系统多开&#xff0c;并追求性能最优&#xff0c;需要从硬件、宿主机系统、KVM配置、虚拟机配置等多个层面进行优化。 以下是详细的操作指南和优化建议&#xff1a; 阶段一&#xff1a;BIOS/UEFI 设置优化 (重启进入) 启用虚拟化…

adb查看、设置cpu相关信息

查内存 adb shell dumpsys meminfo查CPU top -m 10打开 system_monitor adb shell am start -n eu.chainfire.perfmon/.LaunchActivity设置CPU的核心数 在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心&#xff0c;如果是双核&#xff0c;就是cpu0和cpu1&#xff0c…

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

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

One Year~

入局 作为科班学生&#xff0c;没事就在CSDN闲逛&#xff0c;只作为旁观者的身份去体会别人的好文。当时也没想着说去自己写一些博客记录学习过程。相信大多数同学和我有一样的心理。 但在看鱼皮哥的课程时&#xff0c;发现他有着写文档和博客的习惯&#xff0c;整理自己的思路…