使用bash解析日志以获取唯一的MAC地址

时间:2017-09-01 19:08:12

标签: linux bash

我已经将Debian盒设置为几个cisco ASA的syslog服务器。他们正在运行DHCP,我正在尝试跟踪分配租约的MAC地址的唯一实例。我已将ASA设置为仅记录cisco DHCPd使用的消息,并将其作为%HOSTIPADDRESS%.log发送到Debian服务器,然后每天将其转出。所以我有一个充满了这个目录的目录:

-rw-r----- 1 syslog adm     536351 Aug 23 06:24 10.10.10.4.log.10
-rw-r----- 1 syslog adm     459634 Aug 22 06:24 10.10.10.4.log.11
-rw-r----- 1 syslog adm     176957 Aug 21 06:24 10.10.10.4.log.12
-rw-r----- 1 syslog adm     246654 Aug 20 06:24 10.10.10.4.log.13
-rw-r----- 1 syslog adm     459978 Aug 19 06:24 10.10.10.4.log.14
-rw-r----- 1 syslog adm     606987 Aug 18 06:21 10.10.10.4.log.15
-rw-r----- 1 syslog adm     599140 Aug 17 06:24 10.10.10.4.log.16
-rw-r----- 1 syslog adm     605837 Aug 16 06:24 10.10.10.4.log.17
-rw-r----- 1 syslog adm     607630 Aug 15 06:24 10.10.10.4.log.18
-rw-r----- 1 syslog adm     189493 Aug 14 06:24 10.10.10.4.log.19

在每个日志中,我都有类似的东西:

Aug 23 06:20:19 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 011c.9148.dbb4.15 (172.16.1.196)
Aug 23 06:20:41 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 0138.0f4a.986a.16 (172.16.1.126)
Aug 23 06:20:51 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 0190.b686.63c6.a9 (172.16.1.193)
Aug 23 06:20:55 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 0154.4e90.8a7a.00 (172.16.1.211)
Aug 23 06:21:11 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 012c.0e3d.fcf6.34 (172.16.1.189)
Aug 23 06:21:35 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 0154.4e90.8a7a.00 (172.16.1.211)
Aug 23 06:21:51 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 0154.4e90.8a7a.00 (172.16.1.211)
Aug 23 06:22:29 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 5caf.0664.cd18 (172.16.1.212)
Aug 23 06:24:00 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 01fc.dbb3.49af.eb (172.16.1.207)
Aug 23 06:24:21 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 01a0.3be3.03b4.74 (172.16.1.195)
Aug 23 06:24:39 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 01b4.79a7.1895.33 (172.16.1.157)

问题是,dhcp租用续订,例如,您可以在172.16.1.211中通过同一设备的多个实例看到。我认为我可以通过设置更长的租约来解决这个问题,因为我对DHCP如何工作的理解是,租约不会启动更新过程,直到它们达到其半衰期但是不起作用。

我也遇到了地址池耗尽的问题,因为我的租约太长了,我使用的ASA模型对其范围的大小有严格的限制。

简而言之,我需要解析这些日志并检索其中一个日志中出现的唯一MAC地址的数量。关于如何用bash实现这一点的任何想法?如果我知道如何从其中一个文件中提取该信息,我可以通过设置过程为所有人使用cron或其他东西来完成。我不是程序员,但是,我是网络工程师。任何帮助,将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:1)

  

简而言之,我需要解析这些日志并检索其中一个日志中出现的唯一MAC地址的数量。

是的,鉴于日志文件中数据的常规性,使用多种不同的工具很容易做到这一点。

最基本的是使用cut

cut -d" " -f13 | sort | uniq -c

更高级的工具是awk,它提供了许多逻辑增强功能,允许您根据需要添加任意数量的条件语句来过滤数据。对于你的情况,虽然它仍然很简单,

awk '{print $12}' | sort | uniq -c

在这两种情况下,cutawk,我只需要将数据中的字段数量计入感兴趣的值,然后将其指定为列({中的字段编号] {1}} - 。说吧)

(在测试这些答案时,我发现使用awk-d" "需要使用剪切(出于某种原因)。我认为-f13默认为cut但我有明确指定它以使代码工作)。

当然,在这两个示例中,我都使用了-d" "sort实用程序,(uniq用于操作方法)。 man uniq,有几个选项,uniq选项表示-c,因此需要对数据进行排序,以便正确累积计数(我在原始评论中遗漏了这一点)。

例如,您可以使用

扩展计数器以按每个记录前面的日期值进行过滤
count

但是,您可以使用awk '/^Aug 23/{print $12}' | sort | uniq -c 进行更多过滤和逻辑工具。

如果您要定期处理日志文件数据(或其他非类似XML的数据),我建议您通过Grymoire's Awk Tutorial工作。

IHTH