GrayLog4.2使用webhook成功推送日志告警到钉钉群机器人实践
GrayLog4.2可以使用HTTP告警和邮件告警两种方式进行日志告警
下面同时测试这两种告警方式
准备条件
- 1、QQ邮箱为例,QQ邮箱授权码
以QQ邮箱为例
- 2、下载webhook
https://github.com/adnanh/webhook
(图片可点击放大查看)
- 3、准备一个钉钉群机器人
参考钉钉开放文档,添加自定义机器人
代码语言:javascript复制https://open.dingtalk.com/document/robots/custom-robot-access
钉钉机器人安全设置中为webhook所在服务器的公网出口IP
(图片可点击放大查看)
(图片可点击放大查看)
- 4、GrayLog日志分析服务器及测试机器
GrayLogServer:192.168.31.127
测试机 192.168.31.232
具体步骤
1、Graylog配置文件进行修改
代码语言:javascript复制cd /etc/graylog/server/
vim server.conf
配置文件中添加邮箱服务器的配置
代码语言:javascript复制transport_email_enabled = true
transport_email_hostname = smtp.qq.com
transport_email_port = 587
transport_email_use_auth = true
transport_email_use_tls = true
transport_email_use_ssl = false
transport_email_auth_username = 1187724389@qq.com
transport_email_auth_password = rrXXXXXXXXXXX
transport_email_subject_prefix = [graylog]
transport_email_from_email = graylog@walkingcloud.cn
transport_email_web_interface_url = https://graylog.walkingcloud.cn
(图片可点击放大查看)
(图片可点击放大查看)
2、重启服务
代码语言:javascript复制systemctl restart graylog-server.service
tail -f /var/log/graylog-server/server.log
(图片可点击放大查看)
3、部署webhook
下载webhook后上传到Graylog服务器
(图片可点击放大查看)
代码语言:javascript复制cd /opt
tar -zxvf webhook-linux-amd64.tar.gz -C ./
cp webhook-linux-amd64/webhook ./
chmod 755 webhook
./webhook --help
vi /opt/hooks.json
[
{
"id": "push2dingtalk",
"execute-command" : "/opt/push2robot.sh",
"pass-arguments-to-command":
[
{
"source":"entire-payload",
#"name":"parameter-name"
}
]
}
]
(图片可点击放大查看)
(图片可点击放大查看)
启动webhook
代码语言:javascript复制 ./webhook -hooks /opt/hooks.json -port 8080 --verbose
(图片可点击放大查看)
代码语言:javascript复制firewall-cmd --add-port=8080/tcp --permanent --zone=public
firewall-cmd --reload
并测试
curl -H "Content-Type: application/json" -X POST -d 'test' http://192.168.31.127:8080/hooks/push2dingtalk
(图片可点击放大查看)
发送POST请求到http://192.168.31.127:8080/hooks/push2dingtalk
(图片可点击放大查看)
可以看到请求可以收到
4、配置GrayLog Alert告警流程
参考如下文档
代码语言:javascript复制https://zhuanlan.zhihu.com/p/342764427
1、新建用户
(图片可点击放大查看)
(图片可点击放大查看)
再新建告警通知类型Email Notification
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
2、再新建HTTP Notification
Title:钉钉机器人告警
URL http://192.168.31.127:8080/hooks/push2dingtalk
(图片可点击放大查看)
3、并执行测试告警
可以看到webhook有收到post请求
然后保存
(图片可点击放大查看)
(图片可点击放大查看)
4、接下来配置Alert
比如SSH 登录失败告警
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
5、接下配置推送到钉钉机器人的脚本
提前yum安装jq工具
(图片可点击放大查看)
推送到钉钉机器人的脚本脚本内容如下
(图片可点击放大查看)
代码语言:javascript复制[root@centos ~]# vi /opt/push2robot.sh
[root@centos ~]# vi /opt/alert.json
[root@centos ~]#
[root@centos ~]# chmod 755 /opt/push2robot.sh
[root@centos ~]# cat /opt/push2robot.sh
#!/bin/bash
PAYLOAD= $1
echo $1 >> /var/log/test.log
PAYLOAD1=`echo $1 | jq '.event_definition_title' | sed 's/"//g'`
PAYLOAD2=`echo $1 | jq '.backlog[].fields.full_message' | sed 's/"//g'`
echo $PAYLOAD1 >> /var/log/payload1.log
echo $PAYLOAD2 >> /var/log/payload2.log
sed -i "s/PAYLOAD1/$PAYLOAD1/g" /opt/alert.json
sed -i "s/PAYLOAD2/$PAYLOAD2/g" /opt/alert.json
curl -H "Content-Type: application/json" -X POST -d @/opt/alert.json https://oapi.dingtalk.com/robot/send?access_token=413d9a8435aeaXXXXXXXXX91648b73a069c7aa2e709595
cat > /opt/alert.json << EOF
{
"msgtype": "markdown",
"markdown":
{
"title":"PAYLOAD1",
"text": "#### PAYLOAD1 n #####原始日志:PAYLOAD2 n"
}
}
EOF
代码语言:javascript复制[root@centos ~]# cat /opt/alert.json
{
"msgtype": "markdown",
"markdown":
{
"title":"PAYLOAD1",
"text": "#### PAYLOAD1 n #####原始日志:PAYLOAD2 n"
}
}
6、接下触发一下SSH登录失败
192.168.31.232测试机触发登录失败的日志
(图片可点击放大查看)
验证是否有收到钉钉告警和邮件告警
(图片可点击放大查看)
(图片可点击放大查看)
可以看到已经收到邮件和钉钉告警
总结:
当然单条登录失败就触发一条告警,当SSH攻击日志较多时,告警就会很频繁
但在研究聚合,比如登录失败的数量达到一定数量时才触发告警,测试时未能成功,后续有时间再研究
(图片可点击放大查看)