Logstash:运用 memcache 过滤器进行大规模的数据丰富

在之前的文章 “Logstash translate 过滤器简介”,我详细地介绍了如何使用 translate 过滤器来丰富我们的数据。在文章 “运用 Elasticsearch 过滤器来丰富数据”,我也介绍了如何使用 Elasticsearch 过滤器来对数据进行丰富。 尽管 Elasticsearch和 translate过滤器适合较小的工作量,但我们可以通过提供一个可扩展的扩充层来改善此状况,该扩充层不会在单个 Logstash 节点上保持状态。

例如,使用 memcached filter 插件,我们可以对想要匹配的内容进行非常快速的无阻塞查找。例如恶意软件请求,威胁数据(已知的错误IP),甚至静态资源(用于主机查找的服务器IP)。对内存缓存的查找是简单的键/值查找。 memcache 的另一个好处是它不会在更新时阻止。由于我们的读取工作量非常大,因此我们不想在更新扩展密钥时阻止查找。由于内存缓存是易失性的,在重新启动后不会持久存在,因此在刷新数据时应考虑到这一点,并确保将此信息存储在持久性存储中,以便可以根据需要重新填充内存缓存。

利用内存缓存和内存缓存池,我们可以根据需要扩展和推送尽可能多的流量。通过适当的配置,单个内存缓存实例可以保守地每秒处理10万次查询。对于每个内存缓存的文档,他们的建议值是200k +,但通过适当的调整,我们看到的数字甚至更高。在池配置中,这将线性扩展。

新的 memcached filter plugin 支持以下内容:

  • 通过一致性哈希的Memcache池
  • 命名空间
  • Multi- Get/ Multi-Set

 

下面,我们将运用一个具体的例子来展示如何进行使用。

 

安装

我们首先来安装 memcached。我在 Ubuntu 20.04 的机器上进行。Memcached 软件包包含在Ubuntu默认仓库中,安装过程非常简单……只需运行以下命令即可将其连同支持工具一起安装……

sudo apt update
sudo apt install memcached libmemcached-tools

运行上述命令后,应已安装 Memcached 服务器并可以使用…要检查其状态,请运行以下命令:

sudo systemctl status memcached

如果没有错误的话,你将看到如下类似的输出:

$ sudo systemctl status memcached
[sudo] password for liuxg: 
● memcached.service - memcached daemon
     Loaded: loaded (/lib/systemd/system/memcached.service; enabled; vendor pre>
     Active: active (running) since Tue 2020-06-23 09:17:06 CST; 17min ago
       Docs: man:memcached(1)
   Main PID: 905 (memcached)
      Tasks: 10 (limit: 18985)
     Memory: 2.5M
     CGroup: /system.slice/memcached.service
             └─905 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 ->

6月 23 09:17:06 liuxgu systemd[1]: Started memcached daemon.

这就是在 Ubuntu 上安装 Memcached 的方法...服务器应该正在运行并且应该响应请求...以下命令可用于停止,启动和启用Memcached:

sudo systemctl stop memcached.service
sudo systemctl start memcached.service
sudo systemctl enable memcached.service

配置 Memcached

现在已经安装了服务器,可以在/etc/memcached.conf中找到其配置文件。

文件中的默认设置对于大多数环境和应用程序来说已经足够了……但是,对于更高级的设置,请打开文件并进行更改以应用到您的环境中……

例如,Memcached侦听服务器的本地IP地址(127.0.0.1)…如果只希望它侦听其他IP,请编辑文件中的行,使其看起来类似于以下内容:

sudo vi /etc/memcached.conf

然后将本地服务器 IP 替换为您要使用的IP地址。你还可以更改其默认端口号…

# Default connection port is 11211
-p 11211

# Run the daemon as root. The start-memcached will default to running as root if no
# -u command is present in this config file
-u memcache
# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it's listening on a firewalled interface.
-l 127.0.0.1

保存文件并退出…然后重新启动 Memcached 服务以应用更改…

使用 Memcached

对 Memcached 还不是很熟的开发者来说,可以参阅链接 https://www.tutorialspoint.com/memcached/memcached_set_data.htm

Memcached set 命令用于将新值设置为新键或现有键。语法为:

set key flags exptime bytes [noreply] 
value 

语法中的关键字如下所述-

  • key - 它是密钥的名称,通过它存储和从Memcached检索数据。
  • flags - 它是服务器与用户提供的数据一起存储的32位无符号整数,在检索到该项目时将与数据一起返回。
  • exptime - 它是到期时间,以秒为单位。 0表示没有延迟。 如果exptime超过30天,则Memcached会将其用作UNIX时间戳记过期。
  • bytes - 这是数据块中需要存储的字节数。 这是需要存储在 Memcached中 的数据的长度。
  • noreply(可选)-它是一个参数,它通知服务器不要发送任何答复。
  • value - 它是需要存储的数据。 使用上述选项执行命令后,需要在新行中传递数据。

在以下示例中,我们使用 1.1.1.1 作为键,并在其中设置值为 botip,有效时间为900秒。

$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set 1.1.1.1 0 900 5
botip
STORED
get 1.1.1.1
VALUE 1.1.1.1 0 5
botip
END

运行 Logstash

下面是一个完整的示例,包含 logstash 配置文件,输入和输出:

logstash_memcache.conf

input {
  stdin {
    codec => json
  }
}

filter {
  memcached {
     hosts => ["localhost:11211"]
     get => {
        "%{ip}" => "threat_src"
     }
  }
}

output {
  stdout {
     codec => rubydebug
  }
}

在上面我们使用 memcached filter 来丰富我们的数据。当数据和 memcahed 里的数据匹配后,把丰富的数据赋予给 threat_src 字段。运行起我们的 Logstash:

./bin/logstash -f logstash_memcache.conf 

我们在 Logstash 的 console 中输入如下的 json:

{ "ip" : "1.1.1.1" }

我们可以看到如下的输出:

在上面,我们可以看出来 thread_srce 的值被赋予 botip。botip 的值是从 Memcached 里来的。

当我们输入如下的 json:

{ "ip" : "2.2.2.2" }

Logstash 的输出为:

由于没有匹配的 ip 为 2.2.2.2 在 Memcached 里,所以没有丰富的数据。

我们接下来按照上面的方法把 2.2.2.2 家进来。

在上面,我们加入了 2.2.2.2 对应的值为 liuxg 5个字母。那么我们再次输入:

{ "ip" : "2.2.2.2" }

这一次,我们看到丰富后的数据。

参考:

【1】https://websiteforstudents.com/install-memcached-with-apache-on-ubuntu-20-04-18-04/

【2】https://www.tutorialspoint.com/memcached/memcached_set_data.htm

【3】https://www.securitydistractions.com/2019/05/17/enriching-elasticsearch-with-threat-data-part-2-memcached-and-python/

实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值