当前位置: 首页 > 面试题库 >

结合日志条目和logstash

黄毅
2023-03-14
问题内容

我想从dnsmasq收集和处理日志,因此决定使用ELK。Dnsmasq用作DHCP服务器和DNS解析器,因此它为这两种服务创建日志条目。

我的目标是将所有包含请求者IP,请求者主机名(如果有)和请求者mac地址的DNS查询发送到Elasticsearch。这样一来,无论设备IP是否更改,我都可以按mac地址对请求进行分组,并显示主机名。

我想做的是以下几点:

1)阅读以下条目:

Mar 30 21:55:34 dnsmasq-dhcp[346]: 3806132383 DHCPACK(eth0)  192.168.0.80 04:0c:ce:d1:af:18 air

2)临时存储关系:

192.168.0.80 => 04:0c:ce:d1:af:18

192.168.0.80 => 空气

3)充实如下所示的条目,添加mac地址和主机名。如果主机名是空的,我将添加mac地址。

Mar 30 22:13:05 dnsmasq[346]: query[A] imap.gmail.com from 192.168.0.80

我找到了一个名为“记忆”的模块,该模块可以让我存储它们,但不幸的是不适用于最新版本的Logstash

我使用的版本:

ElastiSearch 2.3.0
Kibana 4.4.2
Logstash 2.2.2

还有logstash过滤器(这是我第一次尝试使用logstash,因此我敢肯定可以改进配置文件)

input {
  file {
    path => "/var/log/dnsmasq.log"
    start_position => "beginning"
    type => "dnsmasq"
  }
}

filter {
  if [type] == "dnsmasq" {
    grok {
      match =>  [ "message", "%{SYSLOGTIMESTAMP:reqtimestamp} %{USER:program}\[%{NONNEGINT:pid}\]\: ?(%{NONNEGINT:num} )?%{NOTSPACE:action} %{IP:clientip} %{MAC:clientmac} ?(%{HOSTNAME:clientname})?"]
      match =>  [ "message", "%{SYSLOGTIMESTAMP:reqtimestamp} %{USER:program}\[%{NONNEGINT:pid}\]\: ?(%{NONNEGINT:num} )?%{USER:action}?(\[%{USER:subaction}\])? %{NOTSPACE:domain} %{NOTSPACE:function} %{IP:clientip}"]
      match =>  [ "message", "%{SYSLOGTIMESTAMP:reqtimestamp} %{USER:program}\[%{NONNEGINT:pid}\]\: %{NOTSPACE:action} %{DATA:data}"]
    }

    if [action] =~ "DHCPACK" {

    }else if [action] == "query" {

    }else
    {
      drop{}
    }
  }
}
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

问题:

1)是否可以使用最新的logstash版本替代“ memorize”插件?另一个插件或其他过程。

2)我可以将logstash降级到2之前的版本吗(我认为以前是1.5.4)?如果是这样,elasticsearch
2.2.1是否存在任何已知的服务器问题或不兼容?

3)还是应该修改允许“ logstash 2.x”使用的“ memorize”插件(如果可以,那么我将不胜感激如何入门)?


问题答案:

memorize我认为不需要为此重新打包插件。您可以使用aggregate过滤器实现所需的功能。

...

# record host/mac in temporary map
if [action] =~ "DHCPACK" {
  aggregate {
     task_id => "%{clientip}"
     code => "map['clientmac'] = event['clientmac']; map['clientname'] = event['clientname'];"
     map_action => "create_or_update"
     # timeout set to 48h
     timeout => 172800
  }
}

# add host/mac where/when needed
else if [action] == "query" {
   aggregate {
     task_id => "%{clientip}"
     code => "event['clientmac'] = map['clientmac']; event['clientname'] = map['clientname']"
     map_action => "update"
   }
}


 类似资料:
  • 我有一个要求,其中写入日志文件的日志条目需要具有特定格式。 例如: 2016-01-28 21:42:48,399 INFO field d1: value e1;字段2: value e2;字段3: value e3;字段4: value e4 我们正在使用日志返回进行日志记录。字段的值存储在 java 对象中。有关如何使用自定义附加器/布局或任何其他方法实现这一点的任何建议或指针都将有很大的帮

  • 问题内容: 以下是我在CentOS机器上的Catalina.out文件中唯一条目的录入。我正在使用Spring 3和我的应用程序运行Tomcat 6。他们一整堆,所以我只是挑选了一些不断重复的东西。这并非一直发生,但至少每周发生一次。 问题是我该怎么做才能防止风箱发生? 问题答案: 当您定义一个外部标志时,应该在设置 该标志的同时轮询该线程并退出该线程。否则,该线程可能永远不会看到其他线程所做的更

  • 本文向大家介绍Springboot整合log4j2日志全解总结,包括了Springboot整合log4j2日志全解总结的使用技巧和注意事项,需要的朋友参考一下 在项目推进中,如果说第一件事是搭Spring框架的话,那么第二件事情就是在Sring基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上Web项目,因为日志可能是我们了解应用如何执行的唯一方式。 在18年大环境下,更多的

  • 我们在Apache Tomcat上使用log4j2.3。我们最近从log4j1.2升级到log4j2.0。除了一个问题,它工作得很好。我们使用RollingFile Appender每天滚动日志文件。正如预期的那样,文件会在午夜之后滚动,但是当前日志文件不会清除前一天的日志条目。我们最终得到了一个日志文件,它的大小不断增加,并且包含了所有前几天的条目。 这是我们的滚动文件Appender配置: 有

  • 本文向大家介绍简述Kafka的日志目录结构相关面试题,主要包含被问及简述Kafka的日志目录结构时的应答技巧和注意事项,需要的朋友参考一下 每个partition一个文件夹,包含四类文件.index .log .timeindex leader-epoch-checkpoint .index .log .timeindex 三个文件成对出现 前缀为上一个segment的最后一个消息的偏移 log文

  • 我将spring boot配置为使用log4j和pom.xml中的这些行: