Logstash Cisco ASA日志通信详情过滤配置故障排查求助
Cisco ASA日志Logstash Filter配置优化
需求与日志样本
需要从Cisco ASA日志中提取以下字段:
- 源IP
- 目的IP
- 源端口
- 目的端口
- 源区域
- 目的区域
- 协议
- 设备名称
- 数据大小(可选)
目标日志样本:
Dec 27 02:48:08 Test-FW : %ASA-6-302014: Teardown TCP connection 3505833084 for Test-OUT:192.168.1.10/58538 to Mgmt-IN:192.168.100.10/1159 duration 0:00:00 bytes 4153 TCP FINs from Test-OUT
原配置无法匹配该日志格式以提取所需字段,以下是修正后的完整配置:
input { beats { port => 5044 } } filter { # 解析Syslog基础结构,提取设备名称和日志内容 grok { id => "ASA-SYSLOG-BASE" match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:device_name} : %{DATA:asa_tag}: %{GREEDYDATA:syslog_message}" } remove_field => ["message"] # 可选:解析后移除原始message字段 } # 解析ASA连接断开日志,提取通信详情字段 grok { id => "ASA-TEARDOWN-CONN" match => { "syslog_message" => "%{WORD:action} %{WORD:protocol} connection %{NUMBER:conn_id} for %{DATA:src_zone}:%{IP:src_ip}/%{NUMBER:src_port:int} to %{DATA:dst_zone}:%{IP:dst_ip}/%{NUMBER:dst_port:int} duration %{DATA:duration} bytes %{NUMBER:bytes:int} %{GREEDYDATA:conn_details}" } } # 解析日志时间,替换@timestamp为日志实际时间 date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] target => "@timestamp" remove_field => ["syslog_timestamp"] } } output { if [@metadata][pipeline] { elasticsearch { hosts => ["http://localhost:9200"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" pipeline => "%{[@metadata][pipeline]}" } } else { elasticsearch { hosts => ["http://localhost:9200"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } }
配置说明
- 基础Syslog解析:调整第一个grok规则,直接将
syslog_hostname重命名为device_name以匹配日志中的Test-FW,同时修正原配置中多余的语法错误。 - 通信字段提取:针对ASA的
Teardown日志格式,自定义grok规则,精准提取所有需求字段,其中端口和字节数添加:int类型标识,方便后续数值分析。 - 时间字段修正:启用
date插件,将日志中的syslog_timestamp解析为Logstash的@timestamp字段,确保时间维度分析准确。
内容的提问来源于stack exchange,提问作者Pratik Srivastava
相关产品推荐
相关产品推荐

