我已经将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或其他东西来完成。我不是程序员,但是,我是网络工程师。任何帮助,将不胜感激。
谢谢,
答案 0 :(得分:1)
简而言之,我需要解析这些日志并检索其中一个日志中出现的唯一MAC地址的数量。
是的,鉴于日志文件中数据的常规性,使用多种不同的工具很容易做到这一点。
最基本的是使用cut
cut -d" " -f13 | sort | uniq -c
更高级的工具是awk
,它提供了许多逻辑增强功能,允许您根据需要添加任意数量的条件语句来过滤数据。对于你的情况,虽然它仍然很简单,
awk '{print $12}' | sort | uniq -c
在这两种情况下,cut
和awk
,我只需要将数据中的字段数量计入感兴趣的值,然后将其指定为列({中的字段编号] {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