Graylog自定义钉钉报警

日志转发
Syslog(UDP)统一转发至192.168.22.55:1514
Input
接受日志的节点配置信息如下:
allow_override_date: true
bind_address: 0.0.0.0
charset_name: UTF-8
expand_structured_data: false
force_rdns: false
number_worker_threads: 6
override_source: <empty>
port: 1514
recv_buffer_size: 262144
store_full_message: false
timezone: Asia/Shanghai
如需要可额外增加节点,端口配置和以下一致:
- 1514:1514/tcp # Syslog
- 1514:1514/udp # Syslog
- 12201:12201/tcp # GELF
- 12201:12201/udp # GELF
Indices
用于存储日志,建议一个组件对应一个indices
示例配置以Jumpserver为例(几乎默认配置即可):
Index prefix:jumpserver_
Shards:1
Replicas:0
Field type refresh interval:5 seconds
Field type profile:Not set
Rotation strategy:Data Tiering
Max. in storage:40 days
Min. in storage:30 days
Stream
利用_Rules_来分流形成不同的_Stream_,往往使用这一类报文的唯一标识字段:
| application_name must** match exactly suricata 形成suricata stream | source must **match exactly jumpserver:
| 形成jumpserver stream |
|---|
解析日志分割多字段
原始日志往往是一长串字符串:
jumpserver: operation_log - {“action”: {“label”: “Export”, “value”: “export”}, “datetime”: “2025/06/04 18:23:05 +0800”, “id”: “863130fd-ab64-443f-a2cb-af7b6f3cd368”, “org_id”: “00000000-0000-0000-0000-000000000002”, “org_name”: “DEFAULT”, “remote_addr”: “192.168.109.42”, “resource”: “Export filtered”, “resource_type”: “Account”, “user”: “Administrator(admin)”}
不将json字段分离出来就不能根据某一或某些字段做进一步的区分形成更细分的_stream_从而告警。
解析字段有两种方法:Extractors_和_Pipelines
Alerts
得到更细分的字段以后就能将此字段作为Rule分流新的Stream,并以此Stream中的内容作为告警的来源。
以suricata日志中_priority_ = 1的报文为例,此流为suricata Critical Alerts(已知的、成功的攻击,或者对系统/网络有直接威胁的活动):
Events
为上面的需要告警的Stream创造Event,配置可参考Graylog - View “Critical Priority 1 Event” Event Definition
_Fields_字段连接日志源字段内容和告警消息内容,使得告警客户端(钉钉机器人、邮件等)能读取并发送选中字段内容:
| 日志原字段(部分) | Event -> Fields(部分) | 告警模板引用格式(部分) |
|---|---|---|
| alert_message | ${source.alert_message} | ${event.fields.alert_message} |
| classification | ${source.classification} | ${event.fields.classification} |
不设置Fields字段,在告警模板中直接使用${event.<……>}也可以。
最后notification添加配置好的告警客户端。
钉钉机器人告警
在钉钉群中添加webhook机器人,安全验证方式可选择限定IP(公网IP),复制_webhook url_。
alert->notification中配置:
Title
Suricata alert Dingtalk notification customer
Description
钉钉群机器人
Notification Type
http-notification-v2
URL
https://oapi.dingtalk.com/robot/send?access_token=
Basic Authentication
API Key/Secret Sent As
API Key
API Secret
Method
POST
Time Zone
Asia/Shanghai
Content Type
JSON
Body Template
{
"msgtype": "markdown",
"markdown": {
"title": "#### Suricata 安全告警",
"text": "**消息**: ${event.fields.alert_message}
**分类**: ${event.fields.classification}
**源IP**: ${event.fields.source_ip}:${event.fields.source_port}
**目标IP**: ${event.fields.destination_ip}:${event.fields.destination_port}
**协议**: ${event.fields.protocol}
**时间**: ${event.timestamp}"
}
}