在CentOS 8上设置Kibana Elasticsearch和Fluentd

你好。在本教程中,您将学习如何在Ubuntu CentOS 8上设置Kibana Elasticsearch和Fluentd。通常,您将使用Logstash,Kibana和Beats设置Elasticsearch。但是在此设置中,我们将看到如何使用Fluentd代替Logstash来收集日志并将其运送到搜索和分析引擎Elasticsearch。那么,什么是Fluentd? 流利的 “是用于统一日志记录层的开源数据收集器”。它可以充当日志 aggregator (例如,与Elasticsearch位于同一服务器上)并作为日志 forwarder (从受监视的节点收集日志)。

以下是Fluentd的主要功能。

  • 提供JSON统一记录:Fluentd尝试将收集的数据构造为JSON,从而使其能够 统一 处理日志数据的所有方面:收集,过滤,缓冲和输出跨日志 多个来源和目的地。这使数据处理器可以轻松处理数据,
  • 支持可插拔架构:这使得社区可以轻松扩展Fluentd的功能,因为他们可以开发任何自定义插件来收集其日志。
  • 消耗最少的系统资源:Fluentd需要很少的系统资源,而原始版本需要30-40 MB的内存,并且可以处理13,000个事件/秒/核心。还有一个称为Fluentd的轻型货运代理 流利的位
  • 内置可靠性注意:Fluentd支持内存和基于文件的缓冲,以防止数据间节点丢失。 Fluentd还支持可靠的故障转移,并且可以设置为具有高可用性。

在CentOS 8上设置Kibana Elasticsearch和Fluentd

为了在CentOS 8上设置Kibana Elasticsearch和Fluentd,我们将按照以下步骤分别安装和配置每个组件。

在CentOS 8上创建弹性堆栈存储库

运行以下命令在CentOS 8上创建Elastic Stack版本7.x存储库。

cat > /etc/yum.repos.d/elasticstack.repo << EOL
[elasticstack]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOL

运行系统软件包更新。

dnf update

在CentOS 8上安装Elasticsearch

从Elastic仓库在CentOS 8上安装Elasticsearch;

dnf install elasticsearch

配置Elasticsearch

开箱即用,Elasticsearch与默认配置选项一起很好地工作。在此设置中,我们将根据 重要的Elasticsearch配置

如果需要从Kibana启用远程访问,请将Elasticsearch绑定地址设置为特定的系统IP。 将IP 192.168.56.154替换为您适当的服务器IP地址

sed -i 's/#network.host: 192.168.0.1/network.host: 192.168.56.154/' /etc/elasticsearch/elasticsearch.yml

您还可以保留默认设置,以仅允许本地访问Elasticsearch。

当配置为在非环回接口上侦听时,Elasticsearch希望加入一个 。但是,由于我们正在设置单节点弹性堆栈,因此您需要在ES配置中通过输入以下行来指定这是单节点设置: discovery.type: single-node,在发现配置选项下。但是,如果您的ES正在监听回送接口,则可以跳过此步骤。

vim /etc/elasticsearch/elasticsearch.yml
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
#cluster.initial_master_nodes: ["node-1", "node-2"]
# Single Node Discovery
discovery.type: single-node

接下来,将JVM堆大小配置为不超过内存大小的一半。在这种情况下,我们的测试服务器具有2G RAM,并且最大和最小大小的堆大小均设置为512M。

vim /etc/elasticsearch/jvm.options
...
################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms512m
-Xmx512m
...

启动并启用ES以在系统引导上运行。

systemctl daemon-reload
systemctl enable --now elasticsearch

验证Elasticsearch是否按预期运行。

curl -XGET 192.168.56.154:9200
{
  "name" : "centos8.kifarunix-demo.com",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "rVPJG0k9TKK9-I-mVmoV_Q",
  "version" : {
    "number" : "7.9.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "083627f112ba94dffc1232e8b42b73492789ef91",
    "build_date" : "2020-09-01T21:22:21.964974Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

在CentOS 8上安装Kibana

下一个要安装的Elastic Stack组件是Kabana。由于我们已经创建了Elastic Stack仓库,因此您只需运行以下命令即可安装它。

yum install kibana

配置Kibana

首先,您需要配置Kibana以允许远程访问。默认情况下,它允许在端口5601 / tcp上进行本地访问。因此,打开Kibana配置文件进行编辑和取消注释,并更改以下几行;

vim /etc/kibana/kibana.yml
...
#server.port: 5601
...
# To allow connections from remote users, set this parameter to a non-loopback address.
#server.host: "localhost"
...
# The URLs of the Elasticsearch instances to use for all your queries.
#elasticsearch.hosts: ["http://localhost:9200"]

这样看起来就如下图所示:

相应地替换Kibana和Elasticsearch的IP地址。请注意,在此演示中,所有Elastic Stack组件都在同一主机上运行。

...
server.port: 5601
...
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "192.168.56.154"
...
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://192.168.56.154:9200"]

启动并启用Kibana以在系统启动时运行。

systemctl enable --now kibana

打开FirewallD上的Kibana端口(如果正在运行);

firewall-cmd --add-port=5601/tcp --permanent
firewall-cmd --reload

访问Kibana界面

现在,您可以使用URL从浏览器访问Kibana, http://kibana-server-hostname-OR-IP:5601

在Kibana Web界面上,您可以选择尝试样本数据,因为我们还没有任何数据发送到Elasticsearch。当然,在将数据发送到ES之后,您也可以选择浏览自己的数据。

在CentOS 8上安装和配置Fluentd

接下来,安装并配置Fluentd将日志收集到Elasticsearch中。在运行Elasticsearch的同一服务器上,我们将安装Fluentd聚合器,以便它可以使用Fluentd转发器从端点节点接收日志。

安装Fluentd的先决条件

设置Fluentd时需要考虑许多要求。

  • 确保您的系统时间与最新的时间服务器(NTP)同步,以便日志可以具有正确的事件时间戳记条目。
  • 增加打开文件描述符的最大数量。默认情况下,打开文件描述符的最大数量设置为1024;默认值为0。
ulimit -n
1024

您可以通过编辑limits.conf文件并添加以下行来将最大数量设置为65536;

vim /etc/security/limits.conf
root            soft    nofile  65536
root            hard    nofile  65536
*               soft    nofile  65536
*               hard    nofile  65536
  • 接下来,如果您有几个Fluentd节点,并且预期会有很高的负载,则需要调整一些Network内核参数。
cat >> /etc/sysctl.conf << 'EOL'
net.core.somaxconn = 1024
net.core.netdev_max_backlog = 5000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_wmem = 4096 12582912 16777216
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_max_syn_backlog = 8096
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
EOL

通过重新引导系统或仅运行以下命令来更新更改;

sysctl -p

在CentOS 8上安装Fluentd Aggregator

通过使用以下工具,简化了流利的安装过程 td-agent (Treasure Agent),一种RPM软件包,可提供基于Fluentd的数据收集器的稳定分发,并由 宝藏数据公司

安装 td-agent 软件包,运行以下命令以下载并执行脚本,该脚本将创建td-agent RPM存储库并在CentOS 8上安装td-agent。

dnf install curl
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh

在CentOS 8上运行Fluentd td-agent

安装后,td-agent将安装systemd服务单元以对其进行管理。因此,您可以通过执行以下命令来启动并使其在系统启动时运行;

systemctl enable --now td-agent

检查状态;

systemctl status td-agent
● td-agent.service - td-agent: Fluentd based data collector for Treasure Data
   Loaded: loaded (/usr/lib/systemd/system/td-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-09-18 22:09:40 EAT; 29s ago
     Docs: https://docs.treasuredata.com/articles/td-agent
  Process: 2543 ExecStart=/opt/td-agent/bin/fluentd --log $TD_AGENT_LOG_FILE --daemon /var/run/td-agent/td-agent.pid $TD_AGENT_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 2549 (fluentd)
    Tasks: 9 (limit: 5027)
   Memory: 89.4M
   CGroup: /system.slice/td-agent.service
           ├─2549 /opt/td-agent/bin/ruby /opt/td-agent/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid
           └─2552 /opt/td-agent/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid --u>

Sep 18 22:09:38 centos8.kifarunix-demo.com systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data...
Sep 18 22:09:40 centos8.kifarunix-demo.com systemd[1]: Started td-agent: Fluentd based data collector for Treasure Data.

安装Fluentd Elasticsearch插件

在此设置中,我们将使用Elasticsearch作为我们的搜索和分析引擎,因此,将使用Fluentd收集的所有数据。因此,请安装Fluentd Elasticsearch插件。

td-agent-gem install fluent-plugin-elasticsearch

另外,如果您要通过Internet将日志发送到Fluentd,则需要安装 secure_forward 流利的输出插件,可安全发送数据。

td-agent-gem install fluent-plugin-secure-forward

您可以在上看到Fluentd插件的完整列表 按类别页面的插件列表

在CentOS 8上配置Fluentd Aggregator

通过td-agent RPM安装的Fluentd的默认配置文件是 /etc/td-agent/td-agent.conf。配置文件由以下指令组成:

  1. source 指令确定输入源
  2. match 指令确定输出目的地
  3. filter 指令确定事件处理管道
  4. system 指令设置系统范围的配置
  5. label 指令将输出和过滤器分组以进行内部路由
  6. @include 指令包括其他文件

配置Fluentd Aggregator输入插件

首先,有很多 输入插件 Fluentd聚合器可用于从Fluentd转发器接收/接收数据的设备。

在此设置中,我们通过Fluentd接收日志 forward 输入插件forward 输入插件侦听TCP套接字以接收事件流。它还侦听UDP套接字以接收心跳消息。 Fluentd Forward插件的默认端口是24224。

创建配置备份;

cp /etc/td-agent/td-agent.conf{,.old}
vim /etc/td-agent/td-agent.conf
...

  @type forward
  port 24224
  bind 192.168.60.6

...

确保在防火墙上打开此端口。

firewall-cmd --add-port=24224/{tcp,udp} --permanent
firewall-cmd --reload

配置Fluentd Aggregator输出插件

配置Fluentd通过以下方式将数据发送到Elasticsearch elasticsearch流利的输出 插入。

vim /etc/td-agent/td-agent.conf
####
## Output descriptions:
##

  @type elasticsearch
  host 192.168.60.6
  port 9200
  logstash_format true
  logstash_prefix fluentd
  enable_ilm true
  index_date_pattern "now/m{yyyy.mm}"
  flush_interval 10s


####
## Source descriptions:
##

  @type forward
  port 24224
  bind 192.168.60.6

match指令的通配符在 文件语法页面

那就是我们修改过的Fluentd聚合器配置文件。您可以调整它以满足您的要求。

重新启动Fluentd td-agent;

systemctl restart td-agent

在远程节点上安装Fluentd转发器

既然已经设置了Kibana,Elasticsearch和Fluentd Aggregator,并准备从远程端点接收收集的数据,请继续安装Fluentd转发器,将日志推送到Fluentd聚合器。

在此设置中,我们使用远程CentOS 8作为收集其日志的远程端点。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh

Ubuntu 20.04;

curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-focal-td-agent4.sh | sh

Ubuntu 18.04

curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent4.sh | sh

有关更多系统安装的信息,请参阅 流利的安装 页。

配置Fluentd转发器以将日志发送到Fluentd Aggregator

同样,复制配置文件。

cp /etc/td-agent/td-agent.conf{,.old}

配置流畅的转发器输入和输出

在此设置中,作为示例,我们将收集系统身份验证日志, /var/log/secure,从已删除的CentOS 8系统中。

vim /etc/td-agent/td-agent.conf

我们将使用 尾巴输入插件 通过尾部读取日志文件。因此,我们的输入配置看起来像;


  @type tail
  path /var/log/secure
  pos_file /var/log/td-agent/secure.pos
  tag ssh.auth
  
    @type syslog
  

接下来,配置如何将日志传送到Fluentd聚合器。在此设置中,我们利用 转发输出插件 将数据发送到运行Elasticsearch,Kibana和Fluentd聚合器的日志管理器服务器,侦听端口24224 TCP / UDP。


  @type forward
  send_timeout 60s
  recover_wait 10s
  hard_timeout 60s

  
    name log_mgr
    host 192.168.60.6
    port 24224
    weight 60
  

通常,我们的Fluentd转发器配置如下所示;

####
## Output descriptions:
##

  @type forward
  send_timeout 60s
  recover_wait 10s
  hard_timeout 60s

  
    name log_mgr
    host 192.168.60.6
    port 24224
    weight 60
  

####
## Source descriptions:
##

  @type tail
  path /var/log/secure
  pos_file /var/log/td-agent/secure.pos
  tag ssh.auth
  
    @type syslog
  

保存并退出配置文件。

接下来,授予Fluentd对身份验证日志文件或正在收集的任何日志文件的读取权限。默认情况下,只有root可以读取日志;

ls -alh /var/log/secure
-rw-------. 1 root root 14K Sep 19 00:33 /var/log/secure

为确保Fluentd可以读取此日志文件,请授予组和世界读取权限;

chmod og+r /var/log/secure

权限现在应该看起来像;

ll /var/log/secure
-rw-r--r--. 1 root root 13708 Sep 19 00:33 /var/log/secure

接下来,启动并启用Fluentd转发器以在系统启动时运行;

systemctl enable --now td-agent

检查状态;

systemctl status td-agent
● td-agent.service - td-agent: Fluentd based data collector for Treasure Data
   Loaded: loaded (/usr/lib/systemd/system/td-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-09-19 01:23:40 EAT; 29s ago
     Docs: https://docs.treasuredata.com/articles/td-agent
  Process: 3163 ExecStart=/opt/td-agent/bin/fluentd --log $TD_AGENT_LOG_FILE --daemon /var/run/td-agent/td-agent.pid $TD_AGENT_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 3169 (fluentd)
    Tasks: 8 (limit: 11476)
   Memory: 71.0M
   CGroup: /system.slice/td-agent.service
           ├─3169 /opt/td-agent/bin/ruby /opt/td-agent/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid
           └─3172 /opt/td-agent/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid --u>

Sep 19 01:23:39 localrepo.kifarunix-demo.com systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data...
Sep 19 01:23:40 localrepo.kifarunix-demo.com systemd[1]: Started td-agent: Fluentd based data collector for Treasure Data.

如果拖尾了Fluentd转发器日志,则应该看到它开始读取日志文件。

tail -f /var/log/td-agent/td-agent.log
  

2020-09-19 01:23:40 +0300 [info]: starting fluentd-1.11.2 pid=3163 ruby="2.7.1"
2020-09-19 01:23:40 +0300 [info]: spawn command to main:  cmdline=["/opt/td-agent/bin/ruby", "-Eascii-8bit:ascii-8bit", "/opt/td-agent/bin/fluentd", "--log", "/var/log/td-agent/td-agent.log", "--daemon", "/var/run/td-agent/td-agent.pid", "--under-supervisor"]
2020-09-19 01:23:41 +0300 [info]: adding match pattern="pattern" type="forward"
2020-09-19 01:23:41 +0300 [info]: #0 adding forwarding server 'log_mgr' host="192.168.60.6" port=24224 weight=60 plugin_id="object:71c"
2020-09-19 01:23:41 +0300 [info]: adding source type="tail"
2020-09-19 01:23:41 +0300 [info]: #0 starting fluentd worker pid=3172 ppid=3169 worker=0
2020-09-19 01:23:41 +0300 [info]: #0 following tail of /var/log/secure
2020-09-19 01:23:41 +0300 [info]: #0 fluentd worker is now running worker=0
...

在运行Elasticsearch,Kibana和Fluentd聚合器的服务器上,您可以检查端口24224是否接收到任何数据;请检查端口24224是否已接收任何数据。

tcpdump -i enp0s8 -nn dst port 24224
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
01:28:37.183634 IP 192.168.60.5.39452 > 192.168.60.6.24224: Flags [S], seq 2062965426, win 29200, options [mss 1460,sackOK,TS val 3228636873 ecr 0,nop,wscale 7], length 0
01:28:37.184740 IP 192.168.60.5.39452 > 192.168.60.6.24224: Flags [.], ack 2675674893, win 229, options [nop,nop,TS val 3228636875 ecr 354613533], length 0
01:28:37.185145 IP 192.168.60.5.39452 > 192.168.60.6.24224: Flags [F.], seq 0, ack 1, win 229, options [nop,nop,TS val 3228636875 ecr 354613533], length 0
01:28:38.181546 IP 192.168.60.5.39454 > 192.168.60.6.24224: Flags [S], seq 1970844825, win 29200, options [mss 1460,sackOK,TS val 3228637794 ecr 0,nop,wscale 7], length 0
01:28:38.182649 IP 192.168.60.5.39454 > 192.168.60.6.24224: Flags [.], ack 2454001874, win 229, options [nop,nop,TS val 3228637796 ecr 354614454], length 0
...

检查Elasticsearch上的可用指标

对运行Fluentd转发器的主机执行失败和成功的SSH身份验证。之后,检查您的Elasticsearch索引是否已创建。在此设置中,我们将索引前缀设置为fluentd, logstash_prefix fluentd

curl -XGET http://192.168.60.6:9200/_cat/indices?v
health status index                          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .apm-custom-link               kuDD9tq0RAapIEtF4k79zw   1   0          0            0       208b           208b
green  open   .kibana-event-log-7.9.1-000001 gJ6tr6p5TCWmu1GhUNaD4A   1   0          9            0     48.4kb         48.4kb
green  open   .kibana_task_manager_1         T-dC9DFNTsy2uoYAJmvDtg   1   0          6           20    167.1kb        167.1kb
green  open   .apm-agent-configuration       lNCadKowT3eIg_heAruB-w   1   0          0            0       208b           208b
yellow open   fluentd-2020.09.19             nWU0KLe2Rv-T5eMD53kcoA   1   1         30            0     36.2kb         36.2kb
green  open   .async-search                  C1gXukCuQIe5grCFpLwxaQ   1   0          0            0       231b           231b
green  open   .kibana_1                      Mw6PD83xT1KksRqAvO1BKg   1   0         22            5     10.4mb         10.4mb

创建流畅的Kibana索引

确认已在Elasticsearch上接收到数据并将其写入索引后,导航至Kibana Web界面, http://server-IP-or-hostname:5601,然后创建索引。

点击 管理选项卡(在左侧面板上)> Kibana>索引模式>创建索引模式。输入通配符作为索引名称。

在下一步中,选择 时间戳记 作为时间过滤器,然后单击 创建索引模式 创建您的索引模式。

在Kibana上查看流利的数据

创建Fluentd Kibana索引后,您现在可以通过以下方式在Kibana上查看事件数据: 发现 标签在左窗格中。相应地扩展您的时间范围。

在CentOS 8上设置Kibana Elasticsearch和Fluentd

这就是在CentOS 8上安装和设置Kibana Elasticsearch和Fluentd的全部过程。

进一步阅读

流利的安装

流利的安装

Fluentd-Elasticsearch插件参考

Sidebar