GrayLog+nxlog采集邮箱登录日志csv文件并实现邮箱异地登录钉钉机器人告警

简介: GrayLog+nxlog采集邮箱登录日志csv文件并实现邮箱异地登录钉钉机器人告警

场景如下


某厂商邮箱的登录日志为xlsx/csv格式

只有如下四个字段 登录时间,邮箱地址,登录IP,登录方式

87b816f4f76eb08f7ffe7d844ae60595.png

(图片可点击放大查看)


想要根据邮箱地址关联出员工姓名,工号等相关

并且GeoIP地址库根据IP地址查询登录IP所在地理位置信息

比如登录的IP地理位置是非国内地址时实现钉钉机器人告警


实现思路及实践参考链接


1、csv是否可以转成sylog格式的日志发到GrayLog


解决办法:nxlog xm_csv功能


方法来源链接地址:


https://nxlog.co/question/6063/nxlog-read-multiple-csv-files-and-send-it-siem
https://gitlab.com/nxlog-public/contrib/-/blob/master/guide_configs/xm_gelf_example_csv-nxlog.conf

835bd3f7e2dc039af89385c718e51423.png

(图片可点击放大查看)


2、利用GrayLog的lookup table+pipeline处理功能进行关联查询,实现关联出员工工号,员工姓名等其他字段


解决办法:这个之前有实现过,移植过来即可


3、GrayLog告警+PrometheusAlert告警模板实现钉钉告警时呈现出相关告警字段


解决办法:这个之前有实现过,告警模板修改即可


具体实现的详细步骤如下


1、GrayLog服务器安装nxlog-ce并配置读取csv文件


yum localinstall nxlog-ce-2.11.2190-1_rhel7.x86_64.rpm 
cp /etc/nxlog.conf /etc/nxlog.conf_bak
echo > /etc/nxlog.conf
vi /etc/nxlog.conf

修改为如下内容


## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally under
## /usr/share/doc/nxlog-ce/ and is also available online at
## http://nxlog.org/docs
########################################
# Global directives                    #
########################################
User nxlog
Group nxlog
LogFile /var/log/nxlog/nxlog.log
LogLevel INFO
########################################
# Modules                              #
########################################
<Extension _syslog>
    Module      xm_syslog
</Extension>
<Extension gelf>
    Module      xm_gelf
</Extension>
<Extension charconv>
    Module              xm_charconv
    AutodetectCharsets  gbk,utf-8, euc-jp, utf-16, utf-32, iso8859-2
</Extension>
<Extension csv>
    Module      xm_csv
    Fields      $time, $email_address, $loginIP, $method
    FieldTypes  string, string, string,string
    Delimiter   ,
</Extension>
<Input file>
    Module      im_file
    File        "/home/nxlog/login.csv"
    Exec        csv->parse_csv();
</Input>
<Output udp>
    Module      om_udp
    Host        192.168.31.230
    Port        12201
    OutputType  GELF_UDP
</Output>
<Route csv_to_gelf>
    Path        file => udp
</Route>

45e5474b95769b908eb7f914291c67ef.png

(图片可点击放大查看)


启动nxlog服务


cd /home/
mkdir nxlog
chown -R nxlog:nxlog nxlog/
cd nxlog
rz上传邮件登录日志的csv文件
chown -R nxlog:nxlog login.csv 
chmod 777 login.csv 
firewall-cmd --add-port=12201/udp --permanent 
firewall-cmd --reload
systemctl restart nxlog
systemctl enable nxlog
如果有报错排查nxlog的运行日志
tail -f /var/log/nxlog/nxlog.log


说明:只有csv文件发生变化时才会产生日志


2、GrayLog配置GELF INPUT用于接收日志


c596e6b9ca305acbbc114106f0655139.png

(图片可点击放大查看)

0b6f5b43aead231bc17b1fa81af0cbf4.png

(图片可点击放大查看)


并配置相应的Stream

9a702f14a0b7cb7c11b8f77ff980f426.png

(图片可点击放大查看)


3、配置LookupTable和Pipeline


LookupTable配置过程及相关csv文件截图如下

1c5073e31e737dcc114a52b1174925b9.png

(图片可点击放大查看)

ca55402296edef0c32d4dd15d99e682a.png

(图片可点击放大查看)

d61fb8ef5689cfb1d8089cbdb065e52b.png

(图片可点击放大查看)


pipeline规则语法如下


rule "email2username_lookup_table"
when 
  //  true
   has_field("email_address") AND
   is_not_null(lookup_value("email2username",to_string($message.email_address)))
then 
    let email_addresslookup_multivalue = lookup("email2username",to_string($message.email_address));
    let email_addressmultivalue = split("#",to_string(email_addresslookup_multivalue.value));
    set_field("Employee_Username",to_string(email_addressmultivalue[0]));
    //debug($message.Employee_Username);
    set_field("Employee_Mobile",to_string(email_addressmultivalue[1]));
     //debug($message.Employee_Mobie);
    set_field("Employee_alias_emailaddress",to_string(email_addressmultivalue[2]));
    //debug($message.Employee_alias_emailaddress);
     set_field("Employee_ID",to_string(email_addressmultivalue[3]));
     //debug($message.Employee_ID);
end

129251597cde8c8ff985e5ce52edb2c5.png

(图片可点击放大查看)


pipeline的配置,并应用到对应的Stream中



9975f7d122707c3b7ea4adca672e4a14.png

(图片可点击放大查看)


4、日志查询效果如下


可以看到关联查询出来的字段都出来了


403cc54b9c88a7093fdac7f90059a087.png

(图片可点击放大查看)


5、配置并优化PrometheusAlert告警模板

640.png

(图片可点击放大查看)


6、GraylogAlert告警条件配置

640.png

(图片可点击放大查看)

640.png

(图片可点击放大查看)

640.png

(图片可点击放大查看)


7、最终的告警效果如下

640.png

(图片可点击放大查看)


8、总结


当然这个只是简单的功能实现的测试过程还有很多细节问题需要考虑


例如由于csv文件是一次性导入,这样会出现瞬间钉钉机器人告警数量过大,触发1分钟20条的阈值,导致告警不再产生的情况


需要用一种方式每几秒读几行csv日志文件的方式避免一次性导入造成日志量过大告警停止的问题


这个应该好实现,后续再优化

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
3月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
143 2
|
10月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
514 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
Java Apache 开发工具
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
244 1
|
11月前
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
1864 28
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
394 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
322 1
【赵渝强老师】Oracle的控制文件与归档日志文件
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
413 3
|
监控 Linux 应用服务中间件
系统监控:使用日志文件 journalctl的使用
本文介绍了如何使用`journalctl`命令来监控和查看Linux系统的日志文件,包括查看特定行数、过滤日志级别、实时跟踪日志、按时间段查询日志以及日志轮换和压缩的配置。
818 2
系统监控:使用日志文件 journalctl的使用
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
227 4
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
305 1