在CentOS 8上安装ELK堆栈

欢迎来到我们的安装演示 ELK堆栈 在CentOS 8上。

ELK是三个开源项目的缩写: Elasticsearch,Logstash和Kibana。 Elasticsearch是搜索和分析引擎。 Logstash是服务器端的数据处理管道,它同时从多个源中提取数据,进行转换,然后将其发送到类似Elasticsearch的“存储”中。 Kibana允许用户在Elasticsearch中使用图表将数据可视化。

在CentOS 8上安装ELK堆栈

Elastic Stack组件的安装顺序非常重要。通常需要下订单 Elasticsearch> Kibana> Logstash>节拍。另请注意,所有组件应具有相同的版本。

要在CentOS 8系统上安装Elastic Stack组件,您可以选择创建Elastic RPM存储库或使用它们各自的RPM二进制文件安装每个组件。

在CentOS 8上创建Elastic Stack RPM存储库

可以通过运行以下命令来创建Elastic Stack版本7.x存储库。

cat > /etc/yum.repos.d/elaticstack.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 RPM存储库或仅通过使用RPM二进制文件在CentOS 8上安装Elasticsearch。

dnf install elasticsearch

或者,您可以使用RPM二进制文件安装ES,版本7.5.2是撰写本文时最新的稳定版本。

VERSION=7.5.2
dnf install https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$VERSION-x86_64.rpm

配置Elasticsearch

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

如果需要从Kibana或Logstash或Beats启用远程访问,请将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" : "elastic.kifarunix-demo.com",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "iyslQrEdTISVdVGsDNDvlA",
  "version" : {
    "number" : "7.5.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "8bec50e1e0ad29dad5653712cf3bb580cd1afcdf",
    "build_date" : "2020-01-15T12:11:52.313576Z",
    "build_snapshot" : false,
    "lucene_version" : "8.3.0",
    "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配置文件进行编辑和取消注释,并更改以下几行;

...
#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上安装Logstash

Logstash是Elastic Stack的组件,在将事件数据发送到Elasticsearch数据存储之前,它会进一步处理事件数据。例如,您可以开发自定义正则表达式,grok模式以从事件数据中提取特定字段。

也可以直接将数据发送到Elasticsearch,而不是通过Logstash传递数据。

要安装Logstash,首先需要安装Java。 Logstash需要Java 8或Java11。在此演示中,我们使用Java 8(OpenJDK)。

java --version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

您可以通过运行以下命令在CentOS 8上简单地安装Java 8。确保已如上所述创建弹性堆栈存储库。

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

接下来,在CentOS 8上安装Logstash。

yum install logstash

测试Logstash

一旦完成Logstash的安装,您可以通过运行如下所示的基本管道命令来验证它已准备就绪,可以处理事件数据。

cd /usr/share/logstash/bin/
./logstash -e 'input { stdin { } } output { stdout {} }'

按ENTER执行命令,并等待管道准备好接收输入数据。

...
[INFO ] 2020-02-09 08:37:38.732 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"}
[INFO ] 2020-02-09 08:37:38.818 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
The stdin plugin is now waiting for input:
[INFO ] 2020-02-09 08:37:39.395 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}

输入任何字符串,例如, 测试Logstash管道 然后按Enter。

Logstash处理输入数据,并将时间戳和主机地址信息添加到消息中。

{
          "host" => "elastic.kifarunix-demo.com",
       "message" => "testing Logstash pipeline",
    "@timestamp" => 2020-02-09T05:42:17.666Z,
      "@version" => "1"
}

您可以通过按Ctrl + D停止Logstash管道。

配置Logstash收集事件并将事件发送到Elasticsearch

Logstash现在可以接收和处理数据了。在本演示中,我们将学习如何配置Logstash管道以从本地系统收集事件。

Logstash管道包括三个部分:

  • 输入:从不同来源收集数据
  • 过滤:(可选)对数据进行进一步处理。
  • 输出:将接收到的数据存储到目标数据存储中,例如Elasticsearch。

配置Logstash输入插件

为了从本地系统收集事件,我们将使用 文件 输入插件。您可以使用多个输入插件,请检查它们 Logstash输入插件

在此演示中,我们使用一个配置文件来定义管道组件;输入,过滤器,输出。

vim /etc/logstash/conf.d/local-ssh-events.conf
## Collect System Authentication events from /var/log/secure
input {
  file {
    path => "/var/log/secure"
    type => "ssh_auth"
  }

配置Logstash过滤器插件

配置Logstash过滤器以仅提取相关事件,例如从 /var/log/secure 文件。

Feb  8 23:21:28 elastic sshd[2320]: Accepted password for root from 192.168.56.1 port 37328 ssh2
Feb  9 00:11:37 elastic sshd[5487]: Failed password for root from 192.168.56.1 port 37886 ssh2

我们正在使用Grok过滤器来处理从日志文件中提取这些行;

vim /etc/logstash/conf.d/local-ssh-events.conf
## Collect System Authentication events from /var/log/secure
input {
  file {
    path => "/var/log/secure"
    type => "ssh_auth"
  }
}
## Design a grok filter to extract useful SSH authentication events.
filter {
  if [type] == "ssh_auth" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}s+%{IPORHOST:dst_host}s+%{WORD:syslog_program}[d+]:s+(?w+s+password)s+fors+%{USER:auth_user}s+froms+%{SYSLOGHOST:src_host}.*" }
      add_field => { "activity" => "SSH Logins" }
      add_tag => "linux_auth"
    }
  }
}

您可以在Kibana上使用Grok Debugger来测试您的模式, 开发工具> Grok调试器

配置Logstash输出插件

接下来,我们将已处理的数据发送到在本地主机上运行的Elasticsearch。

您需要先验证grok过滤器,然后才能将数据发送到Elasticsearch。请按照下面的指南学习如何调试grok模式。

如何调试Logstash Grok筛选器

定义Elasticsearch输出。

vim /etc/logstash/conf.d/local-ssh-events.conf
## Collect System Authentication events from /var/log/secure
input {
  file {
    path => "/var/log/secure"
    type => "ssh_auth"
  }
}
filter {
  if [type] == "ssh_auth" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}s+%{IPORHOST:dst_host}s+%{WORD:syslog_program}[d+]:s+(?w+s+password)s+fors+%{USER:auth_user}s+froms+%{SYSLOGHOST:src_host}.*" }
      add_field => { "activity" => "SSH Logins" }
      add_tag => "linux_auth"
    }
  }
}
## Send data to Elasticsearch on the localhost
output {
   elasticsearch {
     hosts => ["192.168.56.154:9200"]
     manage_template => false
     index => "ssh_auth-%{+YYYY.MM}"
 }
}

确保Logstash可以读取正在监视的文件, /var/log/secure。默认情况下,文件归root拥有。因此,为了使logstash能够读取文件,请首先将组所有权更改为adm,将logstash添加到组adm,然后为logstash分配读取访问权限。

chown :adm /var/log/secure
usermod -aG adm logstash
chmod g+r /var/log/secure

验证Logstash配置

配置完成后,运行以下命令以验证Logstash配置,然后才能启动它。

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2020-02-09T00:43:10,110][INFO ][org.reflections.Reflections] Reflections took 92 ms to scan 1 urls, producing 20 keys and 40 values 
Configuration OK
...

配置OK 确认配置文件中没有错误。

如果需要调试特定的Logstash管道配置文件,则可以执行以下命令。将配置文件的路径替换为您的文件路径。

sudo -u logstash /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/local-ssh-events.conf --path.settings /etc/logstash/

运行Logstash

您可以启动并启用Logstash以在系统启动时运行。

systemctl enable --now logstash
systemctl status logstash
● logstash.service - logstash
   Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-02-09 14:52:12 EAT; 1min 4s ago
 Main PID: 6699 (java)
    Tasks: 32 (limit: 11500)
   Memory: 474.9M
   CGroup: /system.slice/logstash.service
           └─6699 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.>
...

可视化Kibana上的数据

要在Kibana中可视化和浏览数据,您需要创建一个索引模式以从Elasticsearch检索数据。在这个演示中,我们的索引模式是 ssh_auth-*,如Logstash Elasticsearch输出插件上所定义, index => "ssh_auth-%{+YYYY.MM}"

在Kibana仪表板上,导航到 管理> Kibana>索引模式>创建索引模式。索引模式可以匹配单个索引的名称,或包含通配符(*)以匹配多个索引。

在CentOS 8上安装ELK(弹性)堆栈

单击下一步,然后选择 @时间戳 作为时间过滤器,然后单击 创建索引模式

之后,点击 发现标签 在左窗格上查看数据。将时间范围扩大到 今天

在CentOS 8上安装ELK(弹性)堆栈

您也可以选择要查看的字段。

在CentOS 8上安装ELK(弹性)堆栈

这就是在CentOS 8上安装ELK Stack的全部内容。

参考;

安装弹性堆栈

Sidebar