使用Docker构建的EFK(Elasticsearch+Fluentd+Kibana)可将YAMAHA RTX路由器的syslog数据可视化

请注意

由于这篇2019年的帖子已经过时且不能正常运行,所以我重新发表了一篇帖子。

 

最新的内容

2022/06/07 关于发布的新内容,添加注意事项
2019/06/11 在GitHub上发布了设置文件的存储库
2019/05/24 在Fluentd的设置说明中添加了补充并追加了GeoIP设置

背景:

rtx-syslog.jpg

# 路由器设备
YAMAHA RTX系列
假设所有家庭都经常使用YAMAHA的RTX系列路由器的syslog。
同时考虑到不仅仅使用一台路由器,还会标记多台路由器的设施号。
此外,对于RTX系列的防火墙设置将不予讨论。
syslog的设置如下所示。

syslog host [syslogサーバー指定]
syslog facility [ファシリティ番号]
syslog notice on

请确保不要忘记设置防火墙,因为syslog使用UDP/514端口。

Docker环境

主机操作系统使用的是Ubuntu Server 18.04 LTS,在Docker CE和Docker-compose上创建容器。请参考官方指南以了解安装方法。我也会记录一个示例。

Docker CE 安装
https://docs.docker.com/install/linux/docker-ce/ubuntu/

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
$ apt-cache madison docker-ce
$ sudo docker run hello-world

Docker Compose 安装
https://docs.docker.com/compose/install/

$ sudo -i
# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# exit
$ docker-compose --version

使用Elasticsearch+Fluentd+Kibana (EFK) 进行建设

通常情况下,使用docker-compose可以轻松构建复杂的EFK。

Elasticsearch的配置

事前に需要对Elasticsearch进行虚拟内存配置的VM所需设置。

$ sudo sysctl -w vm.max_map_count=262144

自动设定 –

vm.max_map_count=262144

创建工作目录

创建EFK的工作目录。

$ mkdir -p efk
$ cd efk

从GitHub上获取存储库

我已经将所需的配置文件上传到GitHub上,您可以从存储库中获取。
https://github.com/ohhara-shiojiri/syslog-efk

$ git clone https://github.com/ohhara-shiojiri/syslog-efk.git

流畅的Fluentd syslog配置

以下是一个示例设置,旨在通过将syslog日志存储在Elasticsearch中,并在Kibana上使用图表等方式进行可视化,从而影响可视化的便利性。

创建日志目录

$ mkdir -p log

除了Elasticsearch,还可以使用文本文件保存syslog的原始数据。它可以用于备份以及正则表达式模式分析等。

syslog接收设置

<source>
  @type syslog
  port 5140
  bind 0.0.0.0
  format none
  tag raw.syslog
</source>

使用fluentd接收syslog的部分。即使没有单独准备syslog服务器,fluentd也会接收消息。
由于使用docker-compose的端口转发将UDP/514转发到UDP/5140,因此会变成这样。

通过文件保存和正则表达式进行模式提取

<match raw.syslog.**>
  @type copy
  <store>
    @type file
    path /home/fluent/log/syslog/syslog
    time_slice_format %Y%m%d
    <buffer time>
      @type file
      path /home/fluent/log/syslog/buffer
    </buffer>
  </store>
  <store>
    @type parser
    format multi_format
    key_name message
    remove_prefix raw
    add_prefix facility
    <pattern>
      format with_extra_fields
      base_format /^(?<target>.+)\s+Rejected\s+at\s+(?<direction>.+)\((?<filter_num>.+)\)\s+filter:\s+(?<proto>.+)\s+(?<src_ip>.+):(?<src_port>.+)\s+>\s+(?<dest_ip>.+):(?<dest_port>.+)$/
      extra_fields { "log_type": "reject" }
    </pattern>
    <pattern>
      format with_extra_fields
      base_format /^(?<msg>.+)$/
      extra_fields { "log_type": "other" }
    </pattern>
  </store>
</match>

syslog日志的保存设置为将日志保存在log/syslog/syslog文件中,并转发到fluentd。
作为日志搜索模式,提取了与防火墙的“Rejected”日志相符的条件。
不符合条件的日志最终被分类为“其他”。

设定设施编号的标签

<match facility.syslog.**>
  @type record_reformer
  tag yamaha_rtx
  <record>
    @facility ${tag_parts[-2]}
  </record>
</match>

为了区分来自多个RTX路由器设备的syslog,使用设备的设施号进行标记分隔。这样可以确定该日志是来自哪个RTX路由器设备。

GeoIP的配置

設定GeoIP插件来根据IP地址确定国家名称。还要获取纬度和经度坐标值以在Kibana上显示地图。由于Fluentd的Dockerfile已经设置好,所以在此阶段已经完成了安装。请注意,设置应该在”filter”中而不是”match”中。而且”filter”应该在”match”之前进行设置。此外,Elasticsearch坐标字段的类型应设置为”geo_point”。这是一个容易出错的地方,我将通过示例解释。

<filter yamaha_rtx.**>
  @type geoip
  geoip_lookup_key  src_ip
  <record>
    location  '[${location.latitude["src_ip"]},${location.longitude["src_ip"]}]'
    country_name    ${country.names.en["src_ip"]}
  </record>
  skip_adding_null_record  true
</filter>

在将Fluentd的数据传输到Elasticsearch的部分之前,添加””的设置。
经度纬度的坐标将被设置为”location”的数组。
国家名称将被设置在”country_name”中。
此外,无法确定国家名称的数据将被跳过和排除。

将Fluentd配置为将数据传输到Elasticsearch。

<match yamaha_rtx.**>
  type elasticsearch
  logstash_format true
  logstash_prefix yamaha_rtx
  include_tag_key true
  tag_key @log_name
  hosts elasticsearch:9200
  buffer_type memory
  num_threads 1
  flush_interval 60
  retry_wait 1.0
  retry_limit 17
</match>

将最后的传输设置到Elasticsearch

启动EFK容器环境

当准备好设置文件后,使用docker-compose启动EFK的各个容器环境。

$ docker-compose build
$ docker-compose up -d

先建立fluentd容器并创建容器镜像,然后启动每个容器。

Elasticsearch的配置设置

在使用Kibana进行地图显示时,纬度和经度的坐标字段必须是”geo_point”类型,但是默认情况下会变成”float”类型。
此外,由于数据在Elasticsearch中按日期分开注册,因此每次更改数据类型都很麻烦,因此我们将在模板设置中自动化这一过程。

在Elasticsearch已经启动的情况下,使用命令行执行以下配置。

$ curl -X POST -H 'Content-Type: application/json' 'localhost:9200/_template/yamaha_rtx-reject' -d '{
  "template": "yamaha_rtx-reject-*",
  "mappings": {
    "fluentd": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}'

因為在設定之後,從新增的數據中進行更改才會生效,所以需要刪除現有的數據。
從 Kibana 的設定畫面進入「Management」→「Elasticsearch」→「Index management」→「yamaha_rtx-reject-年月日」
→「Mapping」,如果「location」的類型是「geo_point」則為正確。
另外,在 Kibana 的設定畫面進入「Management」→「Kibana」→「Index Patterns」→「yamaha_rtx-reject-*」→「Name」
→「location」,如果類型是「geo_point」則為正確。

Kibana的Web用户界面

当EFK的每个容器环境成功启动后,我们将使用Web浏览器打开Kibana。网址为:http://127.0.0.1:5601。

操作Kibana的方法是,在“management”中确认Elasticsearch是否通过Fulentd接收日志。
通过在“management”的“index Patterns”中注册日志模式,然后可以使用您喜欢的图形等方式进行可视化。

请阅读以下内容,并用中文进行翻译,只需提供一种选择:

– Reference

[使用Yamaha RTX810路由器将日志通过syslog发送到docker + EFK进行查看]
(https://qiita.com/330k/items/7c266b44d4a23f017634)

[使用Fluentd + Elasticsearch + Kibana以较为直观的方式可视化YAMAHA RTX1100的syslog]
(https://qiita.com/hiraro/items/474879a70b7b8a715782)

广告
将在 10 秒后关闭
bannerAds