在CentOS 8上设置Kibana Elasticsearch和Fluentd
首先附上命令
查看当前服务器是centOS版本:rpm -q centos-release
查看是否安装fluetd:rpm -qa|grep td-agent
elk健康状态查看:curl http://192.168.100.154:9200/_cat/indices?v
fluetd日志查看:tail -f /var/log/td-agent/td-agent.log
fluetd编辑:vi /etc/td-agent/td-agent.conf
查看fluetd配置文件是否正确:fluentd --dry-run -c fluent.conf
fluentd查看状态:systemctl status td-agent
fluentd重启:systemctl restart td-agent
fluentd日志:ls -alh /var/log/secure
fluentd日志查看:cat td-agent.log
fluentd发送日志: curl -X POST -d 'json={"json":"message"}' http://192.168.100.154:8888/debug.test
fluentd默认日志查看:less /var/log/td-agent/td-agent.log
查看文件位置: find / -name agent.jar
cd /opt/td-agent/lib/ruby/gems/2.7.0/gems/fluentd-1.11.2/fluent.conf
您将学习如何在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
。配置文件由以下指令组成:
source
指令确定输入源match
指令确定输出目的地filter
指令确定事件处理管道system
指令设置系统范围的配置label
指令将输出和过滤器分组以进行内部路由@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上查看事件数据: 发现 标签在左窗格中。相应地扩展您的时间范围。
注意
1.配置文件配置修改完后要验证,重启,如果重启失败就是配置文件的问题
fluentd --dry-run -c fluent.conf systemctl restart td-agent
2.写到kafka
<source>
@type forward
@id forward_input
</source>
<source>
@type http
@id http_input
port 8888
</source>
<source>
@type tail
#format none
format /^(?<all>.*)$/
path /etc/td-agent/logs/app_log.txt
pos_file /etc/td-agent/applog.pos
tag app_log.txt
</source>
<match **>
@type kafka
brokers 192.168.100.105:9092,192.168.100.106:9092,192.168.100.107:9092
default_topic test_fluentd
output_data_type json
</match>
<match **>
@type elasticsearch
host "192.168.100.154"
port 9200
index_name "fluentd-fluent.info.20201026"
<buffer tag,time>
timekey 10s
flush_mode interval
flush_interval 10
</buffer>
</match>
3.写到es
<source>
@type http
port 8888
</source>
<match **>
@type elasticsearch
host "192.168.100.154"
port 9200
index_name "fluentd-${tag}.%Y%m%d"
<buffer tag,time>
timekey 10s
flush_mode interval
flush_interval 10
</buffer>
</match>
这就是在CentOS 8上安装和设置Kibana Elasticsearch和Fluentd的全部过程。
总结,ELK其实也能满足一般的使用,fluentd的资料不多,如果非必须就ELK就可以,对于集群来说内存一般不差这点问题,可以省很多去研究的时间。