【实践】GrayLog4.2使用webhook成功推送日志告警到钉钉群机器人

2021-12-21 20:44:23 浏览数 (1)

GrayLog4.2使用webhook成功推送日志告警到钉钉群机器人实践

GrayLog4.2可以使用HTTP告警和邮件告警两种方式进行日志告警

下面同时测试这两种告警方式

准备条件

  • 1、QQ邮箱为例,QQ邮箱授权码

以QQ邮箱为例

  • 2、下载webhook
代码语言:javascript复制
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攻击日志较多时,告警就会很频繁

但在研究聚合,比如登录失败的数量达到一定数量时才触发告警,测试时未能成功,后续有时间再研究

(图片可点击放大查看)

0 人点赞