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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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日志文件的方式避免一次性导入造成日志量过大告警停止的问题


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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
前端开发 小程序
钉钉小程序 上传一百张图片的base64给接口该怎么写好,正常写的话应该是前端文件限制了长度,只要太大后面一些全部为null
钉钉小程序 上传一百张图片的base64给接口该怎么写好,正常写的话应该是前端文件限制了长度,只要太大后面一些全部为null
|
2月前
|
JSON API 数据格式
在钉钉中,你可以使用API来获取文件或文件夹的信息
在钉钉中,你可以使用API来获取文件或文件夹的信息
42 2
|
2月前
|
JSON API 数据格式
钉钉中,你可以使用API来获取文件或文件夹的信息
钉钉中,你可以使用API来获取文件或文件夹的信息
119 2
|
3月前
|
Web App开发 存储 监控
日志服务之告警接入与管理
本教程介绍如何使用日志服务接入NGINX模拟数据,并配置告警规则来对NGINX访问错误进行监控。
280 0
|
11月前
|
监控 Java 中间件
拦截应用 error日志并发送到钉钉群|Java 开发实战
现在应用都需要对日志进行监控或者报警,现在普遍的做法是采用EKL收集日志,然后再由Grafana进行内容展示和及告警策略等,那如果项目架构比较简单(单体应用),又不想搞那么多中间件依赖怎么办,这里有一种简单的方式可以实现~
拦截应用 error日志并发送到钉钉群|Java 开发实战
|
监控
限制SLS告警通知时段的几种常见方法
在对系统进行监控告警的过程中,有时候并非在任何时候都要接收告警通知,本文会介绍几种常见的限制告警通知时段的方法,以及它们各自所适用的场景。
288 0
限制SLS告警通知时段的几种常见方法
|
存储 API
钉钉开放平台的存储类API无法提交文件的问题
存储类API: 调用”提交文件”时返回,会返回code 400, 提示 uploadkey 无效。 code: 400, Specified parameter uploadKey is not valid. request id: 768D2EE8-A32E-7A04-A593-63EB0037E431 uploadkey 确实是使用“获取文件上传信息”正常的获得,并且在调用“提交文件”接口前,使用“添加权限”接口赋予了访问权限。
184 0
|
运维 监控 安全
SLS告警通知到Line
Line是一款由NHN Japan(韩国Naver Corporation公司的子公司)在日本推出的即时通信软件,在日韩拥有较大的用户规模。Line支持构建机器人,并且通过API给机器人推送消息,添加了机器人的用户以及群聊就可以接收到机器人推送的消息。但是由于Line的服务器位于海外,SLS的告警无法直接发送通知。因此本文介绍了如何利用阿里云的其他服务来将SLS的告警通知到Line。
407 2
|
运维 监控 安全
SLS相同监控规则太多?试试告警监控模板
随着使用SLS监控告警服务的用户越来越多,部分用户的业务数据因为一些原因(如不同区域、数据分流、按标签分类等原因)写入了不同Logstore,而这些业务数据的字段以及信息是完全一样的,对于这种数据,用户往往想要使用同样的一套监控规则来进行监控告警。
174 0
|
Oracle 关系型数据库
Oracle自带adrci工具清理告警日志
Oracle自带adrci工具清理告警日志
436 0
Oracle自带adrci工具清理告警日志
热门文章
最新文章
推荐文章
更多